Skip to content

Commit 8f485a5

Browse files
authored
Merge pull request #9929 from douzzer/20260309-nullPointerOutOfMemory
20260309-nullPointerOutOfMemory (reviewed+approved by @philljj)
2 parents b3f08f3 + 5bb8b3f commit 8f485a5

2 files changed

Lines changed: 20 additions & 17 deletions

File tree

src/pk_ec.c

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4898,18 +4898,16 @@ WOLFSSL_ECDSA_SIG *wolfSSL_ECDSA_SIG_new(void)
48984898
DYNAMIC_TYPE_ECC);
48994899
if (sig == NULL) {
49004900
WOLFSSL_MSG("wolfSSL_ECDSA_SIG_new malloc ECDSA signature failure");
4901-
err = 1;
4901+
return NULL;
49024902
}
49034903

4904-
if (!err) {
4905-
/* Set s to NULL in case of error. */
4906-
sig->s = NULL;
4907-
/* Allocate BN into r. */
4908-
sig->r = wolfSSL_BN_new();
4909-
if (sig->r == NULL) {
4910-
WOLFSSL_MSG("wolfSSL_ECDSA_SIG_new malloc ECDSA r failure");
4911-
err = 1;
4912-
}
4904+
/* Set s to NULL in case of error. */
4905+
sig->s = NULL;
4906+
/* Allocate BN into r. */
4907+
sig->r = wolfSSL_BN_new();
4908+
if (sig->r == NULL) {
4909+
WOLFSSL_MSG("wolfSSL_ECDSA_SIG_new malloc ECDSA r failure");
4910+
err = 1;
49134911
}
49144912
if (!err) {
49154913
/* Allocate BN into s. */
@@ -4920,7 +4918,7 @@ WOLFSSL_ECDSA_SIG *wolfSSL_ECDSA_SIG_new(void)
49204918
}
49214919
}
49224920

4923-
if (err && (sig != NULL)) {
4921+
if (err) {
49244922
/* Dispose of allocated memory. */
49254923
wolfSSL_ECDSA_SIG_free(sig);
49264924
sig = NULL;

wolfcrypt/src/evp_pk.c

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,19 @@ static int d2i_make_pkey(WOLFSSL_EVP_PKEY** out, const unsigned char* mem,
6767

6868
/* Set the size and allocate memory for key data to be copied into. */
6969
pkey->pkey_sz = (int)memSz;
70-
pkey->pkey.ptr = (char*)XMALLOC((size_t)memSz, NULL,
71-
priv ? DYNAMIC_TYPE_PRIVATE_KEY : DYNAMIC_TYPE_PUBLIC_KEY);
72-
if (pkey->pkey.ptr == NULL) {
73-
ret = 0;
70+
if (memSz > 0) {
71+
pkey->pkey.ptr = (char*)XMALLOC((size_t)memSz, NULL,
72+
priv ? DYNAMIC_TYPE_PRIVATE_KEY : DYNAMIC_TYPE_PUBLIC_KEY);
73+
if (pkey->pkey.ptr == NULL) {
74+
ret = 0;
75+
}
76+
if (ret == 1) {
77+
/* Copy in key data. */
78+
XMEMCPY(pkey->pkey.ptr, mem, memSz);
79+
}
7480
}
7581
if (ret == 1) {
76-
/* Copy in key data, set key type passed in and return object. */
77-
XMEMCPY(pkey->pkey.ptr, mem, memSz);
82+
/* Set key type passed in and return object. */
7883
pkey->type = type;
7984
*out = pkey;
8085
}

0 commit comments

Comments
 (0)