[Pkg-gnupg-commit] [gnupg2] 01/06: more patches from upstream (Closes: #854829)
Daniel Kahn Gillmor
dkg at fifthhorseman.net
Tue Mar 21 16:47:05 UTC 2017
This is an automated email from the git hooks/post-receive script.
dkg pushed a commit to branch experimental
in repository gnupg2.
commit c54e2a060369a7e7d8c75b90e7001d26462e6bd4
Author: Daniel Kahn Gillmor <dkg at fifthhorseman.net>
Date: Fri Mar 17 13:31:28 2017 -0400
more patches from upstream (Closes: #854829)
---
...scm-Remove-framework-for-immediate-values.patch | 144 ++++++++++++++
.../patches/0061-gpgscm-Simplify-hash-tables.patch | 215 +++++++++++++++++++++
...ore-warning-alerts-in-the-GNUTLS-handshak.patch | 44 +++++
...re-the-conflict-set-includes-the-current-.patch | 72 +++++++
debian/patches/series | 4 +
5 files changed, 479 insertions(+)
diff --git a/debian/patches/0060-gpgscm-Remove-framework-for-immediate-values.patch b/debian/patches/0060-gpgscm-Remove-framework-for-immediate-values.patch
new file mode 100644
index 0000000..591eb4e
--- /dev/null
+++ b/debian/patches/0060-gpgscm-Remove-framework-for-immediate-values.patch
@@ -0,0 +1,144 @@
+From: Justus Winter <justus at g10code.com>
+Date: Thu, 16 Mar 2017 16:58:00 +0100
+Subject: gpgscm: Remove framework for immediate values.
+
+* tests/gpgscm/scheme.c (IMMEDIATE_TAG): Remove macro.
+(is_immediate): Likewise.
+(set_immediate): Likewise.
+(clr_immediate): Likewise.
+(enum scheme_types): Set the LSB in every value.
+(fill_vector): Adapt.
+(vector_elem): Likewise.
+(set_vector_elem): Likewise.
+(mark): Likewise.
+(gc): Test for the LSB to tell typeflags apart from pointers stored in
+the same memory location.
+--
+
+Supporting immediate values would require invasive changes to the
+interpreter and is likely not worth the trouble. On the other hand,
+tagging pointers in vectors complicated the hash table implementation
+needlessly. Therefore, I remove this again.
+
+This fixes a crash on big endian architectures.
+
+GnuPG-bug-id: 2996
+Signed-off-by: Justus Winter <justus at g10code.com>
+(cherry picked from commit 38c955599f7c6c20faeec57d8e1df7d2c0eeba18)
+---
+ tests/gpgscm/scheme.c | 69 ++++++++++++++++++++++-----------------------------
+ 1 file changed, 29 insertions(+), 40 deletions(-)
+
+diff --git a/tests/gpgscm/scheme.c b/tests/gpgscm/scheme.c
+index af97c27..ff91fc0 100644
+--- a/tests/gpgscm/scheme.c
++++ b/tests/gpgscm/scheme.c
+@@ -117,41 +117,29 @@ static const char *strlwr(char *s) {
+
+
+
+-/* Support for immediate values.
+- *
+- * Immediate values are tagged with IMMEDIATE_TAG, which is neither
+- * used in types, nor in pointer values.
+- *
+- * XXX: Currently, we only use this to tag pointers in vectors. */
+-#define IMMEDIATE_TAG 1
+-#define is_immediate(p) ((pointer) ((uintptr_t) (p) & IMMEDIATE_TAG))
+-#define set_immediate(p) ((pointer) ((uintptr_t) (p) | IMMEDIATE_TAG))
+-#define clr_immediate(p) ((pointer) ((uintptr_t) (p) & ~IMMEDIATE_TAG))
+-
+-
+-
++/* All types have the LSB set. The garbage collector takes advantage
++ * of that to identify types. */
+ enum scheme_types {
+- T_STRING=1 << 1, /* Do not use the lsb, it is used for
+- * immediate values. */
+- T_NUMBER=2 << 1,
+- T_SYMBOL=3 << 1,
+- T_PROC=4 << 1,
+- T_PAIR=5 << 1,
+- T_CLOSURE=6 << 1,
+- T_CONTINUATION=7 << 1,
+- T_FOREIGN=8 << 1,
+- T_CHARACTER=9 << 1,
+- T_PORT=10 << 1,
+- T_VECTOR=11 << 1,
+- T_MACRO=12 << 1,
+- T_PROMISE=13 << 1,
+- T_ENVIRONMENT=14 << 1,
+- T_FOREIGN_OBJECT=15 << 1,
+- T_BOOLEAN=16 << 1,
+- T_NIL=17 << 1,
+- T_EOF_OBJ=18 << 1,
+- T_SINK=19 << 1,
+- T_LAST_SYSTEM_TYPE=19 << 1
++ T_STRING = 1 << 1 | 1,
++ T_NUMBER = 2 << 1 | 1,
++ T_SYMBOL = 3 << 1 | 1,
++ T_PROC = 4 << 1 | 1,
++ T_PAIR = 5 << 1 | 1,
++ T_CLOSURE = 6 << 1 | 1,
++ T_CONTINUATION = 7 << 1 | 1,
++ T_FOREIGN = 8 << 1 | 1,
++ T_CHARACTER = 9 << 1 | 1,
++ T_PORT = 10 << 1 | 1,
++ T_VECTOR = 11 << 1 | 1,
++ T_MACRO = 12 << 1 | 1,
++ T_PROMISE = 13 << 1 | 1,
++ T_ENVIRONMENT = 14 << 1 | 1,
++ T_FOREIGN_OBJECT = 15 << 1 | 1,
++ T_BOOLEAN = 16 << 1 | 1,
++ T_NIL = 17 << 1 | 1,
++ T_EOF_OBJ = 18 << 1 | 1,
++ T_SINK = 19 << 1 | 1,
++ T_LAST_SYSTEM_TYPE = 19 << 1 | 1
+ };
+
+ static const char *
+@@ -1361,20 +1349,20 @@ INTERFACE static void fill_vector(pointer vec, pointer obj) {
+ size_t i;
+ assert (is_vector (vec));
+ for(i = 0; i < vector_length(vec); i++) {
+- vec->_object._vector._elements[i] = set_immediate(obj);
++ vec->_object._vector._elements[i] = obj;
+ }
+ }
+
+ INTERFACE static pointer vector_elem(pointer vec, int ielem) {
+ assert (is_vector (vec));
+ assert (ielem < vector_length(vec));
+- return clr_immediate(vec->_object._vector._elements[ielem]);
++ return vec->_object._vector._elements[ielem];
+ }
+
+ INTERFACE static pointer set_vector_elem(pointer vec, int ielem, pointer a) {
+ assert (is_vector (vec));
+ assert (ielem < vector_length(vec));
+- vec->_object._vector._elements[ielem] = set_immediate(a);
++ vec->_object._vector._elements[ielem] = a;
+ return a;
+ }
+
+@@ -1576,7 +1564,7 @@ E2: setmark(p);
+ if(is_vector(p)) {
+ int i;
+ for (i = 0; i < vector_length(p); i++) {
+- mark(clr_immediate(p->_object._vector._elements[i]));
++ mark(p->_object._vector._elements[i]);
+ }
+ }
+ #if SHOW_ERROR_LINE
+@@ -1677,8 +1665,9 @@ static void gc(scheme *sc, pointer a, pointer b) {
+ for (i = sc->last_cell_seg; i >= 0; i--) {
+ p = sc->cell_seg[i] + CELL_SEGSIZE;
+ while (--p >= sc->cell_seg[i]) {
+- if (typeflag(p) & IMMEDIATE_TAG)
+- continue;
++ if ((typeflag(p) & 1) == 0)
++ /* All types have the LSB set. This is not a typeflag. */
++ continue;
+ if (is_mark(p)) {
+ clrmark(p);
+ } else {
diff --git a/debian/patches/0061-gpgscm-Simplify-hash-tables.patch b/debian/patches/0061-gpgscm-Simplify-hash-tables.patch
new file mode 100644
index 0000000..213cf2c
--- /dev/null
+++ b/debian/patches/0061-gpgscm-Simplify-hash-tables.patch
@@ -0,0 +1,215 @@
+From: Justus Winter <justus at g10code.com>
+Date: Thu, 16 Mar 2017 17:18:01 +0100
+Subject: gpgscm: Simplify hash tables.
+
+* tests/gpgscm/scheme.c (oblist_add_by_name): We now always get a
+slot. Simplify accordingly.
+(oblist_find_by_name): Always return the slot.
+(vector_elem_slot): New function.
+(new_slot_spec_in_env): We now always get a slot. Remove parameter
+'env'. Simplify accordingly.
+(find_slot_spec_in_env): Always return a slot.
+(new_slot_in_env): Adapt callsite.
+(opexe_0): Likewise.
+(opexe_1): Likewise.
+(scheme_define): Likewise.
+--
+
+Now that the ill-devised immediate values framework is gone, there is
+no need to tag the pointers in vectors anymore. Therefore, we can
+always return a pointer to the slot in the hash table lookup
+functions.
+
+Signed-off-by: Justus Winter <justus at g10code.com>
+(cherry picked from commit 6a3f857224eab108ae38e6259194b01b0ffdad8b)
+---
+ tests/gpgscm/scheme.c | 71 ++++++++++++++++-----------------------------------
+ 1 file changed, 22 insertions(+), 49 deletions(-)
+
+diff --git a/tests/gpgscm/scheme.c b/tests/gpgscm/scheme.c
+index ff91fc0..b76e83c 100644
+--- a/tests/gpgscm/scheme.c
++++ b/tests/gpgscm/scheme.c
+@@ -224,6 +224,7 @@ INTERFACE INLINE int is_vector(pointer p) { return (type(p)==T_VECTOR); }
+ * represent it. */
+ #define vector_size(len) (1 + ((len) - 1 + 2) / 3)
+ INTERFACE static void fill_vector(pointer vec, pointer obj);
++INTERFACE static pointer *vector_elem_slot(pointer vec, int ielem);
+ INTERFACE static pointer vector_elem(pointer vec, int ielem);
+ INTERFACE static pointer set_vector_elem(pointer vec, int ielem, pointer a);
+ INTERFACE INLINE int is_number(pointer p) { return (type(p)==T_NUMBER); }
+@@ -1073,39 +1074,24 @@ static pointer oblist_initial_value(scheme *sc)
+ /* Add a new symbol NAME at SLOT. SLOT must be obtained using
+ * oblist_find_by_name, and no insertion must be done between
+ * obtaining the SLOT and calling this function. Returns the new
+- * symbol.
+- *
+- * If SLOT is NULL, the new symbol is be placed at the appropriate
+- * place in the vector. */
++ * symbol. */
+ static pointer oblist_add_by_name(scheme *sc, const char *name, pointer *slot)
+ {
+ #define oblist_add_by_name_allocates 3
+ pointer x;
+- int location;
+
+ gc_disable(sc, gc_reservations (oblist_add_by_name));
+ x = immutable_cons(sc, mk_string(sc, name), sc->NIL);
+ typeflag(x) = T_SYMBOL;
+ setimmutable(car(x));
+-
+- if (slot == NULL) {
+- location = hash_fn(name, vector_length(sc->oblist));
+- set_vector_elem(sc->oblist, location,
+- immutable_cons(sc, x, vector_elem(sc->oblist, location)));
+- } else {
+- *slot = immutable_cons(sc, x, *slot);
+- }
+-
++ *slot = immutable_cons(sc, x, *slot);
+ gc_enable(sc);
+ return x;
+ }
+
+ /* Lookup the symbol NAME. Returns the symbol, or NIL if it does not
+ * exist. In that case, SLOT points to the point where the new symbol
+- * is to be inserted.
+- *
+- * SLOT may be set to NULL if the new symbol should be placed at the
+- * appropriate place in the vector. */
++ * is to be inserted. */
+ static INLINE pointer
+ oblist_find_by_name(scheme *sc, const char *name, pointer **slot)
+ {
+@@ -1115,7 +1101,7 @@ oblist_find_by_name(scheme *sc, const char *name, pointer **slot)
+ int d;
+
+ location = hash_fn(name, vector_length(sc->oblist));
+- for (*slot = NULL, x = vector_elem(sc->oblist, location);
++ for (*slot = vector_elem_slot(sc->oblist, location), x = **slot;
+ x != sc->NIL; *slot = &cdr(x), x = **slot) {
+ s = symname(car(x));
+ /* case-insensitive, per R5RS section 2. */
+@@ -1353,6 +1339,12 @@ INTERFACE static void fill_vector(pointer vec, pointer obj) {
+ }
+ }
+
++INTERFACE static pointer *vector_elem_slot(pointer vec, int ielem) {
++ assert (is_vector (vec));
++ assert (ielem < vector_length(vec));
++ return &vec->_object._vector._elements[ielem];
++}
++
+ INTERFACE static pointer vector_elem(pointer vec, int ielem) {
+ assert (is_vector (vec));
+ assert (ielem < vector_length(vec));
+@@ -2636,11 +2628,8 @@ static void new_frame_in_env(scheme *sc, pointer old_env)
+
+ /* Insert (VARIABLE, VALUE) at SSLOT. SSLOT must be obtained using
+ * find_slot_spec_in_env, and no insertion must be done between
+- * obtaining SSLOT and the call to this function.
+- *
+- * If SSLOT is NULL, the new slot is put into the appropriate place in
+- * the environment vector. */
+-static INLINE void new_slot_spec_in_env(scheme *sc, pointer env,
++ * obtaining SSLOT and the call to this function. */
++static INLINE void new_slot_spec_in_env(scheme *sc,
+ pointer variable, pointer value,
+ pointer *sslot)
+ {
+@@ -2648,27 +2637,14 @@ static INLINE void new_slot_spec_in_env(scheme *sc, pointer env,
+ pointer slot;
+ gc_disable(sc, gc_reservations (new_slot_spec_in_env));
+ slot = immutable_cons(sc, variable, value);
+-
+- if (sslot == NULL) {
+- int location;
+- assert(is_vector(car(env)));
+- location = hash_fn(symname(variable), vector_length(car(env)));
+-
+- set_vector_elem(car(env), location,
+- immutable_cons(sc, slot, vector_elem(car(env), location)));
+- } else {
+- *sslot = immutable_cons(sc, slot, *sslot);
+- }
++ *sslot = immutable_cons(sc, slot, *sslot);
+ gc_enable(sc);
+ }
+
+ /* Find the slot in ENV under the key HDL. If ALL is given, look in
+ * all environments enclosing ENV. If the lookup fails, and SSLOT is
+ * given, the position where the new slot has to be inserted is stored
+- * at SSLOT.
+- *
+- * SSLOT may be set to NULL if the new symbol should be placed at the
+- * appropriate place in the vector. */
++ * at SSLOT. */
+ static pointer
+ find_slot_spec_in_env(scheme *sc, pointer env, pointer hdl, int all, pointer **sslot)
+ {
+@@ -2681,13 +2657,11 @@ find_slot_spec_in_env(scheme *sc, pointer env, pointer hdl, int all, pointer **s
+ for (x = env; x != sc->NIL; x = cdr(x)) {
+ if (is_vector(car(x))) {
+ location = hash_fn(symname(hdl), vector_length(car(x)));
+- sl = NULL;
+- y = vector_elem(car(x), location);
++ sl = vector_elem_slot(car(x), location);
+ } else {
+ sl = &car(x);
+- y = *sl;
+ }
+- for ( ; y != sc->NIL; sl = &cdr(y), y = *sl) {
++ for (y = *sl ; y != sc->NIL; sl = &cdr(y), y = *sl) {
+ d = pointercmp(caar(y), hdl);
+ if (d == 0)
+ return car(y); /* Hit. */
+@@ -2716,12 +2690,11 @@ static INLINE void new_frame_in_env(scheme *sc, pointer old_env)
+ /* Insert (VARIABLE, VALUE) at SSLOT. SSLOT must be obtained using
+ * find_slot_spec_in_env, and no insertion must be done between
+ * obtaining SSLOT and the call to this function. */
+-static INLINE void new_slot_spec_in_env(scheme *sc, pointer env,
++static INLINE void new_slot_spec_in_env(scheme *sc,
+ pointer variable, pointer value,
+ pointer *sslot)
+ {
+ #define new_slot_spec_in_env_allocates 2
+- (void) env;
+ assert(is_symbol(variable));
+ *sslot = immutable_cons(sc, immutable_cons(sc, variable, value), *sslot);
+ }
+@@ -2772,7 +2745,7 @@ static INLINE void new_slot_in_env(scheme *sc, pointer variable, pointer value)
+ assert(is_symbol(variable));
+ slot = find_slot_spec_in_env(sc, sc->envir, variable, 0, &sslot);
+ assert(slot == sc->NIL);
+- new_slot_spec_in_env(sc, sc->envir, variable, value, sslot);
++ new_slot_spec_in_env(sc, variable, value, sslot);
+ }
+
+ static INLINE void set_slot_in_env(scheme *sc, pointer slot, pointer value)
+@@ -3534,7 +3507,7 @@ static pointer opexe_0(scheme *sc, enum scheme_opcodes op) {
+ if (x != sc->NIL) {
+ set_slot_in_env(sc, x, sc->value);
+ } else {
+- new_slot_spec_in_env(sc, sc->envir, sc->code, sc->value, sslot);
++ new_slot_spec_in_env(sc, sc->code, sc->value, sslot);
+ }
+ s_return(sc,sc->code);
+ }
+@@ -3856,7 +3829,7 @@ static pointer opexe_1(scheme *sc, enum scheme_opcodes op) {
+ if (x != sc->NIL) {
+ set_slot_in_env(sc, x, sc->value);
+ } else {
+- new_slot_spec_in_env(sc, sc->envir, sc->code, sc->value, sslot);
++ new_slot_spec_in_env(sc, sc->code, sc->value, sslot);
+ }
+ s_return(sc,sc->code);
+ }
+@@ -5811,7 +5784,7 @@ void scheme_define(scheme *sc, pointer envir, pointer symbol, pointer value) {
+ if (x != sc->NIL) {
+ set_slot_in_env(sc, x, value);
+ } else {
+- new_slot_spec_in_env(sc, envir, symbol, value, sslot);
++ new_slot_spec_in_env(sc, symbol, value, sslot);
+ }
+ }
+
diff --git a/debian/patches/0062-dirmngr-Ignore-warning-alerts-in-the-GNUTLS-handshak.patch b/debian/patches/0062-dirmngr-Ignore-warning-alerts-in-the-GNUTLS-handshak.patch
new file mode 100644
index 0000000..3dfa9c4
--- /dev/null
+++ b/debian/patches/0062-dirmngr-Ignore-warning-alerts-in-the-GNUTLS-handshak.patch
@@ -0,0 +1,44 @@
+From: Werner Koch <wk at gnupg.org>
+Date: Fri, 17 Mar 2017 12:46:09 +0100
+Subject: dirmngr: Ignore warning alerts in the GNUTLS handshake.
+
+* dirmngr/http.c (send_request) [GNUTLS]: Don't bail out on warning
+alerts.
+--
+
+GnuPG-bug-id: 2833
+Signed-off-by: Werner Koch <wk at gnupg.org>
+(cherry picked from commit 69c521df422a6c9a6b0a93e45c9373a8b6ceb28e)
+---
+ dirmngr/http.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+diff --git a/dirmngr/http.c b/dirmngr/http.c
+index 3adf6e5..04a30d6 100644
+--- a/dirmngr/http.c
++++ b/dirmngr/http.c
+@@ -1903,6 +1903,7 @@ send_request (http_t hd, const char *httphost, const char *auth,
+ gnutls_transport_set_push_function (hd->session->tls_session,
+ my_gnutls_write);
+
++ handshake_again:
+ do
+ {
+ rc = gnutls_handshake (hd->session->tls_session);
+@@ -1918,10 +1919,15 @@ send_request (http_t hd, const char *httphost, const char *auth,
+
+ alertno = gnutls_alert_get (hd->session->tls_session);
+ alertstr = gnutls_alert_get_name (alertno);
+- log_info ("TLS handshake failed: %s (alert %d)\n",
++ log_info ("TLS handshake %s: %s (alert %d)\n",
++ rc == GNUTLS_E_WARNING_ALERT_RECEIVED
++ ? "warning" : "failed",
+ alertstr, (int)alertno);
+ if (alertno == GNUTLS_A_UNRECOGNIZED_NAME && server)
+ log_info (" (sent server name '%s')\n", server);
++
++ if (rc == GNUTLS_E_WARNING_ALERT_RECEIVED)
++ goto handshake_again;
+ }
+ else
+ log_info ("TLS handshake failed: %s\n", gnutls_strerror (rc));
diff --git a/debian/patches/0063-gpg-Make-sure-the-conflict-set-includes-the-current-.patch b/debian/patches/0063-gpg-Make-sure-the-conflict-set-includes-the-current-.patch
new file mode 100644
index 0000000..2c2c2b9
--- /dev/null
+++ b/debian/patches/0063-gpg-Make-sure-the-conflict-set-includes-the-current-.patch
@@ -0,0 +1,72 @@
+From: "Neal H. Walfield" <neal at g10code.com>
+Date: Fri, 17 Mar 2017 13:36:51 +0100
+Subject: gpg: Make sure the conflict set includes the current key.
+
+* g10/tofu.c (get_trust): Sanity check CONFLICT_SET after calling
+get_policy. If POLICY is 'auto' and the default policy is 'ask', make
+sure CONFLICT_SET includes the current key.
+
+--
+Signed-off-by: Neal H. Walfield <neal at g10code.com>
+GnuPG-bug-id: 2959
+Debian-bug-id: 854829
+
+Signed-off-by: Neal H. Walfield <neal at g10code.com>
+(cherry picked from commit b1106b4d640325c60a7212a4a44e4f67c0e3312d)
+---
+ g10/tofu.c | 28 +++++++++++++++++++++++++---
+ 1 file changed, 25 insertions(+), 3 deletions(-)
+
+diff --git a/g10/tofu.c b/g10/tofu.c
+index 9d9d8df..f2bd0c5 100644
+--- a/g10/tofu.c
++++ b/g10/tofu.c
+@@ -2304,9 +2304,14 @@ build_conflict_set (tofu_dbs_t dbs,
+
+
+ /* Return the effective policy for the binding <FINGERPRINT, EMAIL>
+- * (email has already been normalized) and any conflict information in
+- * *CONFLICT_SETP, if CONFLICT_SETP is not NULL. Returns
+- * _tofu_GET_POLICY_ERROR if an error occurs.
++ * (email has already been normalized). Returns
++ * _tofu_GET_POLICY_ERROR if an error occurs. Returns any conflict
++ * information in *CONFLICT_SETP if CONFLICT_SETP is not NULL and the
++ * returned policy is TOFU_POLICY_ASK (consequently, if there is a
++ * conflict, but the user set the policy to good *CONFLICT_SETP will
++ * empty). Note: as per build_conflict_set, which is used to build
++ * the conflict information, the conflict information includes the
++ * current user id as the first element of the linked list.
+ *
+ * This function registers the binding in the bindings table if it has
+ * not yet been registered.
+@@ -2689,6 +2694,15 @@ get_trust (ctrl_t ctrl, PKT_public_key *pk,
+ policy = get_policy (dbs, pk, fingerprint, user_id, email,
+ &conflict_set, now);
+
++ if (policy == TOFU_POLICY_ASK)
++ /* The conflict set should always contain at least one element:
++ * the current key. */
++ log_assert (conflict_set);
++ else
++ /* If the policy is not TOFU_POLICY_ASK, then conflict_set will be
++ * NULL. */
++ log_assert (! conflict_set);
++
+ /* If the key is ultimately trusted, there is nothing to do. */
+ {
+ u32 kid[2];
+@@ -2710,6 +2724,14 @@ get_trust (ctrl_t ctrl, PKT_public_key *pk,
+ " auto (default: %s).\n",
+ fingerprint, email,
+ tofu_policy_str (opt.tofu_default_policy));
++
++ if (policy == TOFU_POLICY_ASK)
++ /* The default policy is ASK, but there is no conflict (policy
++ * was 'auto'). In this case, we need to make sure the
++ * conflict set includes at least the current user id. */
++ {
++ add_to_strlist (&conflict_set, fingerprint);
++ }
+ }
+ switch (policy)
+ {
diff --git a/debian/patches/series b/debian/patches/series
index 360f691..1a14f5e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -57,3 +57,7 @@ gpg-agent-idling/0011-agent-Avoid-scheduled-checks-on-socket-when-inotify-.patch
0057-tests-Dump-the-tools-that-the-tests-are-going-to-use.patch
0058-tests-Fix-using-tools-from-the-build-directory.patch
0059-agent-g10-Remove-redundant-SERIALNO-request.patch
+0060-gpgscm-Remove-framework-for-immediate-values.patch
+0061-gpgscm-Simplify-hash-tables.patch
+0062-dirmngr-Ignore-warning-alerts-in-the-GNUTLS-handshak.patch
+0063-gpg-Make-sure-the-conflict-set-includes-the-current-.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-gnupg/gnupg2.git
More information about the Pkg-gnupg-commit
mailing list