Skip to content

Commit dcc9465

Browse files
committed
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.
1 parent ccbb726 commit dcc9465

1 file changed

Lines changed: 11 additions & 9 deletions

File tree

wolfcrypt/src/asn.c

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33197,7 +33197,7 @@ static int ASNToHexString(const byte* input, word32* inOutIdx, char** out,
3319733197
return 0;
3319833198
}
3319933199

33200-
static int EccKeyParamCopy(char** dst, char* src)
33200+
static int EccKeyParamCopy(char** dst, char* src, void* heap)
3320133201
{
3320233202
int ret = 0;
3320333203
#ifdef WOLFSSL_ECC_CURVE_STATIC
@@ -33218,7 +33218,9 @@ static int EccKeyParamCopy(char** dst, char* src)
3321833218
else {
3321933219
XSTRNCPY(*dst, src, MAX_ECC_STRING);
3322033220
}
33221+
XFREE(src, heap, DYNAMIC_TYPE_ECC_BUFFER);
3322133222
#endif
33223+
(void)heap;
3322233224

3322333225
return ret;
3322433226
}
@@ -33326,10 +33328,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
3332633328
key->heap, DYNAMIC_TYPE_ECC_BUFFER);
3332733329
if (ret == 0) {
3332833330
#ifndef WOLFSSL_ECC_CURVE_STATIC
33329-
ret = EccKeyParamCopy((char**)&curve->prime, p);
33331+
ret = EccKeyParamCopy((char**)&curve->prime, p, key->heap);
3333033332
#else
3333133333
const char *_tmp_ptr = &curve->prime[0];
33332-
ret = EccKeyParamCopy((char**)&_tmp_ptr, p);
33334+
ret = EccKeyParamCopy((char**)&_tmp_ptr, p, key->heap);
3333333335
#endif
3333433336
}
3333533337
}
@@ -33345,10 +33347,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
3334533347
key->heap, DYNAMIC_TYPE_ECC_BUFFER);
3334633348
if (ret == 0) {
3334733349
#ifndef WOLFSSL_ECC_CURVE_STATIC
33348-
ret = EccKeyParamCopy((char**)&curve->Af, af);
33350+
ret = EccKeyParamCopy((char**)&curve->Af, af, key->heap);
3334933351
#else
3335033352
const char *_tmp_ptr = &curve->Af[0];
33351-
ret = EccKeyParamCopy((char**)&_tmp_ptr, af);
33353+
ret = EccKeyParamCopy((char**)&_tmp_ptr, af, key->heap);
3335233354
#endif
3335333355
}
3335433356
}
@@ -33358,10 +33360,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
3335833360
key->heap, DYNAMIC_TYPE_ECC_BUFFER);
3335933361
if (ret == 0) {
3336033362
#ifndef WOLFSSL_ECC_CURVE_STATIC
33361-
ret = EccKeyParamCopy((char**)&curve->Bf, bf);
33363+
ret = EccKeyParamCopy((char**)&curve->Bf, bf, key->heap);
3336233364
#else
3336333365
const char *_tmp_ptr = &curve->Bf[0];
33364-
ret = EccKeyParamCopy((char**)&_tmp_ptr, bf);
33366+
ret = EccKeyParamCopy((char**)&_tmp_ptr, bf, key->heap);
3336533367
#endif
3336633368
}
3336733369
}
@@ -33418,10 +33420,10 @@ int wc_EccPublicKeyDecode(const byte* input, word32* inOutIdx,
3341833420
key->heap, DYNAMIC_TYPE_ECC_BUFFER);
3341933421
if (ret == 0) {
3342033422
#ifndef WOLFSSL_ECC_CURVE_STATIC
33421-
ret = EccKeyParamCopy((char**)&curve->order, o);
33423+
ret = EccKeyParamCopy((char**)&curve->order, o, key->heap);
3342233424
#else
3342333425
const char *_tmp_ptr = &curve->order[0];
33424-
ret = EccKeyParamCopy((char**)&_tmp_ptr, o);
33426+
ret = EccKeyParamCopy((char**)&_tmp_ptr, o, key->heap);
3342533427
#endif
3342633428
}
3342733429
}

0 commit comments

Comments
 (0)