summaryrefslogtreecommitdiffstats
path: root/engines/e_ossltest.c
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2018-02-07 14:20:31 +0000
committerMatt Caswell <matt@openssl.org>2018-02-07 21:34:18 +0000
commit04e3bb045f9b407d1ec681cfbeab4da8e53d750a (patch)
treef68179224faf4e769ea9c04b84d4326279d5c9b9 /engines/e_ossltest.c
parent0f41dc0e9e9e6a8c2a43fa6af5fdf5359283e2ba (diff)
Fix some undefined behaviour in ossltest engine
Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/5266)
Diffstat (limited to 'engines/e_ossltest.c')
-rw-r--r--engines/e_ossltest.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/engines/e_ossltest.c b/engines/e_ossltest.c
index d3d6998e99..8fc056abfc 100644
--- a/engines/e_ossltest.c
+++ b/engines/e_ossltest.c
@@ -593,17 +593,21 @@ int ossltest_aes128_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
int ret;
tmpbuf = OPENSSL_malloc(inl);
- if (tmpbuf == NULL)
+
+ /* OPENSSL_malloc will return NULL if inl == 0 */
+ if (tmpbuf == NULL && inl > 0)
return -1;
/* Remember what we were asked to encrypt */
- memcpy(tmpbuf, in, inl);
+ if (tmpbuf != NULL)
+ memcpy(tmpbuf, in, inl);
/* Go through the motions of encrypting it */
ret = EVP_CIPHER_meth_get_do_cipher(EVP_aes_128_cbc())(ctx, out, in, inl);
/* Throw it all away and just use the plaintext as the output */
- memcpy(out, tmpbuf, inl);
+ if (tmpbuf != NULL)
+ memcpy(out, tmpbuf, inl);
OPENSSL_free(tmpbuf);
return ret;
@@ -626,13 +630,15 @@ int ossltest_aes128_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
return -1;
/* Remember what we were asked to encrypt */
- memcpy(tmpbuf, in, inl);
+ if (tmpbuf != NULL)
+ memcpy(tmpbuf, in, inl);
/* Go through the motions of encrypting it */
EVP_CIPHER_meth_get_do_cipher(EVP_aes_128_gcm())(ctx, out, in, inl);
/* Throw it all away and just use the plaintext as the output */
- memcpy(out, tmpbuf, inl);
+ if (tmpbuf != NULL)
+ memcpy(out, tmpbuf, inl);
OPENSSL_free(tmpbuf);
return inl;