aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2018-11-08 11:52:38 +0000
committerNIIBE Yutaka <[email protected]>2018-11-08 11:52:38 +0000
commit69930f6884a934207f7aa523cf6d2b8e22dfe666 (patch)
treed23932caa24cec0ee96b6310fad9e19ca9e51a3d
parentg10: Fix log_debug formatting. (diff)
downloadgnupg-69930f6884a934207f7aa523cf6d2b8e22dfe666.tar.gz
gnupg-69930f6884a934207f7aa523cf6d2b8e22dfe666.zip
gpgcompose: Fix --sk-esk.
* g10/gpgcompose.c (sk_esk): Copy the result content correctly. Don't forget to free the result. -- Fixes-commit: 0131d4369a81a51bf7bb328cc81a3bb082ed1a94 Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--g10/gpgcompose.c17
1 files changed, 14 insertions, 3 deletions
diff --git a/g10/gpgcompose.c b/g10/gpgcompose.c
index b3f7ecdce..9b6901599 100644
--- a/g10/gpgcompose.c
+++ b/g10/gpgcompose.c
@@ -2281,16 +2281,27 @@ sk_esk (const char *option, int argc, char *argv[], void *cookie)
/* Encrypt the session key using the s2k specifier. */
{
DEK *sesdekp = &sesdek;
+ void *enckey;
+ size_t enckeylen;
/* Now encrypt the session key (or rather, the algorithm used to
- encrypt the SKESK plus the session key) using ENCKEY. */
- err = encrypt_seskey (&s2kdek, 0, &sesdekp,
- (void**)&ske->seskey, (size_t *)&ske->seskeylen);
+ encrypt the SKESK plus the session key) using S2KDEK. */
+ err = encrypt_seskey (&s2kdek, 0, &sesdekp, &enckey, &enckeylen);
+
if (err)
log_fatal ("encrypt_seskey failed: %s\n", gpg_strerror (err));
+ if (enckeylen - 1 > sesdek.keylen)
+ log_fatal ("key size is too big: %z\n", enckeylen);
+ else
+ {
+ ske->seskeylen = (byte)enckeylen;
+ memcpy (ske->seskey, enckey, enckeylen);
+ }
+
/* Save the session key for later. */
session_key = sesdek;
+ xfree (enckey);
}
pkt.pkttype = PKT_SYMKEY_ENC;