summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Kaduk <bkaduk@akamai.com>2020-05-21 14:10:50 -0700
committerBenjamin Kaduk <kaduk@mit.edu>2020-05-28 10:01:47 -0700
commit7c302f8afc1d36ec12effd0c08047baced095b46 (patch)
tree5fffec04f2b5a7b69e6045ed8c7ce7cb1637c327
parent2cd3ebc76c7d8e76a8e337ef1eef43753eacef00 (diff)
params: do not ignore zero-length strings
Prior to this commit, if a string (or octet string) parameter was present but indicated it was zero-length, we would return success but with a NULL output value. This can be problematic in cases where there is a protocol-level distinction between parameter-absent and parameter-present-but-zero-length, which is uncommon but can happen. Since OPENSSL_malloc() returns NULL for zero-length allocation requests, make a dummy allocation for this case, to give a signal that the string parameter does exist but has zero length. Reviewed-by: Richard Levitte <levitte@openssl.org> (Merged from https://github.com/openssl/openssl/pull/11920)
-rw-r--r--crypto/params.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/crypto/params.c b/crypto/params.c
index 06ae1bc44f..9bccc51760 100644
--- a/crypto/params.c
+++ b/crypto/params.c
@@ -788,8 +788,6 @@ static int get_string_internal(const OSSL_PARAM *p, void **val, size_t max_len,
if (used_len != NULL)
*used_len = sz;
- if (sz == 0)
- return 1;
if (p->data == NULL)
return 0;
@@ -797,12 +795,13 @@ static int get_string_internal(const OSSL_PARAM *p, void **val, size_t max_len,
return 1;
if (*val == NULL) {
- char *const q = OPENSSL_malloc(sz);
+ char *const q = OPENSSL_malloc(sz > 0 ? sz : 1);
if (q == NULL)
return 0;
*val = q;
- memcpy(q, p->data, sz);
+ if (sz != 0)
+ memcpy(q, p->data, sz);
return 1;
}
if (max_len < sz)