diff --git a/lang/python/tests/t-sig-notation.py b/lang/python/tests/t-sig-notation.py index 0f77e37a..b024bb5a 100755 --- a/lang/python/tests/t-sig-notation.py +++ b/lang/python/tests/t-sig-notation.py @@ -29,6 +29,14 @@ expected_notations = { None: ("http://www.gnu.org/policy/", 0), } +# GnuPG prior to 2.1.13 did not report the critical flag correctly. +with core.Context() as c: + version = c.engine_info.version + have_correct_sig_data = not (version.startswith("1.") + or version == "2.1.1" + or (version.startswith("2.1.1") + and version[5] < '3')) + def check_result(result): assert len(result.signatures) == 1, "Unexpected number of signatures" sig = result.signatures[0] @@ -45,7 +53,8 @@ def check_result(result): assert r.human_readable \ == bool(flags&constants.SIG_NOTATION_HUMAN_READABLE) assert r.critical \ - == bool(flags&constants.SIG_NOTATION_CRITICAL) + == (bool(flags&constants.SIG_NOTATION_CRITICAL) + if have_correct_sig_data else False) assert len(expected_notations) == 0 diff --git a/tests/gpg/t-sig-notation.c b/tests/gpg/t-sig-notation.c index 843606a5..798ad24f 100644 --- a/tests/gpg/t-sig-notation.c +++ b/tests/gpg/t-sig-notation.c @@ -24,6 +24,7 @@ #include #endif +#include #include #include #include @@ -33,6 +34,11 @@ #include "t-support.h" + +/* GnuPG prior to 2.1.13 did not report the critical flag + correctly. */ +int have_correct_sig_data; + static struct { const char *name; const char *value; @@ -83,11 +89,17 @@ check_result (gpgme_verify_result_t result) && r->value && !strcmp (r->value, expected_notations[i].value) && r->value_len == strlen (expected_notations[i].value) - && r->flags == expected_notations[i].flags + && r->flags + == (have_correct_sig_data + ? expected_notations[i].flags + : expected_notations[i].flags + & ~GPGME_SIG_NOTATION_CRITICAL) && r->human_readable == !!(r->flags & GPGME_SIG_NOTATION_HUMAN_READABLE) && r->critical - == !!(r->flags & GPGME_SIG_NOTATION_CRITICAL)) + == (have_correct_sig_data + ? !!(r->flags & GPGME_SIG_NOTATION_CRITICAL) + : 0)) { expected_notations[i].seen++; any++; @@ -121,9 +133,25 @@ main (int argc, char *argv[]) gpgme_verify_result_t result; char *agent_info; int i; + gpgme_engine_info_t engine_info; init_gpgme (GPGME_PROTOCOL_OpenPGP); + err = gpgme_get_engine_info (&engine_info); + fail_if_err (err); + for (; engine_info; engine_info = engine_info->next) + if (engine_info->protocol == GPGME_PROTOCOL_OpenPGP) + break; + assert (engine_info); + + /* GnuPG prior to 2.1.13 did not report the critical flag + correctly. */ + have_correct_sig_data = + ! (strncmp ("1.", engine_info->version, 2) + || (strncmp ("2.1.1", engine_info->version, 5) + && (engine_info->version[5] == 0 + || engine_info->version[5] < '3'))); + err = gpgme_new (&ctx); fail_if_err (err);