1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-06-01 22:28:02 +02:00

gpg: Fix a NULL-deref for invalid input data.

* g10/mainproc.c (proc_encrypted): Take care of canceled passpharse
entry.
--

GnuPG-bug-id: 1761
Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
Werner Koch 2014-11-17 13:08:23 +01:00
parent 165bc397be
commit 32e85668b8

View File

@ -551,6 +551,7 @@ proc_encrypted (CTX c, PACKET *pkt)
int algo; int algo;
STRING2KEY s2kbuf; STRING2KEY s2kbuf;
STRING2KEY *s2k = NULL; STRING2KEY *s2k = NULL;
int canceled;
if (opt.override_session_key) if (opt.override_session_key)
{ {
@ -591,12 +592,16 @@ proc_encrypted (CTX c, PACKET *pkt)
log_info (_("assuming %s encrypted data\n"), "IDEA"); 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) if (c->dek)
c->dek->algo_info_printed = 1; 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; result = G10ERR_NO_SECKEY;
if (!result) if (!result)
@ -615,7 +620,7 @@ proc_encrypted (CTX c, PACKET *pkt)
else if (!opt.no_mdc_warn) else if (!opt.no_mdc_warn)
log_info (_("WARNING: message was not integrity protected\n")); 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; glo_ctrl.lasterr = result;
log_error (_("WARNING: encrypted message has been manipulated!\n")); log_error (_("WARNING: encrypted message has been manipulated!\n"));