i2d_provided() - which is the internal provider data function for
i2d_KeyParams(), i2d_PrivateKey(), i2d_PublicKey() - didn't treat the
returned length from OSSL_ENCODER_to_data() quite as well as it should
have. A simple added flag that records the state of |*pp| before
calling OSSL_ENCODER_to_data() fixes the problem.
Fixes #14655
Reviewed-by: Ben Kaduk <kaduk@mit.edu>
(Merged from https://github.com/openssl/openssl/pull/15277)
* down, when pp != NULL.
*/
size_t len = INT_MAX;
+ int pp_was_NULL = (pp == NULL || *pp == NULL);
ctx = OSSL_ENCODER_CTX_new_for_pkey(a, selection,
output_info->output_type,
if (ctx == NULL)
return -1;
if (OSSL_ENCODER_to_data(ctx, pp, &len)) {
- if (pp == NULL)
+ if (pp_was_NULL)
ret = (int)len;
else
ret = INT_MAX - (int)len;