Skip to content

Commit 79b575a

Browse files
committed
Address comments on pull request
1 parent 5a37b0d commit 79b575a

File tree

3 files changed

+20
-83
lines changed

3 files changed

+20
-83
lines changed

ext/openssl/openssl.c

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1998,7 +1998,7 @@ PHP_FUNCTION(openssl_csr_get_public_key)
19981998
}
19991999
/* }}} */
20002000

2001-
/* {{{ Returns an array of the fields/values of the Certificate Request */
2001+
/* Returns an array of the fields/values of the Certificate Request */
20022002
PHP_FUNCTION(openssl_csr_parse)
20032003
{
20042004
X509_REQ * csr = NULL;
@@ -2007,6 +2007,8 @@ PHP_FUNCTION(openssl_csr_parse)
20072007
int i, sig_nid;
20082008
bool useshortnames = 1;
20092009
zval subitem;
2010+
zval critext;
2011+
int critcount = 0;
20102012
X509_EXTENSION *extension;
20112013
X509_NAME *subject_name;
20122014
char *csr_name;
@@ -2015,8 +2017,6 @@ PHP_FUNCTION(openssl_csr_parse)
20152017
BUF_MEM *bio_buf;
20162018
char buf[256];
20172019
STACK_OF(X509_EXTENSION) *exts = NULL;
2018-
char *crit_name = NULL;
2019-
int crit_len = 0;
20202020

20212021
ZEND_PARSE_PARAMETERS_START(1, 2)
20222022
Z_PARAM_OBJ_OF_CLASS_OR_STR(csr_obj, php_openssl_request_ce, csr_str)
@@ -2026,7 +2026,7 @@ PHP_FUNCTION(openssl_csr_parse)
20262026

20272027
csr = php_openssl_csr_from_param(csr_obj, csr_str, 1);
20282028
if (csr == NULL) {
2029-
// TODO Add Warning?
2029+
php_error_docref(NULL, E_WARNING, "First parameter must be a valid CSR");
20302030
RETURN_FALSE;
20312031
}
20322032
array_init(return_value);
@@ -2054,11 +2054,13 @@ PHP_FUNCTION(openssl_csr_parse)
20542054
add_assoc_long(return_value, "signatureTypeNID", sig_nid);
20552055

20562056
array_init(&subitem);
2057+
array_init(&critext);
2058+
20572059
int attrcnt = X509_REQ_get_attr_count(csr);
20582060
if (attrcnt > 0) {
2061+
const char unknown[] = "Unknown";
20592062
for (i = 0; i < attrcnt; i++) {
20602063
X509_ATTRIBUTE *attr = X509_REQ_get_attr(csr,i);
2061-
char unknown[] = "Unknown";
20622064
if (attr) {
20632065
char objbuf[80];
20642066
/* Adapted from openssl's "req" app */
@@ -2112,25 +2114,17 @@ PHP_FUNCTION(openssl_csr_parse)
21122114
extension = sk_X509_EXTENSION_value(exts, i);
21132115
nid = OBJ_obj2nid(X509_EXTENSION_get_object(extension));
21142116
if (nid != NID_undef) {
2115-
extname = (char *)OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(extension)));
2117+
extname = (char *)OBJ_nid2sn(nid);
21162118
} else {
2117-
OBJ_obj2txt(buf, sizeof(buf)-1, X509_EXTENSION_get_object(extension), 1);
2119+
if (OBJ_obj2txt(buf, sizeof(buf)-1, X509_EXTENSION_get_object(extension), 1) < 0) {
2120+
php_openssl_store_errors();
2121+
goto err_subitem;
2122+
}
21182123
extname = buf;
21192124
}
21202125
if (X509_EXTENSION_get_critical(extension)) {
2121-
int new_len = strlen(extname) + 10;
2122-
if (new_len > crit_len) {
2123-
if (crit_name) {
2124-
efree(crit_name);
2125-
}
2126-
crit_len = new_len;
2127-
crit_name = emalloc(crit_len);
2128-
}
2129-
if (crit_name) {
2130-
strcpy(crit_name, extname);
2131-
strcat(crit_name, ":critical");
2132-
add_assoc_bool(&subitem, crit_name, 1);
2133-
}
2126+
add_next_index_string(&critext, extname);
2127+
critcount++;
21342128
}
21352129
bio_out = BIO_new(BIO_s_mem());
21362130
if (bio_out == NULL) {
@@ -2155,8 +2149,10 @@ PHP_FUNCTION(openssl_csr_parse)
21552149
BIO_free(bio_out);
21562150
}
21572151
add_assoc_zval(return_value, "extensions", &subitem);
2158-
if (crit_name) {
2159-
efree(crit_name);
2152+
if (critcount > 0) {
2153+
add_assoc_zval(return_value, "criticalExtensions", &critext);
2154+
} else {
2155+
zval_ptr_dtor(&critext);
21602156
}
21612157
sk_X509_EXTENSION_pop_free(exts, X509_EXTENSION_free);
21622158
exts = NULL;
@@ -2168,9 +2164,7 @@ PHP_FUNCTION(openssl_csr_parse)
21682164

21692165
err_subitem:
21702166
zval_ptr_dtor(&subitem);
2171-
if (crit_name) {
2172-
efree(crit_name);
2173-
}
2167+
zval_ptr_dtor(&critext);
21742168
zend_array_destroy(Z_ARR_P(return_value));
21752169
if (csr) {
21762170
X509_REQ_free(csr);
@@ -2180,7 +2174,6 @@ PHP_FUNCTION(openssl_csr_parse)
21802174
}
21812175
RETURN_FALSE;
21822176
}
2183-
/* }}} */
21842177

21852178
/* }}} */
21862179

ext/openssl/tests/openssl_csr_parse_basic.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ var_dump($parsedCSR === openssl_csr_parse(file_get_contents($csr)));
1111
var_dump($parsedCSR);
1212
var_dump(openssl_csr_parse($csr, false));
1313
?>
14-
--EXPECTF--
14+
--EXPECT--
1515
bool(true)
1616
array(9) {
1717
["name"]=>

ext/openssl/tests/parse.csr

Lines changed: 0 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,3 @@
1-
Certificate Request:
2-
Data:
3-
Version: 1 (0x0)
4-
Subject: C = UK, ST = England, L = London, CN = test.php.net, emailAddress = test.php@php.net
5-
Subject Public Key Info:
6-
Public Key Algorithm: rsaEncryption
7-
Public-Key: (2048 bit)
8-
Modulus:
9-
00:ad:b5:26:55:6d:58:fa:b2:73:65:10:b7:0d:80:
10-
74:91:d2:20:be:4e:cc:01:d6:b2:ef:cc:9b:18:f3:
11-
c3:85:59:5b:01:be:02:8d:66:da:3e:ce:27:c9:40:
12-
93:12:df:4a:54:6d:07:ee:95:c7:c4:36:d6:4a:c0:
13-
b6:f7:be:33:76:fa:a5:3f:42:f6:a2:9d:7f:33:64:
14-
ad:79:37:06:08:13:9d:c0:61:f6:8c:e4:55:01:92:
15-
fc:fd:66:d3:39:ff:48:a4:a0:0c:ef:ba:0d:d7:8b:
16-
1c:b3:23:a5:40:12:6a:86:1f:b1:ac:b8:3c:92:c0:
17-
76:74:ea:2c:e7:8c:83:aa:8d:13:ab:b4:79:b6:57:
18-
55:f9:a9:4a:65:75:a5:26:7a:91:09:f1:6e:c6:fa:
19-
ad:7d:62:39:9c:64:c0:79:d5:59:86:f8:d0:7c:b4:
20-
10:82:e8:df:5c:7a:05:5a:81:9b:5e:7d:9b:bb:37:
21-
f0:28:62:44:7a:a5:8f:6d:03:99:17:f1:5e:38:93:
22-
e5:80:e0:61:84:36:f7:04:01:4d:54:2b:4c:de:4e:
23-
f5:45:b9:63:e7:8a:4d:77:7c:af:ab:5e:76:c6:c8:
24-
05:77:4a:37:b3:5e:5f:b9:2c:19:81:ea:d4:8d:e1:
25-
2e:c3:fc:13:2b:d9:3b:bf:2a:7e:32:b2:10:1d:09:
26-
8f:75
27-
Exponent: 65537 (0x10001)
28-
Attributes:
29-
streetAddress :
30-
facsimileTelephoneNumber :
31-
postalCode :N11
32-
telephoneNumber :012345678
33-
name :Organisation
34-
1.3.6.1.4.1.11278.1150.2.1:11112222
35-
1.3.6.1.4.1.11278.1150.2.2:12345678
36-
emailAddress :info@example.com
37-
Requested Extensions:
38-
X509v3 Basic Constraints:
39-
CA:FALSE
40-
Signature Algorithm: sha256WithRSAEncryption
41-
Signature Value:
42-
0a:0f:23:fb:16:63:44:0a:3c:c1:01:b9:1a:7a:30:77:2f:5a:
43-
04:84:c7:09:24:41:f4:49:41:99:58:75:ea:6e:e9:3c:34:89:
44-
9c:18:45:33:91:e2:c1:27:57:3f:79:aa:ca:d6:a8:7a:7a:42:
45-
45:f1:74:51:bd:14:f1:e2:e0:de:ba:39:7d:97:6f:94:ed:1e:
46-
00:c6:33:1a:c9:4f:06:c7:fb:b5:5d:b0:98:97:2e:45:9b:78:
47-
bb:a8:cc:ab:fc:06:ca:e1:2d:16:22:66:49:7e:55:62:2b:37:
48-
23:9c:2b:b6:a8:da:c0:fe:0f:76:24:08:10:38:24:ae:0e:16:
49-
17:e1:c5:8e:37:0f:6b:26:7b:b6:84:41:58:eb:4b:e5:2f:12:
50-
3b:88:00:b3:74:00:fe:a0:3b:60:0c:89:43:83:3c:1a:e3:b0:
51-
f2:37:36:93:78:d1:55:2f:55:4f:87:b2:9d:53:96:ab:ed:87:
52-
f0:18:01:2b:86:4f:6c:ad:33:96:1d:71:29:bb:27:06:86:03:
53-
02:20:3a:ff:17:3d:44:06:7a:6e:76:c8:c1:2f:cf:24:91:0b:
54-
86:72:4d:d7:5f:89:90:24:79:32:e6:6e:1f:92:31:56:c7:5d:
55-
73:a4:51:e1:33:f9:fb:e6:43:82:fe:b1:cd:d1:13:cb:be:33:
56-
c8:37:d4:b3
571
-----BEGIN CERTIFICATE REQUEST-----
582
MIIDcDCCAlgCAQAwaDELMAkGA1UEBhMCVUsxEDAOBgNVBAgMB0VuZ2xhbmQxDzAN
593
BgNVBAcMBkxvbmRvbjEVMBMGA1UEAwwMdGVzdC5waHAubmV0MR8wHQYJKoZIhvcN

0 commit comments

Comments
 (0)