Allow OSSL_PARAM_get_octet_string() to pass a NULL buffer

We may just want to know the number of octets so allow passing a NULL
buffer.

Reviewed-by: Shane Lontis <shane.lontis@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/11635)
This commit is contained in:
Matt Caswell 2020-04-28 17:45:53 +01:00
parent 86dc26baf6
commit b756626a37
2 changed files with 7 additions and 2 deletions

View File

@ -780,7 +780,7 @@ static int get_string_internal(const OSSL_PARAM *p, void **val, size_t max_len,
{
size_t sz;
if (val == NULL || p == NULL || p->data_type != type)
if ((val == NULL && used_len == NULL) || p == NULL || p->data_type != type)
return 0;
sz = p->data_size;
@ -793,6 +793,9 @@ static int get_string_internal(const OSSL_PARAM *p, void **val, size_t max_len,
if (p->data == NULL)
return 0;
if (val == NULL)
return 1;
if (*val == NULL) {
char *const q = OPENSSL_malloc(sz);

View File

@ -233,7 +233,9 @@ OSSL_PARAM_get_octet_string() retrieves an OCTET string from the parameter
pointed to by B<p>.
The OCTETs are either stored into B<*val> with a length limit of B<max_len> or,
in the case when B<*val> is B<NULL>, memory is allocated and
B<max_len> is ignored.
B<max_len> is ignored. B<*used_len> is populated with the number of OCTETs
stored. If B<val> is NULL then the OCTETS are not stored, but B<*used_len> is
still populated.
If memory is allocated by this function, it must be freed by the caller.
OSSL_PARAM_set_octet_string() sets an OCTET string from the parameter