diff options
author | Christopher Jones <sixd@php.net> | 2013-08-19 10:53:41 -0700 |
---|---|---|
committer | Christopher Jones <sixd@php.net> | 2013-08-19 10:53:41 -0700 |
commit | 71c24f4c2e65d7d7fc3679cc14e846cdea83c82e (patch) | |
tree | 68b7d426a70a12539c3572a7ccf71ad1e6d68381 | |
parent | cb539b3e96dd0fc8df9564a60b66d8dea4439bc1 (diff) | |
parent | 4bad49e3bcb8851b6bdf7ce8e8405a12d0eec6d0 (diff) | |
download | php-git-71c24f4c2e65d7d7fc3679cc14e846cdea83c82e.tar.gz |
Merge branch 'PHP-5.4' of https://git.php.net/repository/php-src into PHP-5.4
* 'PHP-5.4' of https://git.php.net/repository/php-src:
added new glob() test
fix using wrong buffer pointer
Fix bug #65470 Segmentation fault in zend_error() with --enable-dtrace
Fix for php bug #64802 includes test case
new for fix #65225
Fixed #65225: PHP_BINARY incorrectly set
Use pkg-config to detect iodbc
Add -P option to use the current binary
Create test to the extension xmlrpc
Fixbug: phpize --clean will delete include/*.h
-rw-r--r-- | NEWS | 7 | ||||
-rw-r--r-- | Zend/zend.c | 6 | ||||
-rw-r--r-- | ext/odbc/config.m4 | 37 | ||||
-rw-r--r-- | ext/openssl/openssl.c | 50 | ||||
-rw-r--r-- | ext/openssl/tests/bug64802.pem | 37 | ||||
-rw-r--r-- | ext/openssl/tests/bug64802.phpt | 56 | ||||
-rw-r--r-- | ext/standard/tests/file/glob_variation3.phpt | 19 | ||||
-rw-r--r-- | ext/xmlrpc/tests/003.phpt | 109 | ||||
-rw-r--r-- | ext/xmlrpc/tests/004.phpt | 19 | ||||
-rw-r--r-- | main/main.c | 7 | ||||
-rwxr-xr-x | run-tests.php | 11 | ||||
-rw-r--r-- | scripts/phpize.in | 2 |
12 files changed, 315 insertions, 45 deletions
@@ -3,11 +3,14 @@ PHP NEWS ?? ??? 2013, PHP 5.4.19 - Core: + . Fixed bug #65470 (Segmentation fault in zend_error() with + --enable-dtrace). (Chris Jones) . Fixed bug #65372 (Segfault in gc_zval_possible_root when return reference fails). (Laruence) . Fixed bug #65304 (Use of max int in array_sum). (Laruence) . Fixed bug #65291 (get_defined_constants() causes PHP to crash in a very limited case). (Arpad) + . Fixed bug #65225 (PHP_BINARY incorrectly set). (Patrick Allaert) . Improved fix for bug #63186 (compile failure on netbsd). (Matteo) . Fixed bug #62692 (PHP fails to build with DTrace). (Chris Jones, Kris Van Hees) . Fixed bug #61345 (CGI mode - make install don't work). (Michael Heimpold) @@ -16,6 +19,10 @@ PHP NEWS . Fixed bug #61268 (--enable-dtrace leads make to clobber Zend/zend_dtrace.d) (Chris Jones) +- Openssl: + . Fixed bug #64802 (openssl_x509_parse fails to parse subject properly in + some cases). (Mark Jones) + - Session: . Fixed bug #62129 (rfc1867 crashes php even though turned off). (gxd305 at gmail dot com) diff --git a/Zend/zend.c b/Zend/zend.c index 85603082c0..162922866b 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -1091,17 +1091,19 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */ error_filename = "Unknown"; } - va_start(args, format); - #ifdef HAVE_DTRACE if(DTRACE_ERROR_ENABLED()) { char *dtrace_error_buffer; + va_start(args, format); zend_vspprintf(&dtrace_error_buffer, 0, format, args); DTRACE_ERROR(dtrace_error_buffer, (char *)error_filename, error_lineno); efree(dtrace_error_buffer); + va_end(args); } #endif /* HAVE_DTRACE */ + va_start(args, format); + /* if we don't have a user defined error handler */ if (!EG(user_error_handler) || !(EG(user_error_handler_error_reporting) & type) diff --git a/ext/odbc/config.m4 b/ext/odbc/config.m4 index 5be3288f30..a1201db57c 100644 --- a/ext/odbc/config.m4 +++ b/ext/odbc/config.m4 @@ -370,18 +370,33 @@ PHP_ARG_WITH(iodbc,, if test "$PHP_IODBC" != "no"; then AC_MSG_CHECKING(for iODBC support) - if test "$PHP_IODBC" = "yes"; then - PHP_IODBC=/usr/local + if test -z "$PKG_CONFIG"; then + AC_PATH_PROG(PKG_CONFIG, pkg-config, no) + fi + if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libiodbc ; then + PHP_ADD_LIBRARY_WITH_PATH(iodbc, $PHP_IODBC/$PHP_LIBDIR) + ODBC_TYPE=iodbc + ODBC_INCLUDE=`$PKG_CONFIG --cflags-only-I libiodbc` + ODBC_LFLAGS=`$PKG_CONFIG --libs-only-L libiodbc` + ODBC_LIBS=`$PKG_CONFIG --libs-only-l libiodbc` + PHP_EVAL_INCLINE($ODBC_INCLUDE) + AC_DEFINE(HAVE_IODBC,1,[ ]) + AC_DEFINE(HAVE_ODBC2,1,[ ]) + AC_MSG_RESULT([$ext_output]) + else + if test "$PHP_IODBC" = "yes"; then + PHP_IODBC=/usr/local + fi + PHP_ADD_LIBRARY_WITH_PATH(iodbc, $PHP_IODBC/$PHP_LIBDIR) + PHP_ADD_INCLUDE($PHP_IODBC/include, 1) + ODBC_TYPE=iodbc + ODBC_INCLUDE=-I$PHP_IODBC/include + ODBC_LFLAGS=-L$PHP_IODBC/$PHP_LIBDIR + ODBC_LIBS=-liodbc + AC_DEFINE(HAVE_IODBC,1,[ ]) + AC_DEFINE(HAVE_ODBC2,1,[ ]) + AC_MSG_RESULT([$ext_output]) fi - PHP_ADD_LIBRARY_WITH_PATH(iodbc, $PHP_IODBC/$PHP_LIBDIR) - PHP_ADD_INCLUDE($PHP_IODBC/include, 1) - ODBC_TYPE=iodbc - ODBC_INCLUDE=-I$PHP_IODBC/include - ODBC_LFLAGS=-L$PHP_IODBC/$PHP_LIBDIR - ODBC_LIBS=-liodbc - AC_DEFINE(HAVE_IODBC,1,[ ]) - AC_DEFINE(HAVE_ODBC2,1,[ ]) - AC_MSG_RESULT([$ext_output]) fi fi diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index 68be86f833..f1dfa5024a 100644 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -561,6 +561,7 @@ static EVP_PKEY * php_openssl_generate_private_key(struct php_x509_request * req static void add_assoc_name_entry(zval * val, char * key, X509_NAME * name, int shortname TSRMLS_DC) /* {{{ */ { + zval **data; zval *subitem, *subentries; int i, j = -1, last = -1, obj_cnt = 0; char *sname; @@ -592,39 +593,27 @@ static void add_assoc_name_entry(zval * val, char * key, X509_NAME * name, int s sname = (char *) OBJ_nid2ln(nid); } - MAKE_STD_ZVAL(subentries); - array_init(subentries); + str = X509_NAME_ENTRY_get_data(ne); + if (ASN1_STRING_type(str) != V_ASN1_UTF8STRING) { + to_add_len = ASN1_STRING_to_UTF8(&to_add, str); + } else { + to_add = ASN1_STRING_data(str); + to_add_len = ASN1_STRING_length(str); + } - last = -1; - for (;;) { - j = X509_NAME_get_index_by_OBJ(name, obj, last); - if (j < 0) { - if (last != -1) break; - } else { - obj_cnt++; - ne = X509_NAME_get_entry(name, j); - str = X509_NAME_ENTRY_get_data(ne); - if (ASN1_STRING_type(str) != V_ASN1_UTF8STRING) { - to_add_len = ASN1_STRING_to_UTF8(&to_add, str); - if (to_add_len != -1) { - add_next_index_stringl(subentries, (char *)to_add, to_add_len, 1); - } - } else { - to_add = ASN1_STRING_data(str); - to_add_len = ASN1_STRING_length(str); + if (to_add_len != -1) { + if (zend_hash_find(Z_ARRVAL_P(subitem), sname, strlen(sname)+1, (void**)&data) == SUCCESS) { + if (Z_TYPE_PP(data) == IS_ARRAY) { + subentries = *data; + add_next_index_stringl(subentries, (char *)to_add, to_add_len, 1); + } else if (Z_TYPE_PP(data) == IS_STRING) { + MAKE_STD_ZVAL(subentries); + array_init(subentries); + add_next_index_stringl(subentries, Z_STRVAL_PP(data), Z_STRLEN_PP(data), 1); add_next_index_stringl(subentries, (char *)to_add, to_add_len, 1); + zend_hash_update(Z_ARRVAL_P(subitem), sname, strlen(sname)+1, &subentries, sizeof(zval*), NULL); } - } - last = j; - } - i = last; - - if (obj_cnt > 1) { - add_assoc_zval_ex(subitem, sname, strlen(sname) + 1, subentries); - } else { - zval_dtor(subentries); - FREE_ZVAL(subentries); - if (obj_cnt && str && to_add_len > -1) { + } else { add_assoc_stringl(subitem, sname, (char *)to_add, to_add_len, 1); } } @@ -1574,6 +1563,7 @@ PHP_FUNCTION(openssl_x509_parse) bio_out = BIO_new(BIO_s_mem()); if (nid == NID_subject_alt_name) { if (openssl_x509v3_subjectAltName(bio_out, extension) == 0) { + BIO_get_mem_ptr(bio_out, &bio_buf); add_assoc_stringl(subitem, extname, bio_buf->data, bio_buf->length, 1); } else { zval_dtor(return_value); diff --git a/ext/openssl/tests/bug64802.pem b/ext/openssl/tests/bug64802.pem new file mode 100644 index 0000000000..187cda31d7 --- /dev/null +++ b/ext/openssl/tests/bug64802.pem @@ -0,0 +1,37 @@ +-----BEGIN CERTIFICATE----- +MIIGfzCCBWegAwIBAgIQSVCinGH6MkvjJZjRyjK9nTANBgkqhkiG9w0BAQUFADCB +jjELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxNDAyBgNV +BAMTK0NPTU9ETyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNlY3VyZSBTZXJ2ZXIgQ0Ew +HhcNMTIwMjI5MDAwMDAwWhcNMTQwMjI4MjM1OTU5WjCCAW8xEjAQBgNVBAMTCXd3 +dy5yZC5pbzERMA8GA1UEAxMIcmRpby5jb20xDjAMBgNVBAMTBXJkLmlvMRUwEwYD +VQQDEwxhcGkucmRpby5jb20xEjAQBgNVBAMTCWFwaS5yZC5pbzEQMA4GA1UEBRMH +NDU4NjAwNzETMBEGCysGAQQBgjc8AgEDEwJVUzEZMBcGCysGAQQBgjc8AgECEwhE +ZWxhd2FyZTEdMBsGA1UEDxMUUHJpdmF0ZSBPcmdhbml6YXRpb24xCzAJBgNVBAYT +AlVTMQ4wDAYDVQQREwU5NDEwMzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBG +cmFuY2lzY28xFzAVBgNVBAkTDjE1NTAgQnJ5YW50IHN0MRMwEQYDVQQKEwpSZGlv +LCBJbmMuMSMwIQYDVQQLExpDT01PRE8gRVYgTXVsdGktRG9tYWluIFNTTDEVMBMG +A1UEAxMMd3d3LnJkaW8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAt0AgYOe8EBJNVBAuSJFLKHRKZn0/ObCLBFG4xVH/5fb1rfYHBT1XSjjOqR3t +iGC/A3esF8YC7TuHQcTLVephx0DtJv1ASxRg3zPM8ebBRsuul18N0W+sY1aNXpkd +36quxvjg5UdBrAweuekJ7OTSZcCe2Ry/SKBeZSWWtkWsI4krCLv7JaKUwxw2h+Hn +TAZSBLVxz/mixF0WYdepYwnq2Hm7XvvVEIQ7wxOQ9bA7iCevLojZOnb39BT2QII7 +cy8AB47RZdfYg7UwaO3bST2rauA4MKar7/Ozqc0aemNFpLatJfgv07cydiuj9fsd +5aE/c8is8C9M9+7MmSMkcNEgGwIDAQABo4IB8zCCAe8wHwYDVR0jBBgwFoAUiERR +/1AqaV4tiPQhutkM8s7L6nwwHQYDVR0OBBYEFCrYw8bfrYJ61NS2yYx6/CnhjzT4 +MA4GA1UdDwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUF +BwMBBggrBgEFBQcDAjBGBgNVHSAEPzA9MDsGDCsGAQQBsjEBAgEFATArMCkGCCsG +AQUFBwIBFh1odHRwczovL3NlY3VyZS5jb21vZG8uY29tL0NQUzBTBgNVHR8ETDBK +MEigRqBEhkJodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9FeHRlbmRlZFZh +bGlkYXRpb25TZWN1cmVTZXJ2ZXJDQS5jcmwwgYQGCCsGAQUFBwEBBHgwdjBOBggr +BgEFBQcwAoZCaHR0cDovL2NydC5jb21vZG9jYS5jb20vQ09NT0RPRXh0ZW5kZWRW +YWxpZGF0aW9uU2VjdXJlU2VydmVyQ0EuY3J0MCQGCCsGAQUFBzABhhhodHRwOi8v +b2NzcC5jb21vZG9jYS5jb20wTAYDVR0RBEUwQ4IMd3d3LnJkaW8uY29tgglhcGku +cmQuaW+CDGFwaS5yZGlvLmNvbYIFcmQuaW+CCHJkaW8uY29tggl3d3cucmQuaW8w +DQYJKoZIhvcNAQEFBQADggEBAKFd4bPVFRyrlqIKPtrtMuqGqid6685ohxf0cv52 +sjdRYwLVTjnZOrmkDdNaF3R2A1ZlVMRN+67rK+qfY5sTeijFcudV3/i0PDtOFRwP +6yYVD2uZmYkxfPiW309HPmDF+EzhxpVjWlTQEOwkfFLTmJmwl3Qu2Kffp8F1ENXW +OTVNvj5VtMghvzu68PpzKl1VjlOR4Ej9NCwh1dUjNKEoTPzvpehXsIZ7jHSpX/T1 +wSSt9ckiechDdpgZXTzHgbxHNibK0Uhh+QhkBgYMj5F8qj5BlBhWAWqQa/VnEdmr +Pfo7U+QmadoqQd7qt06hE2hG1nfZ0vPJDbWV3oVSwG2Yt7I= +-----END CERTIFICATE----- diff --git a/ext/openssl/tests/bug64802.phpt b/ext/openssl/tests/bug64802.phpt new file mode 100644 index 0000000000..9a59701494 --- /dev/null +++ b/ext/openssl/tests/bug64802.phpt @@ -0,0 +1,56 @@ +--TEST-- +Bug #64802: openssl_x509_parse fails to parse subject properly in some cases +--SKIPIF-- +<?php +if (!extension_loaded("openssl")) die("skip"); +?> +--FILE-- +<?php +$cert = file_get_contents(__DIR__.'/bug64802.pem'); +$r = openssl_x509_parse($cert,$use_short_names=true); +sort($r['subject']); +var_dump( $r['subject'] ); +?> +--EXPECTF-- +array(11) { + [0]=> + string(14) "1550 Bryant st" + [1]=> + string(5) "94103" + [2]=> + string(7) "4586007" + [3]=> + string(2) "CA" + [4]=> + string(26) "COMODO EV Multi-Domain SSL" + [5]=> + string(20) "Private Organization" + [6]=> + string(10) "Rdio, Inc." + [7]=> + string(13) "San Francisco" + [8]=> + string(2) "US" + [9]=> + array(2) { + [0]=> + string(2) "US" + [1]=> + string(8) "Delaware" + } + [10]=> + array(6) { + [0]=> + string(9) "www.rd.io" + [1]=> + string(8) "rdio.com" + [2]=> + string(5) "rd.io" + [3]=> + string(12) "api.rdio.com" + [4]=> + string(9) "api.rd.io" + [5]=> + string(12) "www.rdio.com" + } +} diff --git a/ext/standard/tests/file/glob_variation3.phpt b/ext/standard/tests/file/glob_variation3.phpt new file mode 100644 index 0000000000..9e1e28baf9 --- /dev/null +++ b/ext/standard/tests/file/glob_variation3.phpt @@ -0,0 +1,19 @@ +--TEST-- +Test glob() function: ensure no platform difference +--FILE-- +<?php +$path = dirname(__FILE__); + +ini_set('open_basedir', NULL); +var_dump(glob("$path/*.none")); + +ini_set('open_basedir', $path); +var_dump(glob("$path/*.none")); + +?> +==DONE== +--EXPECT-- +array(0) { +} +bool(false) +==DONE== diff --git a/ext/xmlrpc/tests/003.phpt b/ext/xmlrpc/tests/003.phpt new file mode 100644 index 0000000000..3d6796dbab --- /dev/null +++ b/ext/xmlrpc/tests/003.phpt @@ -0,0 +1,109 @@ +--TEST-- +xmlrpc_encode() Simple test encode array +--SKIPIF-- +<?php if (!extension_loaded("xmlrpc")) print "skip"; ?> +--FILE-- +<?php + +$params = array( + "one" => "red", + "two" => "blue", + "three" => "green" +); + +$response = xmlrpc_encode($params); +echo $response; + +$params = array( + "red", + "blue", + "green" +); + +$response = xmlrpc_encode($params); +echo $response; + +$params = array( + 0 => "red", + 1 => "blue", + 3 => "green" +); + +$response = xmlrpc_encode($params); +echo $response; + +--EXPECT-- +<?xml version="1.0" encoding="utf-8"?> +<params> +<param> + <value> + <struct> + <member> + <name>one</name> + <value> + <string>red</string> + </value> + </member> + <member> + <name>two</name> + <value> + <string>blue</string> + </value> + </member> + <member> + <name>three</name> + <value> + <string>green</string> + </value> + </member> + </struct> + </value> +</param> +</params> +<?xml version="1.0" encoding="utf-8"?> +<params> +<param> + <value> + <array> + <data> + <value> + <string>red</string> + </value> + <value> + <string>blue</string> + </value> + <value> + <string>green</string> + </value> + </data> + </array> + </value> +</param> +</params> +<?xml version="1.0" encoding="utf-8"?> +<params> +<param> + <value> + <struct> + <member> + <name>0</name> + <value> + <string>red</string> + </value> + </member> + <member> + <name>1</name> + <value> + <string>blue</string> + </value> + </member> + <member> + <name>3</name> + <value> + <string>green</string> + </value> + </member> + </struct> + </value> +</param> +</params>
\ No newline at end of file diff --git a/ext/xmlrpc/tests/004.phpt b/ext/xmlrpc/tests/004.phpt new file mode 100644 index 0000000000..04f3ef315e --- /dev/null +++ b/ext/xmlrpc/tests/004.phpt @@ -0,0 +1,19 @@ +--TEST-- +xmlrpc_encode() Simple test encode int +--SKIPIF-- +<?php if (!extension_loaded("xmlrpc")) print "skip"; ?> +--FILE-- +<?php + +$response = xmlrpc_encode(1); +echo $response; + +--EXPECT-- +<?xml version="1.0" encoding="utf-8"?> +<params> +<param> + <value> + <int>1</int> + </value> +</param> +</params>
\ No newline at end of file diff --git a/main/main.c b/main/main.c index b639ab1658..1fd82c8398 100644 --- a/main/main.c +++ b/main/main.c @@ -115,6 +115,10 @@ #endif /* }}} */ +#ifndef S_ISREG +#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) +#endif + PHPAPI int (*php_register_internal_extensions_func)(TSRMLS_D) = php_register_internal_extensions; #ifndef ZTS @@ -276,13 +280,14 @@ static void php_binary_init(TSRMLS_D) if ((envpath = getenv("PATH")) != NULL) { char *search_dir, search_path[MAXPATHLEN]; char *last = NULL; + struct stat s; path = estrdup(envpath); search_dir = php_strtok_r(path, ":", &last); while (search_dir) { snprintf(search_path, MAXPATHLEN, "%s/%s", search_dir, sapi_module.executable_location); - if (VCWD_REALPATH(search_path, binary_location) && !VCWD_ACCESS(binary_location, X_OK)) { + if (VCWD_REALPATH(search_path, binary_location) && !VCWD_ACCESS(binary_location, X_OK) && VCWD_STAT(binary_location, &s) == 0 && S_ISREG(s.st_mode)) { found = 1; break; } diff --git a/run-tests.php b/run-tests.php index 830dcd759b..935f821f4e 100755 --- a/run-tests.php +++ b/run-tests.php @@ -597,6 +597,15 @@ if (isset($argc) && $argc > 1) { putenv("TEST_PHP_EXECUTABLE=$php"); $environment['TEST_PHP_EXECUTABLE'] = $php; break; + case 'P': + if(constant('PHP_BINARY')) { + $php = PHP_BINARY; + } else { + break; + } + putenv("TEST_PHP_EXECUTABLE=$php"); + $environment['TEST_PHP_EXECUTABLE'] = $php; + break; case 'q': putenv('NO_INTERACTION=1'); break; @@ -686,6 +695,8 @@ Options: -p <php> Specify PHP executable to run. + -P Use PHP_BINARY as PHP executable to run. + -q Quiet, no user interaction (same as environment NO_INTERACTION). -s <file> Write output to <file>. diff --git a/scripts/phpize.in b/scripts/phpize.in index 43cd8d30ff..b86925e295 100644 --- a/scripts/phpize.in +++ b/scripts/phpize.in @@ -11,7 +11,7 @@ SED="@SED@" FILES_BUILD="mkdep.awk scan_makefile_in.awk shtool libtool.m4" FILES="acinclude.m4 Makefile.global config.sub config.guess ltmain.sh run-tests*.php" -CLEAN_FILES="$FILES *.o *.lo *.la .deps .libs/ build/ include/ modules/ install-sh \ +CLEAN_FILES="$FILES *.o *.lo *.la .deps .libs/ build/ modules/ install-sh \ mkinstalldirs missing config.nice config.sub config.guess configure configure.in \ aclocal.m4 config.h config.h.in conftest* ltmain.sh libtool config.cache autom4te.cache/ \ config.log config.status Makefile Makefile.fragments Makefile.objects confdefs.h \ |