mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 10:47:28 +02:00
Merge pull request #7646 from kojo1/i2d-ecdsa
alloc a buffer for NULL pointer
This commit is contained in:
14
src/pk.c
14
src/pk.c
@ -13659,6 +13659,7 @@ WOLFSSL_ECDSA_SIG* wolfSSL_d2i_ECDSA_SIG(WOLFSSL_ECDSA_SIG** sig,
|
|||||||
int wolfSSL_i2d_ECDSA_SIG(const WOLFSSL_ECDSA_SIG *sig, unsigned char **pp)
|
int wolfSSL_i2d_ECDSA_SIG(const WOLFSSL_ECDSA_SIG *sig, unsigned char **pp)
|
||||||
{
|
{
|
||||||
word32 len = 0;
|
word32 len = 0;
|
||||||
|
int update_p = 1;
|
||||||
|
|
||||||
/* Validate parameter. */
|
/* Validate parameter. */
|
||||||
if (sig != NULL) {
|
if (sig != NULL) {
|
||||||
@ -13678,6 +13679,17 @@ int wolfSSL_i2d_ECDSA_SIG(const WOLFSSL_ECDSA_SIG *sig, unsigned char **pp)
|
|||||||
/* Add in the length of the SEQUENCE. */
|
/* Add in the length of the SEQUENCE. */
|
||||||
len += (word32)1 + ASN_LEN_SIZE(len);
|
len += (word32)1 + ASN_LEN_SIZE(len);
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_I2D_ECDSA_SIG_ALLOC
|
||||||
|
if ((pp != NULL) && (*pp == NULL)) {
|
||||||
|
*pp = (unsigned char *)XMALLOC(len, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
if (*pp != NULL) {
|
||||||
|
WOLFSSL_MSG("malloc error");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
update_p = 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Encode only if there is a buffer to encode into. */
|
/* Encode only if there is a buffer to encode into. */
|
||||||
if ((pp != NULL) && (*pp != NULL)) {
|
if ((pp != NULL) && (*pp != NULL)) {
|
||||||
/* Encode using the internal representations of r and s. */
|
/* Encode using the internal representations of r and s. */
|
||||||
@ -13686,7 +13698,7 @@ int wolfSSL_i2d_ECDSA_SIG(const WOLFSSL_ECDSA_SIG *sig, unsigned char **pp)
|
|||||||
/* No bytes encoded. */
|
/* No bytes encoded. */
|
||||||
len = 0;
|
len = 0;
|
||||||
}
|
}
|
||||||
else {
|
else if (update_p) {
|
||||||
/* Update pointer to after encoding. */
|
/* Update pointer to after encoding. */
|
||||||
*pp += len;
|
*pp += len;
|
||||||
}
|
}
|
||||||
|
10
tests/api.c
10
tests/api.c
@ -63464,6 +63464,16 @@ static int test_wolfSSL_ECDSA_SIG(void)
|
|||||||
ExpectIntEQ((p == outSig + 8), 1);
|
ExpectIntEQ((p == outSig + 8), 1);
|
||||||
ExpectIntEQ(XMEMCMP(sigData, outSig, 8), 0);
|
ExpectIntEQ(XMEMCMP(sigData, outSig, 8), 0);
|
||||||
|
|
||||||
|
p = NULL;
|
||||||
|
ExpectIntEQ(wolfSSL_i2d_ECDSA_SIG(sig, &p), 8);
|
||||||
|
#ifndef WOLFSSL_I2D_ECDSA_SIG_ALLOC
|
||||||
|
ExpectNull(p);
|
||||||
|
#else
|
||||||
|
ExpectNotNull(p);
|
||||||
|
ExpectIntEQ(XMEMCMP(p, outSig, 8), 0);
|
||||||
|
XFREE(p, NULL, DYNAMIC_TYPE_OPENSSL);
|
||||||
|
#endif
|
||||||
|
|
||||||
wolfSSL_ECDSA_SIG_free(sig);
|
wolfSSL_ECDSA_SIG_free(sig);
|
||||||
#endif
|
#endif
|
||||||
return EXPECT_RESULT();
|
return EXPECT_RESULT();
|
||||||
|
Reference in New Issue
Block a user