]> granicus.if.org Git - php/commitdiff
Re-fix #72165
authorAnatol Belski <ab@php.net>
Fri, 6 May 2016 07:30:41 +0000 (09:30 +0200)
committerAnatol Belski <ab@php.net>
Fri, 6 May 2016 07:30:41 +0000 (09:30 +0200)
Reverted previous wrong patch, throw warning for numeric keys.
Numeric field names are not supported, see "distinguished name"
section here https://www.openssl.org/docs/manmaster/apps/req.html

ext/openssl/openssl.c
ext/openssl/tests/bug72165.phpt [new file with mode: 0644]

index 4a096f779a67ab7ec560f194ae09bc660f379bc9..07f41ce8b9a266f118398fbb3ffec83ef1a1ffb3 100644 (file)
@@ -2767,6 +2767,11 @@ static int php_openssl_make_REQ(struct php_x509_request * req, X509_REQ * csr, z
                        ZEND_HASH_FOREACH_STR_KEY_VAL(Z_ARRVAL_P(attribs), strindex, item) {
                                int nid;
 
+                               if (NULL == strindex) {
+                                       php_error_docref(NULL, E_WARNING, "dn: numeric fild names are not supported");
+                                       continue;
+                               }
+
                                convert_to_string_ex(item);
 
                                nid = OBJ_txt2nid(ZSTR_VAL(strindex));
diff --git a/ext/openssl/tests/bug72165.phpt b/ext/openssl/tests/bug72165.phpt
new file mode 100644 (file)
index 0000000..93b3c3d
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+Bug #72165 Null pointer dereference - openssl_csr_new
+--SKIPIF--
+<?php
+if (!extension_loaded("openssl")) die("skip");
+?>
+--FILE--
+<?php
+$var0 = array(0 => "hello", 1 => "world");
+$var2 = openssl_csr_new(array(0),$var0,null,array(0));
+?>
+==DONE==
+--EXPECTF--
+Warning: openssl_csr_new(): dn: numeric fild names are not supported in %sbug72165.php on line %d
+
+Warning: openssl_csr_new(): add1_attr_by_txt challengePassword_min -> 4 (failed; check error queue and value of string_mask OpenSSL option if illegal characters are reported) in %sbug72165.php on line %d
+==DONE==