Control: tags 992922 + patch
Control: tags 992922 + pending

Dear Daniel,

I've prepared an NMU for gpgme1.0 (versioned as 1.16.0-1.1) and
plan to upload it to sid. According to the low-threshold list,
your packages don't need to go through delayed queues, but I thought I
check back with you.

I have checked that the two cherry-picked commits from upstream fixes
the build failures on i386, and my guess the other 32bit archs will be
fixed, too.

In absence of answer I will upload 1.1 to unstable the next day.

Best regards

Norbert

--
PREINING Norbert                              https://www.preining.info
Fujitsu Research  +  IFMGA Guide  +  TU Wien  +  TeX Live  + Debian Dev
GPG: 0x860CDC13   fp: F7D8 A928 26E3 16A1 9FA0 ACF0 6CAC A448 860C DC13
diff -Nru gpgme1.0-1.16.0/debian/changelog gpgme1.0-1.16.0/debian/changelog
--- gpgme1.0-1.16.0/debian/changelog	2021-08-24 00:07:50.000000000 +0900
+++ gpgme1.0-1.16.0/debian/changelog	2021-09-15 14:31:55.000000000 +0900
@@ -1,3 +1,13 @@
+gpgme1.0 (1.16.0-1.1) unstable; urgency=medium
+
+  * Non-maintainer upload.
+  * Cherry-pick upstream fixes for test failures on 32bit archs:
+    - d/patches/upstream-e0494c54-fix-use-after-free-in-test.patch
+    - d/patches/upstream-72a2487a-expiration-date-as-unsigned.patch
+    (Closes: #992922)
+
+ -- Norbert Preining <norb...@preining.info>  Wed, 15 Sep 2021 14:31:55 +0900
+
 gpgme1.0 (1.16.0-1) unstable; urgency=medium
 
   * new upstream release
diff -Nru gpgme1.0-1.16.0/debian/patches/series gpgme1.0-1.16.0/debian/patches/series
--- gpgme1.0-1.16.0/debian/patches/series	2021-08-24 00:07:50.000000000 +0900
+++ gpgme1.0-1.16.0/debian/patches/series	2021-09-15 13:51:54.000000000 +0900
@@ -1,3 +1,5 @@
 0001-avoid-identifying-as-beta.patch
 0004-drop-python2-support.patch
 0006-Ship-python-examples-with-python3-in-shebang-line.patch
+upstream-e0494c54-fix-use-after-free-in-test.patch
+upstream-72a2487a-expiration-date-as-unsigned.patch
diff -Nru gpgme1.0-1.16.0/debian/patches/upstream-72a2487a-expiration-date-as-unsigned.patch gpgme1.0-1.16.0/debian/patches/upstream-72a2487a-expiration-date-as-unsigned.patch
--- gpgme1.0-1.16.0/debian/patches/upstream-72a2487a-expiration-date-as-unsigned.patch	1970-01-01 09:00:00.000000000 +0900
+++ gpgme1.0-1.16.0/debian/patches/upstream-72a2487a-expiration-date-as-unsigned.patch	2021-09-15 14:31:22.000000000 +0900
@@ -0,0 +1,25 @@
+Make sure expiration time is interpreted as unsigned number
+
+* lang/qt/tests/t-various.cpp (testSignKeyWithExpiration): Convert
+expiration time to uint_least32_t.
+This fixes the test on 32-bit systems where time_t (the return type of
+expirationTime()) is a signed 32-bit integer type.
+
+GnuPG-bug-id: T5522
+---
+ lang/qt/tests/t-various.cpp |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+Index: gpgme1.0-1.16.0/lang/qt/tests/t-various.cpp
+===================================================================
+--- gpgme1.0-1.16.0.orig/lang/qt/tests/t-various.cpp
++++ gpgme1.0-1.16.0/lang/qt/tests/t-various.cpp
+@@ -355,7 +355,7 @@ private Q_SLOTS:
+         target.update();
+         const auto keySignature = target.userID(0).signature(target.userID(0).numSignatures() - 1);
+         QVERIFY(!keySignature.neverExpires());
+-        const auto expirationDate = QDateTime::fromSecsSinceEpoch(keySignature.expirationTime()).date();
++        const auto expirationDate = QDateTime::fromSecsSinceEpoch(uint_least32_t(keySignature.expirationTime())).date();
+         QCOMPARE(expirationDate, QDate(2106, 2, 6));  // expiration date is capped at 2106-02-06
+     }
+ 
diff -Nru gpgme1.0-1.16.0/debian/patches/upstream-e0494c54-fix-use-after-free-in-test.patch gpgme1.0-1.16.0/debian/patches/upstream-e0494c54-fix-use-after-free-in-test.patch
--- gpgme1.0-1.16.0/debian/patches/upstream-e0494c54-fix-use-after-free-in-test.patch	1970-01-01 09:00:00.000000000 +0900
+++ gpgme1.0-1.16.0/debian/patches/upstream-e0494c54-fix-use-after-free-in-test.patch	2021-09-15 14:31:46.000000000 +0900
@@ -0,0 +1,118 @@
+core: Fix use-after-free issue in test
+
+* tests/gpg/t-edit-sign.c (sign_key, verify_key_signature): New.
+(main): Factored out signing and verifying the result.
+Factoring the two steps of the test into different functions fixes the
+use-after-free issue that was caused by accidentaly using a variable
+of the first step in the second step.
+
+GnuPG-bug-id: T5509
+---
+ tests/gpg/t-edit-sign.c |   54 ++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 37 insertions(+), 17 deletions(-)
+
+Index: gpgme1.0-1.16.0/tests/gpg/t-edit-sign.c
+===================================================================
+--- gpgme1.0-1.16.0.orig/tests/gpg/t-edit-sign.c
++++ gpgme1.0-1.16.0/tests/gpg/t-edit-sign.c
+@@ -107,31 +107,19 @@ interact_fnc (void *opaque, const char *
+ }
+ 
+ 
+-int
+-main (int argc, char **argv)
++void
++sign_key (const char *key_fpr, const char *signer_fpr)
+ {
+   gpgme_ctx_t ctx;
+   gpgme_error_t err;
+   gpgme_data_t out = NULL;
+-  const char *signer_fpr = "A0FF4590BB6122EDEF6E3C542D727CC768697734"; /* Alpha Test */
+   gpgme_key_t signing_key = NULL;
+-  const char *key_fpr = "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2"; /* Bravo Test */
+   gpgme_key_t key = NULL;
+-  gpgme_key_t signed_key = NULL;
+-  gpgme_user_id_t signed_uid = NULL;
+-  gpgme_key_sig_t key_sig = NULL;
+   char *agent_info;
+-  int mode;
+-
+-  (void)argc;
+-  (void)argv;
+-
+-  init_gpgme (GPGME_PROTOCOL_OpenPGP);
+ 
+   err = gpgme_new (&ctx);
+   fail_if_err (err);
+ 
+-  /* Sign the key */
+   agent_info = getenv("GPG_AGENT_INFO");
+   if (!(agent_info && strchr (agent_info, ':')))
+     gpgme_set_passphrase_cb (ctx, passphrase_cb, 0);
+@@ -159,8 +147,23 @@ main (int argc, char **argv)
+   gpgme_data_release (out);
+   gpgme_key_unref (key);
+   gpgme_key_unref (signing_key);
++  gpgme_release (ctx);
++}
++
++
++void
++verify_key_signature (const char *key_fpr, const char *signer_keyid)
++{
++  gpgme_ctx_t ctx;
++  gpgme_error_t err;
++  gpgme_key_t signed_key = NULL;
++  gpgme_user_id_t signed_uid = NULL;
++  gpgme_key_sig_t key_sig = NULL;
++  int mode;
++
++  err = gpgme_new (&ctx);
++  fail_if_err (err);
+ 
+-  /* Verify the key signature */
+   mode  = gpgme_get_keylist_mode (ctx);
+   mode |= GPGME_KEYLIST_MODE_SIGS;
+   err = gpgme_set_keylist_mode (ctx, mode);
+@@ -168,7 +171,7 @@ main (int argc, char **argv)
+   err = gpgme_get_key (ctx, key_fpr, &signed_key, 0);
+   fail_if_err (err);
+ 
+-  signed_uid = key->uids;
++  signed_uid = signed_key->uids;
+   if (!signed_uid)
+     {
+       fprintf (stderr, "Signed key has no user IDs\n");
+@@ -180,7 +183,7 @@ main (int argc, char **argv)
+       exit (1);
+     }
+   key_sig = signed_uid->signatures->next;
+-  if (strcmp ("2D727CC768697734", key_sig->keyid))
++  if (strcmp (signer_keyid, key_sig->keyid))
+     {
+       fprintf (stderr, "Unexpected key ID in second user ID sig: %s\n",
+                 key_sig->keyid);
+@@ -196,6 +199,23 @@ main (int argc, char **argv)
+ 
+   gpgme_key_unref (signed_key);
+   gpgme_release (ctx);
++}
++
++
++int
++main (int argc, char **argv)
++{
++  const char *signer_fpr = "A0FF4590BB6122EDEF6E3C542D727CC768697734"; /* Alpha Test */
++  const char *signer_keyid = signer_fpr + strlen(signer_fpr) - 16;
++  const char *key_fpr = "D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2"; /* Bravo Test */
++
++  (void)argc;
++  (void)argv;
++
++  init_gpgme (GPGME_PROTOCOL_OpenPGP);
++
++  sign_key (key_fpr, signer_fpr);
++  verify_key_signature (key_fpr, signer_keyid);
+ 
+   return 0;
+ }

Reply via email to