Fix missing heap hint in EccKeyParamCopy. The XFREE is required or it will leak memory allocated in ASNToHexString. This only applies to WOLFSSL_CUSTOM_CURVES && !WOLFSSL_ASN_TEMPLATE.

This commit is contained in:
David Garske
2024-01-22 13:18:24 -08:00
parent ccbb726859
commit dcc946575b

View File

@ -33197,7 +33197,7 @@ static int ASNToHexString(const byte* input, word32* inOutIdx, char** out,
return 0; return 0;
} }
static int EccKeyParamCopy(char** dst, char* src) static int EccKeyParamCopy(char** dst, char* src, void* heap)
{ {
int ret = 0; int ret = 0;
#ifdef WOLFSSL_ECC_CURVE_STATIC #ifdef WOLFSSL_ECC_CURVE_STATIC
@ -33218,7 +33218,9 @@ static int EccKeyParamCopy(char** dst, char* src)
else { else {
XSTRNCPY(*dst, src, MAX_ECC_STRING); XSTRNCPY(*dst, src, MAX_ECC_STRING);
} }
XFREE(src, heap, DYNAMIC_TYPE_ECC_BUFFER);
#endif #endif
(void)heap;
return ret; return ret;
} }
@ -33326,10 +33328,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
key->heap, DYNAMIC_TYPE_ECC_BUFFER); key->heap, DYNAMIC_TYPE_ECC_BUFFER);
if (ret == 0) { if (ret == 0) {
#ifndef WOLFSSL_ECC_CURVE_STATIC #ifndef WOLFSSL_ECC_CURVE_STATIC
ret = EccKeyParamCopy((char**)&curve->prime, p); ret = EccKeyParamCopy((char**)&curve->prime, p, key->heap);
#else #else
const char *_tmp_ptr = &curve->prime[0]; const char *_tmp_ptr = &curve->prime[0];
ret = EccKeyParamCopy((char**)&_tmp_ptr, p); ret = EccKeyParamCopy((char**)&_tmp_ptr, p, key->heap);
#endif #endif
} }
} }
@ -33345,10 +33347,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
key->heap, DYNAMIC_TYPE_ECC_BUFFER); key->heap, DYNAMIC_TYPE_ECC_BUFFER);
if (ret == 0) { if (ret == 0) {
#ifndef WOLFSSL_ECC_CURVE_STATIC #ifndef WOLFSSL_ECC_CURVE_STATIC
ret = EccKeyParamCopy((char**)&curve->Af, af); ret = EccKeyParamCopy((char**)&curve->Af, af, key->heap);
#else #else
const char *_tmp_ptr = &curve->Af[0]; const char *_tmp_ptr = &curve->Af[0];
ret = EccKeyParamCopy((char**)&_tmp_ptr, af); ret = EccKeyParamCopy((char**)&_tmp_ptr, af, key->heap);
#endif #endif
} }
} }
@ -33358,10 +33360,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
key->heap, DYNAMIC_TYPE_ECC_BUFFER); key->heap, DYNAMIC_TYPE_ECC_BUFFER);
if (ret == 0) { if (ret == 0) {
#ifndef WOLFSSL_ECC_CURVE_STATIC #ifndef WOLFSSL_ECC_CURVE_STATIC
ret = EccKeyParamCopy((char**)&curve->Bf, bf); ret = EccKeyParamCopy((char**)&curve->Bf, bf, key->heap);
#else #else
const char *_tmp_ptr = &curve->Bf[0]; const char *_tmp_ptr = &curve->Bf[0];
ret = EccKeyParamCopy((char**)&_tmp_ptr, bf); ret = EccKeyParamCopy((char**)&_tmp_ptr, bf, key->heap);
#endif #endif
} }
} }
@ -33418,10 +33420,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
key->heap, DYNAMIC_TYPE_ECC_BUFFER); key->heap, DYNAMIC_TYPE_ECC_BUFFER);
if (ret == 0) { if (ret == 0) {
#ifndef WOLFSSL_ECC_CURVE_STATIC #ifndef WOLFSSL_ECC_CURVE_STATIC
ret = EccKeyParamCopy((char**)&curve->order, o); ret = EccKeyParamCopy((char**)&curve->order, o, key->heap);
#else #else
const char *_tmp_ptr = &curve->order[0]; const char *_tmp_ptr = &curve->order[0];
ret = EccKeyParamCopy((char**)&_tmp_ptr, o); ret = EccKeyParamCopy((char**)&_tmp_ptr, o, key->heap);
#endif #endif
} }
} }