Fix for bug 797.
authorWerner Koch <wk@gnupg.org>
Wed, 16 May 2007 11:10:07 +0000 (11:10 +0000)
committerWerner Koch <wk@gnupg.org>
Wed, 16 May 2007 11:10:07 +0000 (11:10 +0000)
g10/ChangeLog
g10/sig-check.c

index 49cf5cf..93fe77d 100644 (file)
@@ -1,3 +1,8 @@
+2007-05-16  Werner Koch  <wk@g10code.com>
+
+       * sig-check.c (check_backsig): Check the digest algorithm before
+       using it.  Fixed bug 797.
+
 2007-05-09  Werner Koch  <wk@g10code.com>
 
        * openfile.c (overwrite_filep, open_outfile) [W32]: Need to use
index 5a3cb88..ac9d0da 100644 (file)
@@ -438,22 +438,25 @@ check_backsig(PKT_public_key *main_pk,PKT_public_key *sub_pk,
   gcry_md_hd_t md;
   int rc;
 
+  /* Always check whether the algorithm is available.  Although
+     gcry_md_open woyuld throw an error, some libgcrypt versions will
+     print a debug message in that case too. */
+  if ((rc=openpgp_md_test_algo (backsig->digest_algo)))
+    return rc;
+
   if(!opt.no_sig_cache && backsig->flags.checked)
-    {
-      if((rc=openpgp_md_test_algo (backsig->digest_algo)))
-       return rc;
+    return backsig->flags.valid? 0 : gpg_error (GPG_ERR_BAD_SIGNATURE);
 
-      return backsig->flags.valid? 0 : gpg_error (GPG_ERR_BAD_SIGNATURE);
+  rc = gcry_md_open (&md, backsig->digest_algo,0);
+  if (!rc)
+    {
+      hash_public_key(md,main_pk);
+      hash_public_key(md,sub_pk);
+      rc=do_check(sub_pk,backsig,md,NULL,NULL,NULL);
+      cache_sig_result(backsig,rc);
+      gcry_md_close(md);
     }
 
-  if (gcry_md_open (&md, backsig->digest_algo,0))
-    BUG ();
-  hash_public_key(md,main_pk);
-  hash_public_key(md,sub_pk);
-  rc=do_check(sub_pk,backsig,md,NULL,NULL,NULL);
-  cache_sig_result(backsig,rc);
-  gcry_md_close(md);
-
   return rc;
 }