Skip to content

Commit a05f4f4

Browse files
Merge pull request #6432 from SparkiDev/wolfssl_x509_name_entry_leak
X509 NAME ENTRY create: ensure existing object is not lost
2 parents 6b2fe61 + 403acad commit a05f4f4

1 file changed

Lines changed: 28 additions & 28 deletions

File tree

src/x509.c

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11383,6 +11383,31 @@ int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* name, unsigned char** out)
1138311383
return ne;
1138411384
}
1138511385

11386+
static void wolfssl_x509_name_entry_set(WOLFSSL_X509_NAME_ENTRY* ne,
11387+
int nid, int type, const unsigned char *data, int dataSz)
11388+
{
11389+
WOLFSSL_ASN1_OBJECT* object;
11390+
11391+
ne->nid = nid;
11392+
/* Reuse the object if already available. */
11393+
object = wolfSSL_OBJ_nid2obj_ex(nid, ne->object);
11394+
if (object != NULL) {
11395+
/* Set the object when no error. */
11396+
ne->object = object;
11397+
}
11398+
ne->value = wolfSSL_ASN1_STRING_type_new(type);
11399+
if (ne->value != NULL) {
11400+
if (wolfSSL_ASN1_STRING_set(ne->value, (const void*)data,
11401+
dataSz) == WOLFSSL_SUCCESS) {
11402+
ne->set = 1;
11403+
}
11404+
else {
11405+
/* Free the ASN1_STRING if it is not set. */
11406+
wolfSSL_ASN1_STRING_free(ne->value);
11407+
ne->value = NULL;
11408+
}
11409+
}
11410+
}
1138611411

1138711412
/* Create a new WOLFSSL_X509_NAME_ENTRY structure based on the text passed
1138811413
* in. Returns NULL on failure */
@@ -11415,20 +11440,8 @@ int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* name, unsigned char** out)
1141511440
return NULL;
1141611441
}
1141711442
}
11418-
ne->nid = nid;
11419-
ne->object = wolfSSL_OBJ_nid2obj_ex(nid, ne->object);
11420-
ne->value = wolfSSL_ASN1_STRING_type_new(type);
11421-
if (ne->value != NULL) {
11422-
if (wolfSSL_ASN1_STRING_set(ne->value, (const void*)data,
11423-
dataSz) == WOLFSSL_SUCCESS) {
11424-
ne->set = 1;
11425-
}
11426-
else {
11427-
/* Free the ASN1_STRING if it is not set. */
11428-
wolfSSL_ASN1_STRING_free(ne->value);
11429-
ne->value = NULL;
11430-
}
11431-
}
11443+
11444+
wolfssl_x509_name_entry_set(ne, nid, type, data, dataSz);
1143211445
}
1143311446

1143411447
return ne;
@@ -11469,20 +11482,7 @@ int wolfSSL_i2d_X509_NAME(WOLFSSL_X509_NAME* name, unsigned char** out)
1146911482
ne = *out;
1147011483
}
1147111484

11472-
ne->nid = nid;
11473-
ne->object = wolfSSL_OBJ_nid2obj_ex(nid, ne->object);
11474-
ne->value = wolfSSL_ASN1_STRING_type_new(type);
11475-
if (ne->value != NULL) {
11476-
if (wolfSSL_ASN1_STRING_set(ne->value, (const void*)data, dataSz)
11477-
== WOLFSSL_SUCCESS) {
11478-
ne->set = 1;
11479-
}
11480-
else {
11481-
/* Free the ASN1_STRING if it is not set. */
11482-
wolfSSL_ASN1_STRING_free(ne->value);
11483-
ne->value = NULL;
11484-
}
11485-
}
11485+
wolfssl_x509_name_entry_set(ne, nid, type, data, dataSz);
1148611486

1148711487
return ne;
1148811488
}

0 commit comments

Comments
 (0)