forked from wolfSSL/wolfssl
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:
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user