From: Richard Levitte Date: Tue, 9 Apr 2019 06:31:09 +0000 (+0200) Subject: Params API: {utf8,octet}_ptr need to know the data size X-Git-Tag: openssl-3.0.0-alpha1~2202 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=f55ed701a458e3b3840a5d8c8dd3019d7d71a26f;ds=sidebyside Params API: {utf8,octet}_ptr need to know the data size When the purpose is to pass parameters to a setter function, that setter function needs to know the size of the data passed. This remains true for the pointer data types as well. Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/8703) --- diff --git a/crypto/params.c b/crypto/params.c index 8b75e04839..bdb1fa92d9 100644 --- a/crypto/params.c +++ b/crypto/params.c @@ -580,15 +580,15 @@ int OSSL_PARAM_set_octet_ptr(const OSSL_PARAM *p, const void *val, } OSSL_PARAM OSSL_PARAM_construct_utf8_ptr(const char *key, char **buf, - size_t *rsize) + size_t bsize, size_t *rsize) { - return ossl_param_construct(key, OSSL_PARAM_UTF8_PTR, buf, 0, rsize); + return ossl_param_construct(key, OSSL_PARAM_UTF8_PTR, buf, bsize, rsize); } OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, - size_t *rsize) + size_t bsize, size_t *rsize) { - return ossl_param_construct(key, OSSL_PARAM_OCTET_PTR, buf, 0, rsize); + return ossl_param_construct(key, OSSL_PARAM_OCTET_PTR, buf, bsize, rsize); } OSSL_PARAM OSSL_PARAM_construct_end(void) diff --git a/doc/man3/OSSL_PARAM_TYPE.pod b/doc/man3/OSSL_PARAM_TYPE.pod index dd887f3089..4585f25acd 100644 --- a/doc/man3/OSSL_PARAM_TYPE.pod +++ b/doc/man3/OSSL_PARAM_TYPE.pod @@ -44,9 +44,9 @@ OSSL_PARAM_set_octet_ptr OSSL_PARAM OSSL_PARAM_construct_octet_string(const char *key, void *buf, size_t bsize, size_t *rsize); OSSL_PARAM OSSL_PARAM_construct_utf8_ptr(const char *key, char **buf, - size_t *rsize); + size_t bsize, size_t *rsize); OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, - size_t *rsize); + size_t bsize, size_t *rsize); OSSL_PARAM OSSL_PARAM_construct_end(void); OSSL_PARAM *OSSL_PARAM_locate(OSSL_PARAM *array, const char *key); @@ -173,13 +173,13 @@ size B is created. OSSL_PARAM_construct_utf8_ptr() is a function that constructes a UTF string pointer OSSL_PARAM structure. -A parameter with name B, storage pointer B<*buf> and return size B -is created. +A parameter with name B, storage pointer B<*buf>, size B and +return size B is created. OSSL_PARAM_construct_octet_ptr() is a function that constructes an OCTET string pointer OSSL_PARAM structure. -A parameter with name B, storage pointer B<*buf> and return size B -is created. +A parameter with name B, storage pointer B<*buf>, size B and +return size B is created. OSSL_PARAM_construct_end() is a function that constructs the terminating OSSL_PARAM structure. @@ -254,6 +254,13 @@ Integral types will be widened and sign extended as required. Apart from that, the functions must be used appropriately for the expected type of the parameter. +For OSSL_PARAM_get_utf8_ptr() and OSSL_PARAM_get_octet_ptr(), B +is not relevant if the purpose is to send the B array to a +I, i.e. to get parameter data back. +In that case, B can safely be given zero. +See L for further information on the +possible purposes. + =head1 EXAMPLES Reusing the examples from L to just show how diff --git a/include/openssl/params.h b/include/openssl/params.h index cf9ffa8c7a..aea24bb2ff 100644 --- a/include/openssl/params.h +++ b/include/openssl/params.h @@ -132,11 +132,11 @@ OSSL_PARAM OSSL_PARAM_construct_double(const char *key, double *buf, OSSL_PARAM OSSL_PARAM_construct_utf8_string(const char *key, char *buf, size_t bsize, size_t *rsize); OSSL_PARAM OSSL_PARAM_construct_utf8_ptr(const char *key, char **buf, - size_t *rsize); + size_t bsize, size_t *rsize); OSSL_PARAM OSSL_PARAM_construct_octet_string(const char *key, void *buf, size_t bsize, size_t *rsize); OSSL_PARAM OSSL_PARAM_construct_octet_ptr(const char *key, void **buf, - size_t *rsize); + size_t bsize, size_t *rsize); OSSL_PARAM OSSL_PARAM_construct_end(void); int OSSL_PARAM_get_int(const OSSL_PARAM *p, int *val); diff --git a/test/params_api_test.c b/test/params_api_test.c index a3d2337745..df708da7e1 100644 --- a/test/params_api_test.c +++ b/test/params_api_test.c @@ -475,8 +475,8 @@ static int test_param_construct(void) &sz); params[n++] = OSSL_PARAM_construct_octet_string("octstr", buf, sizeof(buf), &sz); - params[n++] = OSSL_PARAM_construct_utf8_ptr("utf8ptr", &bufp, &sz); - params[n++] = OSSL_PARAM_construct_octet_ptr("octptr", &vp, &sz); + params[n++] = OSSL_PARAM_construct_utf8_ptr("utf8ptr", &bufp, 0, &sz); + params[n++] = OSSL_PARAM_construct_octet_ptr("octptr", &vp, 0, &sz); params[n] = OSSL_PARAM_construct_end(); /* Search failure */ diff --git a/test/params_test.c b/test/params_test.c index 8d456bbbde..a128d8cdda 100644 --- a/test/params_test.c +++ b/test/params_test.c @@ -400,7 +400,7 @@ static OSSL_PARAM *construct_api_params(void) params[n++] = OSSL_PARAM_construct_utf8_string("p5", app_p5, sizeof(app_p5), &app_p5_l); params[n++] = OSSL_PARAM_construct_utf8_ptr("p6", (char **)&app_p6, - &app_p6_l); + sizeof(app_p6), &app_p6_l); params[n++] = OSSL_PARAM_construct_octet_string("foo", &foo, sizeof(foo), &foo_l); params[n++] = OSSL_PARAM_construct_end();