int i2o_ECPublicKey(EC_KEY *a, unsigned char **out)
{
- size_t buf_len=0;
+ size_t buf_len=0;
+ int new_buffer = 0;
if (a == NULL)
{
return buf_len;
if (*out == NULL)
+ {
if ((*out = OPENSSL_malloc(buf_len)) == NULL)
{
ECerr(EC_F_I2O_ECPUBLICKEY, ERR_R_MALLOC_FAILURE);
return 0;
}
+ new_buffer = 1;
+ }
if (!EC_POINT_point2oct(a->group, a->pub_key, a->conv_form,
*out, buf_len, NULL))
{
*out = NULL;
return 0;
}
- *out += buf_len;
+ if (!new_buffer)
+ *out += buf_len;
return buf_len;
}