mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-31 03:07:29 +02:00
Fix segfault
This commit is contained in:
53
src/ssl.c
53
src/ssl.c
@ -8724,9 +8724,7 @@ void* wolfSSL_X509V3_EXT_d2i(WOLFSSL_X509_EXTENSION* ext)
|
|||||||
case (NID_basic_constraints):
|
case (NID_basic_constraints):
|
||||||
WOLFSSL_MSG("basicConstraints");
|
WOLFSSL_MSG("basicConstraints");
|
||||||
/* Allocate new BASIC_CONSTRAINTS structure */
|
/* Allocate new BASIC_CONSTRAINTS structure */
|
||||||
bc = (WOLFSSL_BASIC_CONSTRAINTS*)
|
bc = wolfSSL_BASIC_CONSTRAINTS_new();
|
||||||
XMALLOC(sizeof(WOLFSSL_BASIC_CONSTRAINTS), NULL,
|
|
||||||
DYNAMIC_TYPE_X509_EXT);
|
|
||||||
if (bc == NULL) {
|
if (bc == NULL) {
|
||||||
WOLFSSL_MSG("Failed to malloc basic constraints");
|
WOLFSSL_MSG("Failed to malloc basic constraints");
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -8737,7 +8735,7 @@ void* wolfSSL_X509V3_EXT_d2i(WOLFSSL_X509_EXTENSION* ext)
|
|||||||
bc->pathlen = wolfSSL_ASN1_INTEGER_dup(object->pathlen);
|
bc->pathlen = wolfSSL_ASN1_INTEGER_dup(object->pathlen);
|
||||||
if (bc->pathlen == NULL) {
|
if (bc->pathlen == NULL) {
|
||||||
WOLFSSL_MSG("Failed to duplicate ASN1_INTEGER");
|
WOLFSSL_MSG("Failed to duplicate ASN1_INTEGER");
|
||||||
XFREE(bc, NULL, DYNAMIC_TYPE_X509_EXT);
|
wolfSSL_BASIC_CONSTRAINTS_free(bc);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -9122,6 +9120,7 @@ void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509, int nid, int* c,
|
|||||||
WOLFSSL_STACK* sk = NULL;
|
WOLFSSL_STACK* sk = NULL;
|
||||||
WOLFSSL_ASN1_OBJECT* obj = NULL;
|
WOLFSSL_ASN1_OBJECT* obj = NULL;
|
||||||
WOLFSSL_GENERAL_NAME* gn = NULL;
|
WOLFSSL_GENERAL_NAME* gn = NULL;
|
||||||
|
WOLFSSL_BASIC_CONSTRAINTS* bc = NULL;
|
||||||
|
|
||||||
WOLFSSL_ENTER("wolfSSL_X509_get_ext_d2i");
|
WOLFSSL_ENTER("wolfSSL_X509_get_ext_d2i");
|
||||||
|
|
||||||
@ -9136,27 +9135,35 @@ void* wolfSSL_X509_get_ext_d2i(const WOLFSSL_X509* x509, int nid, int* c,
|
|||||||
switch (nid) {
|
switch (nid) {
|
||||||
case BASIC_CA_OID:
|
case BASIC_CA_OID:
|
||||||
if (x509->basicConstSet) {
|
if (x509->basicConstSet) {
|
||||||
obj = wolfSSL_ASN1_OBJECT_new();
|
WOLFSSL_ASN1_INTEGER* a;
|
||||||
if (obj == NULL) {
|
|
||||||
WOLFSSL_MSG("Issue creating WOLFSSL_ASN1_OBJECT struct");
|
bc = wolfSSL_BASIC_CONSTRAINTS_new();
|
||||||
|
if (!bc) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_BASIC_CONSTRAINTS_new error");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a = wolfSSL_ASN1_INTEGER_new();
|
||||||
|
if (!a) {
|
||||||
|
WOLFSSL_MSG("wolfSSL_ASN1_INTEGER_new error");
|
||||||
|
wolfSSL_BASIC_CONSTRAINTS_free(bc);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
a->length = x509->pathLength;
|
||||||
|
|
||||||
|
#if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) || \
|
||||||
|
defined(WOLFSSL_APACHE_HTTPD)
|
||||||
|
bc->ca = x509->isCa;
|
||||||
|
#endif
|
||||||
|
bc->pathlen = a;
|
||||||
if (c != NULL) {
|
if (c != NULL) {
|
||||||
*c = x509->basicConstCrit;
|
*c = x509->basicConstCrit;
|
||||||
}
|
}
|
||||||
obj->type = BASIC_CA_OID;
|
|
||||||
obj->grp = oidCertExtType;
|
|
||||||
obj->nid = nid;
|
|
||||||
obj->dynamic |= WOLFSSL_ASN1_DYNAMIC;
|
|
||||||
#if defined(OPENSSL_ALL) || defined(WOLFSSL_QT) || \
|
|
||||||
defined(WOLFSSL_APACHE_HTTPD)
|
|
||||||
obj->ca = x509->isCa;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
WOLFSSL_MSG("No Basic Constraint set");
|
WOLFSSL_MSG("No Basic Constraint set");
|
||||||
}
|
}
|
||||||
return obj;
|
return bc;
|
||||||
|
|
||||||
case ALT_NAMES_OID:
|
case ALT_NAMES_OID:
|
||||||
{
|
{
|
||||||
@ -27404,6 +27411,20 @@ WOLFSSL_STACK* wolfSSL_sk_new_null(void)
|
|||||||
|
|
||||||
#ifdef OPENSSL_EXTRA
|
#ifdef OPENSSL_EXTRA
|
||||||
|
|
||||||
|
WOLFSSL_BASIC_CONSTRAINTS* wolfSSL_BASIC_CONSTRAINTS_new(void)
|
||||||
|
{
|
||||||
|
WOLFSSL_BASIC_CONSTRAINTS* bc;
|
||||||
|
bc = (WOLFSSL_BASIC_CONSTRAINTS*)
|
||||||
|
XMALLOC(sizeof(WOLFSSL_BASIC_CONSTRAINTS), NULL,
|
||||||
|
DYNAMIC_TYPE_X509_EXT);
|
||||||
|
if (bc == NULL) {
|
||||||
|
WOLFSSL_MSG("Failed to malloc basic constraints");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
XMEMSET(bc, 0, sizeof(WOLFSSL_BASIC_CONSTRAINTS));
|
||||||
|
return bc;
|
||||||
|
}
|
||||||
|
|
||||||
/* frees the wolfSSL_BASIC_CONSTRAINTS object */
|
/* frees the wolfSSL_BASIC_CONSTRAINTS object */
|
||||||
void wolfSSL_BASIC_CONSTRAINTS_free(WOLFSSL_BASIC_CONSTRAINTS *bc)
|
void wolfSSL_BASIC_CONSTRAINTS_free(WOLFSSL_BASIC_CONSTRAINTS *bc)
|
||||||
{
|
{
|
||||||
|
10
tests/api.c
10
tests/api.c
@ -23307,6 +23307,7 @@ static void test_wolfSSL_certs(void)
|
|||||||
STACK_OF(ASN1_OBJECT)* sk;
|
STACK_OF(ASN1_OBJECT)* sk;
|
||||||
ASN1_STRING* asn1_str;
|
ASN1_STRING* asn1_str;
|
||||||
AUTHORITY_KEYID* akey;
|
AUTHORITY_KEYID* akey;
|
||||||
|
BASIC_CONSTRAINTS* bc;
|
||||||
int crit;
|
int crit;
|
||||||
|
|
||||||
printf(testingFmt, "wolfSSL_certs()");
|
printf(testingFmt, "wolfSSL_certs()");
|
||||||
@ -23371,16 +23372,16 @@ static void test_wolfSSL_certs(void)
|
|||||||
#endif /* !NO_SHA && !NO_SHA256*/
|
#endif /* !NO_SHA && !NO_SHA256*/
|
||||||
|
|
||||||
/* test and checkout X509 extensions */
|
/* test and checkout X509 extensions */
|
||||||
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509ext, NID_basic_constraints,
|
bc = (BASIC_CONSTRAINTS*)X509_get_ext_d2i(x509ext, NID_basic_constraints,
|
||||||
&crit, NULL);
|
&crit, NULL);
|
||||||
AssertNotNull(sk);
|
AssertNotNull(bc);
|
||||||
#ifdef OPENSSL_ALL
|
#ifdef OPENSSL_ALL
|
||||||
ext = X509V3_EXT_i2d(NID_basic_constraints, crit, sk);
|
ext = X509V3_EXT_i2d(NID_basic_constraints, crit, bc);
|
||||||
AssertNotNull(ext);
|
AssertNotNull(ext);
|
||||||
X509_EXTENSION_free(ext);
|
X509_EXTENSION_free(ext);
|
||||||
#endif
|
#endif
|
||||||
AssertIntEQ(crit, 0);
|
AssertIntEQ(crit, 0);
|
||||||
sk_ASN1_OBJECT_free(sk);
|
BASIC_CONSTRAINTS_free(bc);
|
||||||
|
|
||||||
asn1_str = (ASN1_STRING*)X509_get_ext_d2i(x509ext, NID_key_usage, &crit, NULL);
|
asn1_str = (ASN1_STRING*)X509_get_ext_d2i(x509ext, NID_key_usage, &crit, NULL);
|
||||||
AssertNotNull(asn1_str);
|
AssertNotNull(asn1_str);
|
||||||
@ -23416,7 +23417,6 @@ static void test_wolfSSL_certs(void)
|
|||||||
wolfSSL_AUTHORITY_KEYID_free(akey);
|
wolfSSL_AUTHORITY_KEYID_free(akey);
|
||||||
X509_EXTENSION_free(ext);
|
X509_EXTENSION_free(ext);
|
||||||
#endif
|
#endif
|
||||||
sk_ASN1_OBJECT_free(sk);
|
|
||||||
|
|
||||||
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509ext,
|
sk = (STACK_OF(ASN1_OBJECT)*)X509_get_ext_d2i(x509ext,
|
||||||
NID_private_key_usage_period, &crit, NULL);
|
NID_private_key_usage_period, &crit, NULL);
|
||||||
|
@ -88,6 +88,7 @@ typedef struct WOLFSSL_BASIC_CONSTRAINTS BASIC_CONSTRAINTS;
|
|||||||
typedef struct WOLFSSL_ACCESS_DESCRIPTION ACCESS_DESCRIPTION;
|
typedef struct WOLFSSL_ACCESS_DESCRIPTION ACCESS_DESCRIPTION;
|
||||||
typedef WOLF_STACK_OF(WOLFSSL_ACCESS_DESCRIPTION) WOLFSSL_AUTHORITY_INFO_ACCESS;
|
typedef WOLF_STACK_OF(WOLFSSL_ACCESS_DESCRIPTION) WOLFSSL_AUTHORITY_INFO_ACCESS;
|
||||||
|
|
||||||
|
WOLFSSL_API WOLFSSL_BASIC_CONSTRAINTS* wolfSSL_BASIC_CONSTRAINTS_new(void);
|
||||||
WOLFSSL_API void wolfSSL_BASIC_CONSTRAINTS_free(WOLFSSL_BASIC_CONSTRAINTS *bc);
|
WOLFSSL_API void wolfSSL_BASIC_CONSTRAINTS_free(WOLFSSL_BASIC_CONSTRAINTS *bc);
|
||||||
WOLFSSL_API WOLFSSL_AUTHORITY_KEYID* wolfSSL_AUTHORITY_KEYID_new(void);
|
WOLFSSL_API WOLFSSL_AUTHORITY_KEYID* wolfSSL_AUTHORITY_KEYID_new(void);
|
||||||
WOLFSSL_API void wolfSSL_AUTHORITY_KEYID_free(WOLFSSL_AUTHORITY_KEYID *id);
|
WOLFSSL_API void wolfSSL_AUTHORITY_KEYID_free(WOLFSSL_AUTHORITY_KEYID *id);
|
||||||
|
Reference in New Issue
Block a user