gpg: Fix a NULL-deref for invalid input data.
authorWerner Koch <wk@gnupg.org>
Mon, 17 Nov 2014 12:08:23 +0000 (13:08 +0100)
committerWerner Koch <wk@gnupg.org>
Mon, 17 Nov 2014 12:08:23 +0000 (13:08 +0100)
* g10/mainproc.c (proc_encrypted): Take care of canceled passpharse
entry.
--

GnuPG-bug-id: 1761
Signed-off-by: Werner Koch <wk@gnupg.org>
g10/mainproc.c

index b84607a..d908d57 100644 (file)
@@ -551,6 +551,7 @@ proc_encrypted (CTX c, PACKET *pkt)
       int algo;
       STRING2KEY s2kbuf;
       STRING2KEY *s2k = NULL;
+      int canceled;
 
       if (opt.override_session_key)
         {
@@ -591,12 +592,16 @@ proc_encrypted (CTX c, PACKET *pkt)
               log_info (_("assuming %s encrypted data\n"), "IDEA");
             }
 
-          c->dek = passphrase_to_dek ( NULL, 0, algo, s2k, 3, NULL, NULL );
+          c->dek = passphrase_to_dek ( NULL, 0, algo, s2k, 3, NULL, &canceled);
           if (c->dek)
             c->dek->algo_info_printed = 1;
+          else if (canceled)
+            result = gpg_error (GPG_ERR_CANCELED);
+          else
+            result = gpg_error (GPG_ERR_INV_PASSPHRASE);
         }
     }
-  else if( !c->dek )
+  else if (!c->dek)
     result = G10ERR_NO_SECKEY;
 
   if (!result)
@@ -615,7 +620,7 @@ proc_encrypted (CTX c, PACKET *pkt)
       else if (!opt.no_mdc_warn)
         log_info (_("WARNING: message was not integrity protected\n"));
     }
-  else if (result == G10ERR_BAD_SIGN)
+  else if (gpg_err_code (result) == G10ERR_BAD_SIGN)
     {
       glo_ctrl.lasterr = result;
       log_error (_("WARNING: encrypted message has been manipulated!\n"));