Skip to content

Commit 21919fb

Browse files
committed
Beware realloc failing
1 parent d7e61ee commit 21919fb

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

ext/openssl/openssl.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,30 +1118,31 @@ PHP_FUNCTION(openssl_x509_parse)
11181118

11191119
char *crit_name = NULL;
11201120
int crit_len = 0;
1121-
int crit = 0;
11221121

11231122
for (i = 0; i < X509_get_ext_count(cert); i++) {
11241123
int nid;
11251124
extension = X509_get_ext(cert, i);
11261125
nid = OBJ_obj2nid(X509_EXTENSION_get_object(extension));
1127-
crit = X509_EXTENSION_get_critical(extension);
11281126
if (nid != NID_undef) {
1129-
extname = (char *)OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(extension)));
1127+
extname = (char *)OBJ_nid2sn(nid);
11301128
} else {
11311129
OBJ_obj2txt(buf, sizeof(buf)-1, X509_EXTENSION_get_object(extension), 1);
11321130
extname = buf;
11331131
}
1134-
if (crit) {
1135-
if (strlen(extname) + 10 > crit_len) {
1132+
if (X509_EXTENSION_get_critical(extension)) {
1133+
int new_len = strlen(extname) + 10;
1134+
if (new_len > crit_len) {
11361135
if (crit_name) {
11371136
efree(crit_name);
11381137
}
1139-
crit_len = strlen(extname) + 10;
1138+
crit_len = new_len;
11401139
crit_name = emalloc(crit_len);
11411140
}
1142-
strcpy(crit_name, extname);
1143-
strcat(crit_name, ":critical");
1144-
add_assoc_bool(&subitem, crit_name, 1);
1141+
if (crit_name) {
1142+
strcpy(crit_name, extname);
1143+
strcat(crit_name, ":critical");
1144+
add_assoc_bool(&subitem, crit_name, 1);
1145+
}
11451146
}
11461147

11471148
bio_out = BIO_new(BIO_s_mem());

0 commit comments

Comments
 (0)