diff options
Diffstat (limited to '')
| -rwxr-xr-x | lang/python/tests/t-sig-notation.py | 11 | ||||
| -rw-r--r-- | tests/gpg/t-sig-notation.c | 32 | 
2 files changed, 40 insertions, 3 deletions
| 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 <config.h>  #endif +#include <assert.h>  #include <stdlib.h>  #include <stdio.h>  #include <string.h> @@ -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); | 
