diff options
-rw-r--r-- | crypto/params.c | 5 | ||||
-rw-r--r-- | doc/man3/OSSL_PARAM_int.pod | 4 |
2 files changed, 7 insertions, 2 deletions
diff --git a/crypto/params.c b/crypto/params.c index 32161d0533..06ae1bc44f 100644 --- a/crypto/params.c +++ b/crypto/params.c @@ -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); diff --git a/doc/man3/OSSL_PARAM_int.pod b/doc/man3/OSSL_PARAM_int.pod index 9126906883..09215184a7 100644 --- a/doc/man3/OSSL_PARAM_int.pod +++ b/doc/man3/OSSL_PARAM_int.pod @@ -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 |