Fix oid memory leak
Signed-off-by: Agathiyan Bragadeesh <agathiyan.bragadeesh2@arm.com>
diff --git a/library/x509_create.c b/library/x509_create.c
index 8a648e3..0f1b8d0 100644
--- a/library/x509_create.c
+++ b/library/x509_create.c
@@ -285,7 +285,7 @@
numericoid = 1;
}
} else {
- oid = malloc(strlen(attr_descr->oid));
+ oid = calloc(1, strlen(attr_descr->oid));
strcpy(oid, attr_descr->oid);
numericoid = 0;
}
@@ -300,11 +300,13 @@
parse_attribute_value_ber_encoded(s, (int) (c - s), data, &data_len,
&tag)) != 0) {
if (numericoid) {
+ mbedtls_free(oid);
return MBEDTLS_ERR_X509_INVALID_NAME;
} else {
if ((parse_ret =
parse_attribute_value_string(s, (int) (c - s), data,
&data_len)) != 0) {
+ mbedtls_free(oid);
return parse_ret;
}
tag = attr_descr->default_tag;
@@ -314,11 +316,13 @@
if (!numericoid) {
if ((parse_ret =
parse_attribute_value_string(s, (int) (c - s), data, &data_len)) != 0) {
+ mbedtls_free(oid);
return parse_ret;
}
tag = attr_descr->default_tag;
}
if (numericoid) {
+ mbedtls_free(oid);
return MBEDTLS_ERR_X509_INVALID_NAME;
}
#endif
@@ -327,6 +331,7 @@
(unsigned char *) data,
data_len);
mbedtls_free(oid);
+ oid = NULL;
if (cur == NULL) {
return MBEDTLS_ERR_X509_ALLOC_FAILED;
}
@@ -346,6 +351,9 @@
}
c++;
}
+ if (oid != NULL) {
+ mbedtls_free(oid);
+ }
return ret;
}