1
0
mirror of https://github.com/Mbed-TLS/mbedtls.git synced 2025-07-29 11:41:15 +03:00

Fix oid memory leak

Signed-off-by: Agathiyan Bragadeesh <agathiyan.bragadeesh2@arm.com>
This commit is contained in:
Agathiyan Bragadeesh
2023-08-15 15:05:03 +01:00
parent f826d1113e
commit 55d93192b1

View File

@ -285,7 +285,7 @@ int mbedtls_x509_string_to_names(mbedtls_asn1_named_data **head, const char *nam
numericoid = 1; numericoid = 1;
} }
} else { } else {
oid = malloc(strlen(attr_descr->oid)); oid = calloc(1, strlen(attr_descr->oid));
strcpy(oid, attr_descr->oid); strcpy(oid, attr_descr->oid);
numericoid = 0; numericoid = 0;
} }
@ -300,11 +300,13 @@ int mbedtls_x509_string_to_names(mbedtls_asn1_named_data **head, const char *nam
parse_attribute_value_ber_encoded(s, (int) (c - s), data, &data_len, parse_attribute_value_ber_encoded(s, (int) (c - s), data, &data_len,
&tag)) != 0) { &tag)) != 0) {
if (numericoid) { if (numericoid) {
mbedtls_free(oid);
return MBEDTLS_ERR_X509_INVALID_NAME; return MBEDTLS_ERR_X509_INVALID_NAME;
} else { } else {
if ((parse_ret = if ((parse_ret =
parse_attribute_value_string(s, (int) (c - s), data, parse_attribute_value_string(s, (int) (c - s), data,
&data_len)) != 0) { &data_len)) != 0) {
mbedtls_free(oid);
return parse_ret; return parse_ret;
} }
tag = attr_descr->default_tag; tag = attr_descr->default_tag;
@ -314,11 +316,13 @@ int mbedtls_x509_string_to_names(mbedtls_asn1_named_data **head, const char *nam
if (!numericoid) { if (!numericoid) {
if ((parse_ret = if ((parse_ret =
parse_attribute_value_string(s, (int) (c - s), data, &data_len)) != 0) { parse_attribute_value_string(s, (int) (c - s), data, &data_len)) != 0) {
mbedtls_free(oid);
return parse_ret; return parse_ret;
} }
tag = attr_descr->default_tag; tag = attr_descr->default_tag;
} }
if (numericoid) { if (numericoid) {
mbedtls_free(oid);
return MBEDTLS_ERR_X509_INVALID_NAME; return MBEDTLS_ERR_X509_INVALID_NAME;
} }
#endif #endif
@ -327,6 +331,7 @@ int mbedtls_x509_string_to_names(mbedtls_asn1_named_data **head, const char *nam
(unsigned char *) data, (unsigned char *) data,
data_len); data_len);
mbedtls_free(oid); mbedtls_free(oid);
oid = NULL;
if (cur == NULL) { if (cur == NULL) {
return MBEDTLS_ERR_X509_ALLOC_FAILED; return MBEDTLS_ERR_X509_ALLOC_FAILED;
} }
@ -346,6 +351,9 @@ int mbedtls_x509_string_to_names(mbedtls_asn1_named_data **head, const char *nam
} }
c++; c++;
} }
if (oid != NULL) {
mbedtls_free(oid);
}
return ret; return ret;
} }