From 04821a1ee6e0594b710160688f227a8ff8cd6628 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 14 Jul 2014 09:52:39 +0200 Subject: [PATCH 01/23] added headers install to phpize mode --- win32/build/Makefile.phpize | 3 +++ 1 file changed, 3 insertions(+) diff --git a/win32/build/Makefile.phpize b/win32/build/Makefile.phpize index 0463d332fb0..44faf7d54b9 100644 --- a/win32/build/Makefile.phpize +++ b/win32/build/Makefile.phpize @@ -6,6 +6,7 @@ MT="$(MT)" PHPSDK_DIR=$(PHP_DIR) PHPLIB=$(PHPSDK_DIR)\lib\$(PHPLIB) LDFLAGS=$(LDFLAGS) /libpath:"$(PHPSDK_DIR)\lib\;$(PHPSDK_DIR)" +BUILD_DIR_DEV=$(PHPSDK_DIR) all: $(EXT_TARGETS) $(PECL_TARGETS) @@ -33,3 +34,5 @@ _VC_MANIFEST_EMBED_EXE= if exist $@.manifest $(MT) -nologo -manifest $@.manifest _VC_MANIFEST_EMBED_DLL= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;2 !endif +install: build-headers + From 8d359bbcca52722163f3fdf3550faa79472ea276 Mon Sep 17 00:00:00 2001 From: Rasmus Lerdorf Date: Fri, 11 Jul 2014 10:59:02 -0700 Subject: [PATCH 02/23] Test output relies on expose_php being on --- ext/zlib/tests/bug65391.phpt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ext/zlib/tests/bug65391.phpt b/ext/zlib/tests/bug65391.phpt index 439473fc5d0..9d9fd164f62 100644 --- a/ext/zlib/tests/bug65391.phpt +++ b/ext/zlib/tests/bug65391.phpt @@ -6,6 +6,8 @@ extension_loaded("zlib") or die("skip need zlib"); ?> --GET-- dummy=1 +--INI-- +expose_php=On --FILE-- Date: Fri, 11 Jul 2014 10:29:40 -0700 Subject: [PATCH 03/23] 1.2 is a problematic float to print out Lower the default display precision for this test --- ext/intl/tests/collator_get_locale.phpt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ext/intl/tests/collator_get_locale.phpt b/ext/intl/tests/collator_get_locale.phpt index 68440f3ee76..e71a020b4ba 100644 --- a/ext/intl/tests/collator_get_locale.phpt +++ b/ext/intl/tests/collator_get_locale.phpt @@ -3,6 +3,8 @@ get_locale() icu <= 4.2 --SKIPIF-- +--INI-- +precision=6 --FILE-- Date: Fri, 11 Jul 2014 09:12:32 -0700 Subject: [PATCH 04/23] The test output is dependent on expose_php ini --- tests/basic/025.phpt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/basic/025.phpt b/tests/basic/025.phpt index 58191bcd61d..37561a2a2ee 100644 --- a/tests/basic/025.phpt +++ b/tests/basic/025.phpt @@ -3,6 +3,7 @@ Test HTTP_RAW_POST_DATA with excessive post length --INI-- always_populate_raw_post_data=1 post_max_size=1K +expose_php=On --POST-- a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa --FILE-- From 55069b4c0972d32d9f836640be34c071418e8672 Mon Sep 17 00:00:00 2001 From: Rasmus Lerdorf Date: Fri, 11 Jul 2014 09:12:32 -0700 Subject: [PATCH 05/23] The test output is dependent on expose_php ini --- tests/basic/025.phpt | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/basic/025.phpt b/tests/basic/025.phpt index 58191bcd61d..37561a2a2ee 100644 --- a/tests/basic/025.phpt +++ b/tests/basic/025.phpt @@ -3,6 +3,7 @@ Test HTTP_RAW_POST_DATA with excessive post length --INI-- always_populate_raw_post_data=1 post_max_size=1K +expose_php=On --POST-- a=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa --FILE-- From 050ef52549b6da25574a98fe23a2f1cca37ca98f Mon Sep 17 00:00:00 2001 From: Rasmus Lerdorf Date: Fri, 11 Jul 2014 10:29:40 -0700 Subject: [PATCH 06/23] 1.2 is a problematic float to print out Lower the default display precision for this test --- ext/intl/tests/collator_get_locale.phpt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ext/intl/tests/collator_get_locale.phpt b/ext/intl/tests/collator_get_locale.phpt index 68440f3ee76..e71a020b4ba 100644 --- a/ext/intl/tests/collator_get_locale.phpt +++ b/ext/intl/tests/collator_get_locale.phpt @@ -3,6 +3,8 @@ get_locale() icu <= 4.2 --SKIPIF-- +--INI-- +precision=6 --FILE-- Date: Fri, 11 Jul 2014 10:59:02 -0700 Subject: [PATCH 07/23] Test output relies on expose_php being on --- ext/zlib/tests/bug65391.phpt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ext/zlib/tests/bug65391.phpt b/ext/zlib/tests/bug65391.phpt index 3ba5350810f..a93c2c01580 100644 --- a/ext/zlib/tests/bug65391.phpt +++ b/ext/zlib/tests/bug65391.phpt @@ -6,6 +6,8 @@ extension_loaded("zlib") or die("skip need zlib"); ?> --GET-- dummy=1 +--INI-- +expose_php=On --FILE-- Date: Mon, 14 Jul 2014 08:21:27 -0700 Subject: [PATCH 08/23] This test depends on expose_php being on --- sapi/cgi/tests/bug61605.phpt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sapi/cgi/tests/bug61605.phpt b/sapi/cgi/tests/bug61605.phpt index c6e4cf20ca9..9c29e6dda2e 100644 --- a/sapi/cgi/tests/bug61605.phpt +++ b/sapi/cgi/tests/bug61605.phpt @@ -4,6 +4,8 @@ Bug #61605 (header_remove() does not remove all headers) --GET-- foo=bar +--INI-- +expose_php=On --FILE-- Date: Mon, 14 Jul 2014 08:21:27 -0700 Subject: [PATCH 09/23] This test depends on expose_php being on --- sapi/cgi/tests/bug61605.phpt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sapi/cgi/tests/bug61605.phpt b/sapi/cgi/tests/bug61605.phpt index c6e4cf20ca9..9c29e6dda2e 100644 --- a/sapi/cgi/tests/bug61605.phpt +++ b/sapi/cgi/tests/bug61605.phpt @@ -4,6 +4,8 @@ Bug #61605 (header_remove() does not remove all headers) --GET-- foo=bar +--INI-- +expose_php=On --FILE-- Date: Mon, 14 Jul 2014 08:21:27 -0700 Subject: [PATCH 10/23] This test depends on expose_php being on --- sapi/cgi/tests/bug61605.phpt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sapi/cgi/tests/bug61605.phpt b/sapi/cgi/tests/bug61605.phpt index c6e4cf20ca9..9c29e6dda2e 100644 --- a/sapi/cgi/tests/bug61605.phpt +++ b/sapi/cgi/tests/bug61605.phpt @@ -4,6 +4,8 @@ Bug #61605 (header_remove() does not remove all headers) --GET-- foo=bar +--INI-- +expose_php=On --FILE-- Date: Mon, 14 Jul 2014 20:27:59 +0200 Subject: [PATCH 11/23] fix C89 compat --- ext/standard/http_fopen_wrapper.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c index 87d0bd64e39..1c4b17afb1f 100644 --- a/ext/standard/http_fopen_wrapper.c +++ b/ext/standard/http_fopen_wrapper.c @@ -224,6 +224,8 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, efree(transport_string); if (stream && use_proxy && use_ssl) { + smart_str header = {0}; + /* Set peer_name or name verification will try to use the proxy server name */ if (!context || php_stream_context_get_option(context, "ssl", "peer_name", &tmpzval) == FAILURE) { MAKE_STD_ZVAL(ssl_proxy_peer_name); @@ -231,8 +233,6 @@ php_stream *php_stream_url_wrap_http_ex(php_stream_wrapper *wrapper, php_stream_context_set_option(stream->context, "ssl", "peer_name", ssl_proxy_peer_name); } - smart_str header = {0}; - smart_str_appendl(&header, "CONNECT ", sizeof("CONNECT ")-1); smart_str_appends(&header, resource->host); smart_str_appendc(&header, ':'); From cbcbf73fe8fe4a12739d502a2704a9a4cf7f5790 Mon Sep 17 00:00:00 2001 From: Lior Kaplan Date: Wed, 16 Jul 2014 00:10:29 +0300 Subject: [PATCH 12/23] Add ifdef on ecdh for single_ecdh_use Allows build with OpenSSL < 0.9.8 --- ext/openssl/xp_ssl.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ext/openssl/xp_ssl.c b/ext/openssl/xp_ssl.c index c6a91570cff..948bb14ebea 100644 --- a/ext/openssl/xp_ssl.c +++ b/ext/openssl/xp_ssl.c @@ -1164,12 +1164,14 @@ static int set_server_specific_opts(php_stream *stream, SSL_CTX *ctx TSRMLS_DC) ssl_ctx_options |= SSL_OP_SINGLE_DH_USE; } +#ifdef HAVE_ECDH if (SUCCESS == php_stream_context_get_option( stream->context, "ssl", "single_ecdh_use", &val) && zend_is_true(*val) ) { ssl_ctx_options |= SSL_OP_SINGLE_ECDH_USE; } +#endif SSL_CTX_set_options(ctx, ssl_ctx_options); From 33de1dece8d54c1e194a4c5cad374567eb838927 Mon Sep 17 00:00:00 2001 From: Daniel Lowrey Date: Tue, 15 Jul 2014 23:55:30 -0400 Subject: [PATCH 13/23] Update NEWS for PR#723 merge --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 52aed3f13a0..065a3659bad 100644 --- a/NEWS +++ b/NEWS @@ -30,6 +30,8 @@ PHP NEWS - OpenSSL: . Fixed bug #67609 (TLS connections fail behind HTTP proxy). (Daniel Lowrey) + . Fixed broken build against OpenSSL older than 0.9.8 where ECDH unavailable. + (Kaplan Lior) - Phar: . Fixed bug #67587 (Redirection loop on nginx with FPM). (Christian Weiske) From ef958405507d75dd591801802d7c72724fb332be Mon Sep 17 00:00:00 2001 From: Lior Kaplan Date: Wed, 16 Jul 2014 17:45:23 +0300 Subject: [PATCH 14/23] Fix my name in the given credit --- NEWS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS b/NEWS index 065a3659bad..0b1d95fbfd8 100644 --- a/NEWS +++ b/NEWS @@ -31,7 +31,7 @@ PHP NEWS - OpenSSL: . Fixed bug #67609 (TLS connections fail behind HTTP proxy). (Daniel Lowrey) . Fixed broken build against OpenSSL older than 0.9.8 where ECDH unavailable. - (Kaplan Lior) + (Lior Kaplan) - Phar: . Fixed bug #67587 (Redirection loop on nginx with FPM). (Christian Weiske) From 06f5f65c947891808ef2087dbbe1f6c97daf45ed Mon Sep 17 00:00:00 2001 From: Andrey Hristov Date: Wed, 16 Jul 2014 19:24:39 +0300 Subject: [PATCH 15/23] Add some trace info as well as update CLIENT_ flags --- ext/mysqli/mysqli.c | 7 +-- ext/mysqli/tests/mysqli_constants.phpt | 1 + ext/mysqlnd/mysqlnd.c | 31 +++++++++++- ext/mysqlnd/mysqlnd_enum_n_def.h | 67 ++++++++++++++------------ ext/mysqlnd/mysqlnd_net.c | 5 ++ 5 files changed, 75 insertions(+), 36 deletions(-) diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index b23d7e31392..f13958897fa 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -715,6 +715,10 @@ PHP_MINIT_FUNCTION(mysqli) REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_IGNORE_SPACE", CLIENT_IGNORE_SPACE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_NO_SCHEMA", CLIENT_NO_SCHEMA, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_FOUND_ROWS", CLIENT_FOUND_ROWS, CONST_CS | CONST_PERSISTENT); +#if (MYSQL_VERSION_ID >= 50611 && defined(CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS)) || defined(MYSQLI_USE_MYSQLND) + REGISTER_LONG_CONSTANT("MYSQLI_CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS", CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS", MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, CONST_CS | CONST_PERSISTENT); +#endif /* for mysqli_query */ REGISTER_LONG_CONSTANT("MYSQLI_STORE_RESULT", MYSQLI_STORE_RESULT, CONST_CS | CONST_PERSISTENT); @@ -848,9 +852,6 @@ PHP_MINIT_FUNCTION(mysqli) REGISTER_LONG_CONSTANT("MYSQLI_REFRESH_BACKUP_LOG", REFRESH_BACKUP_LOG, CONST_CS | CONST_PERSISTENT); #endif -#if (MYSQL_VERSION_ID >= 50611 && defined(CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS)) || defined(MYSQLI_USE_MYSQLND) - REGISTER_LONG_CONSTANT("MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS", MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, CONST_CS | CONST_PERSISTENT); -#endif REGISTER_LONG_CONSTANT("MYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOT", TRANS_START_WITH_CONSISTENT_SNAPSHOT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("MYSQLI_TRANS_START_READ_WRITE", TRANS_START_READ_WRITE, CONST_CS | CONST_PERSISTENT); diff --git a/ext/mysqli/tests/mysqli_constants.phpt b/ext/mysqli/tests/mysqli_constants.phpt index bed9d53419c..9bbc8bb4b73 100644 --- a/ext/mysqli/tests/mysqli_constants.phpt +++ b/ext/mysqli/tests/mysqli_constants.phpt @@ -196,6 +196,7 @@ require_once('skipifconnectfailure.inc'); if (($IS_MYSQLND && version_compare(PHP_VERSION, ' 5.4.12-dev', '>=')) || (!$IS_MYSQLND && ($version > 50610))) { /* could be that MySQL/libmysql 5.6.9 had the flag already but it was no stable release */ $expected_constants["MYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDS"] = true; + $expected_constants["MYSQLI_CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS"] = true; } $unexpected_constants = array(); diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c index 893a144c4b6..2254fd92bc7 100644 --- a/ext/mysqlnd/mysqlnd.c +++ b/ext/mysqlnd/mysqlnd.c @@ -321,6 +321,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, simple_command_send_request)(MYSQLND_CONN_DATA DBG_ENTER("mysqlnd_conn_data::simple_command_send_request"); DBG_INF_FMT("command=%s silent=%u", mysqlnd_command_to_text[command], silent); DBG_INF_FMT("conn->server_status=%u", conn->upsert_status->server_status); + DBG_INF_FMT("sending %u bytes", arg_len + 1); /* + 1 is for the command */ switch (CONN_GET_STATE(conn)) { case CONN_READY: @@ -448,6 +449,31 @@ mysqlnd_switch_to_ssl_if_needed( const MYSQLND_CHARSET * charset; MYSQLND_PACKET_AUTH * auth_packet; DBG_ENTER("mysqlnd_switch_to_ssl_if_needed"); + DBG_INF_FMT("client_capability_flags=%lu", mysql_flags); + DBG_INF_FMT("CLIENT_LONG_PASSWORD= %d", mysql_flags & CLIENT_LONG_PASSWORD); + DBG_INF_FMT("CLIENT_FOUND_ROWS= %d", mysql_flags & CLIENT_FOUND_ROWS); + DBG_INF_FMT("CLIENT_LONG_FLAG= %d", mysql_flags & CLIENT_LONG_FLAG); + DBG_INF_FMT("CLIENT_NO_SCHEMA= %d", mysql_flags & CLIENT_NO_SCHEMA); + DBG_INF_FMT("CLIENT_COMPRESS= %d", mysql_flags & CLIENT_COMPRESS); + DBG_INF_FMT("CLIENT_ODBC= %d", mysql_flags & CLIENT_ODBC); + DBG_INF_FMT("CLIENT_LOCAL_FILES= %d", mysql_flags & CLIENT_LOCAL_FILES); + DBG_INF_FMT("CLIENT_IGNORE_SPACE= %d", mysql_flags & CLIENT_IGNORE_SPACE); + DBG_INF_FMT("CLIENT_PROTOCOL_41= %d", mysql_flags & CLIENT_PROTOCOL_41); + DBG_INF_FMT("CLIENT_INTERACTIVE= %d", mysql_flags & CLIENT_INTERACTIVE); + DBG_INF_FMT("CLIENT_SSL= %d", mysql_flags & CLIENT_SSL); + DBG_INF_FMT("CLIENT_IGNORE_SIGPIPE= %d", mysql_flags & CLIENT_IGNORE_SIGPIPE); + DBG_INF_FMT("CLIENT_TRANSACTIONS= %d", mysql_flags & CLIENT_TRANSACTIONS); + DBG_INF_FMT("CLIENT_RESERVED= %d", mysql_flags & CLIENT_RESERVED); + DBG_INF_FMT("CLIENT_SECURE_CONNECTION=%d", mysql_flags & CLIENT_SECURE_CONNECTION); + DBG_INF_FMT("CLIENT_MULTI_STATEMENTS=%d", mysql_flags & CLIENT_MULTI_STATEMENTS); + DBG_INF_FMT("CLIENT_MULTI_RESULTS= %d", mysql_flags & CLIENT_MULTI_RESULTS); + DBG_INF_FMT("CLIENT_PS_MULTI_RESULTS=%d", mysql_flags & CLIENT_PS_MULTI_RESULTS); + DBG_INF_FMT("CLIENT_CONNECT_ATTRS= %d", mysql_flags & CLIENT_PLUGIN_AUTH); + DBG_INF_FMT("CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA= %d", mysql_flags & CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA); + DBG_INF_FMT("CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS= %d", mysql_flags & CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS); + DBG_INF_FMT("CLIENT_SESSION_TRACK= %d", mysql_flags & CLIENT_SESSION_TRACK); + DBG_INF_FMT("CLIENT_SSL_VERIFY_SERVER_CERT= %d", mysql_flags & CLIENT_SSL_VERIFY_SERVER_CERT); + DBG_INF_FMT("CLIENT_REMEMBER_OPTIONS= %d", mysql_flags & CLIENT_REMEMBER_OPTIONS); auth_packet = conn->protocol->m.get_auth_packet(conn->protocol, FALSE TSRMLS_CC); if (!auth_packet) { @@ -1863,6 +1889,7 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_close)(MYSQLND_CONN_DATA * const conn TSR enum_func_status ret = PASS; MYSQLND_NET * net = conn->net; php_stream * net_stream = net->data->m.get_stream(net TSRMLS_CC); + enum mysqlnd_connection_state state; DBG_ENTER("mysqlnd_send_close"); DBG_INF_FMT("conn=%llu net->data->stream->abstract=%p", conn->thread_id, net_stream? net_stream->abstract:NULL); @@ -1873,7 +1900,9 @@ MYSQLND_METHOD(mysqlnd_conn_data, send_close)(MYSQLND_CONN_DATA * const conn TSR MYSQLND_DEC_CONN_STATISTIC(conn->stats, STAT_OPENED_PERSISTENT_CONNECTIONS); } } - switch (CONN_GET_STATE(conn)) { + state = CONN_GET_STATE(conn); + DBG_INF_FMT("state=%u", state); + switch (state) { case CONN_READY: DBG_INF("Connection clean, sending COM_QUIT"); if (net_stream) { diff --git a/ext/mysqlnd/mysqlnd_enum_n_def.h b/ext/mysqlnd/mysqlnd_enum_n_def.h index e1fc5f8f01f..3212c778a8f 100644 --- a/ext/mysqlnd/mysqlnd_enum_n_def.h +++ b/ext/mysqlnd/mysqlnd_enum_n_def.h @@ -100,7 +100,9 @@ #define CLIENT_CONNECT_ATTRS (1UL << 20) /* Client supports connection attributes */ #define CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA (1UL << 21) /* Enable authentication response packet to be larger than 255 bytes. */ #define CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS (1UL << 22) /* Don't close the connection for a connection with expired password. */ -#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30) +#define CLIENT_SESSION_TRACK (1UL << 23) /* Extended OK */ +#define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30) +#define CLIENT_REMEMBER_OPTIONS (1UL << 31) #define MYSQLND_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_TRANSACTIONS | \ CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION | \ @@ -214,23 +216,23 @@ typedef enum mysqlnd_protocol_type typedef enum mysqlnd_field_types { - MYSQL_TYPE_DECIMAL, - MYSQL_TYPE_TINY, - MYSQL_TYPE_SHORT, - MYSQL_TYPE_LONG, - MYSQL_TYPE_FLOAT, - MYSQL_TYPE_DOUBLE, - MYSQL_TYPE_NULL, - MYSQL_TYPE_TIMESTAMP, - MYSQL_TYPE_LONGLONG, - MYSQL_TYPE_INT24, - MYSQL_TYPE_DATE, - MYSQL_TYPE_TIME, - MYSQL_TYPE_DATETIME, - MYSQL_TYPE_YEAR, - MYSQL_TYPE_NEWDATE, - MYSQL_TYPE_VARCHAR, - MYSQL_TYPE_BIT, + MYSQL_TYPE_DECIMAL = 0, + MYSQL_TYPE_TINY = 1, + MYSQL_TYPE_SHORT = 2, + MYSQL_TYPE_LONG = 3, + MYSQL_TYPE_FLOAT = 4, + MYSQL_TYPE_DOUBLE = 5, + MYSQL_TYPE_NULL = 6, + MYSQL_TYPE_TIMESTAMP= 7, + MYSQL_TYPE_LONGLONG = 8, + MYSQL_TYPE_INT24 = 9, + MYSQL_TYPE_DATE = 10, + MYSQL_TYPE_TIME = 11, + MYSQL_TYPE_DATETIME = 12, + MYSQL_TYPE_YEAR = 13, + MYSQL_TYPE_NEWDATE = 14, + MYSQL_TYPE_VARCHAR = 15, + MYSQL_TYPE_BIT = 16, MYSQL_TYPE_NEWDECIMAL=246, MYSQL_TYPE_ENUM=247, MYSQL_TYPE_SET=248, @@ -322,23 +324,23 @@ typedef enum mysqlnd_server_option typedef enum mysqlnd_connection_state { CONN_ALLOCED = 0, - CONN_READY, - CONN_QUERY_SENT, - CONN_SENDING_LOAD_DATA, - CONN_FETCHING_DATA, - CONN_NEXT_RESULT_PENDING, - CONN_QUIT_SENT /* object is "destroyed" at this stage */ + CONN_READY = 1, + CONN_QUERY_SENT = 2, + CONN_SENDING_LOAD_DATA = 3, + CONN_FETCHING_DATA = 4, + CONN_NEXT_RESULT_PENDING = 5, + CONN_QUIT_SENT = 6 /* object is "destroyed" at this stage */ } enum_mysqlnd_connection_state; typedef enum mysqlnd_stmt_state { MYSQLND_STMT_INITTED = 0, - MYSQLND_STMT_PREPARED, - MYSQLND_STMT_EXECUTED, - MYSQLND_STMT_WAITING_USE_OR_STORE, - MYSQLND_STMT_USE_OR_STORE_CALLED, - MYSQLND_STMT_USER_FETCHING /* fetch_row_buff or fetch_row_unbuf */ + MYSQLND_STMT_PREPARED = 1, + MYSQLND_STMT_EXECUTED = 2, + MYSQLND_STMT_WAITING_USE_OR_STORE = 3, + MYSQLND_STMT_USE_OR_STORE_CALLED = 4, + MYSQLND_STMT_USER_FETCHING = 5/* fetch_row_buff or fetch_row_unbuf */ } enum_mysqlnd_stmt_state; @@ -596,9 +598,10 @@ enum php_mysqlnd_server_command COM_STMT_RESET = 26, COM_SET_OPTION = 27, COM_STMT_FETCH = 28, - COM_DAEMON, - COM_BINLOG_DUMP_GTID, - COM_RESET_CONNECTION, + COM_DAEMON = 29, + COM_BINLOG_DUMP_GTID = 30, + COM_RESET_CONNECTION = 31, + COM_STMT_EXECUTE_BATCH = 32, COM_END }; diff --git a/ext/mysqlnd/mysqlnd_net.c b/ext/mysqlnd/mysqlnd_net.c index fadcbd87f6b..a0beed8b977 100644 --- a/ext/mysqlnd/mysqlnd_net.c +++ b/ext/mysqlnd/mysqlnd_net.c @@ -99,6 +99,7 @@ MYSQLND_METHOD(mysqlnd_net, network_write_ex)(MYSQLND_NET * const net, const zen { size_t ret; DBG_ENTER("mysqlnd_net::network_write_ex"); + DBG_INF_FMT("sending %u bytes", count); ret = php_stream_write(net->data->m.get_stream(net TSRMLS_CC), (char *)buffer, count); DBG_RETURN(ret); } @@ -357,6 +358,10 @@ MYSQLND_METHOD(mysqlnd_net, send_ex)(MYSQLND_NET * const net, zend_uchar * const do { to_be_sent = MIN(left, MYSQLND_MAX_PACKET_SIZE); + DBG_INF_FMT("to_be_sent=%u", to_be_sent); + DBG_INF_FMT("packets_sent=%u", packets_sent); + DBG_INF_FMT("compressed_envelope_packet_no=%u", net->compressed_envelope_packet_no); + DBG_INF_FMT("packet_no=%u", net->packet_no); #ifdef MYSQLND_COMPRESSION_ENABLED if (net->data->compressed == TRUE) { /* here we need to compress the data and then write it, first comes the compressed header */ From 23554aae193bb52eed2484f3fabd099b34d4f687 Mon Sep 17 00:00:00 2001 From: Andrey Hristov Date: Wed, 16 Jul 2014 19:50:28 +0300 Subject: [PATCH 16/23] Easier to read --- ext/mysqlnd/mysqlnd.c | 48 +++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c index 2254fd92bc7..5d5e77f9bb7 100644 --- a/ext/mysqlnd/mysqlnd.c +++ b/ext/mysqlnd/mysqlnd.c @@ -450,30 +450,30 @@ mysqlnd_switch_to_ssl_if_needed( MYSQLND_PACKET_AUTH * auth_packet; DBG_ENTER("mysqlnd_switch_to_ssl_if_needed"); DBG_INF_FMT("client_capability_flags=%lu", mysql_flags); - DBG_INF_FMT("CLIENT_LONG_PASSWORD= %d", mysql_flags & CLIENT_LONG_PASSWORD); - DBG_INF_FMT("CLIENT_FOUND_ROWS= %d", mysql_flags & CLIENT_FOUND_ROWS); - DBG_INF_FMT("CLIENT_LONG_FLAG= %d", mysql_flags & CLIENT_LONG_FLAG); - DBG_INF_FMT("CLIENT_NO_SCHEMA= %d", mysql_flags & CLIENT_NO_SCHEMA); - DBG_INF_FMT("CLIENT_COMPRESS= %d", mysql_flags & CLIENT_COMPRESS); - DBG_INF_FMT("CLIENT_ODBC= %d", mysql_flags & CLIENT_ODBC); - DBG_INF_FMT("CLIENT_LOCAL_FILES= %d", mysql_flags & CLIENT_LOCAL_FILES); - DBG_INF_FMT("CLIENT_IGNORE_SPACE= %d", mysql_flags & CLIENT_IGNORE_SPACE); - DBG_INF_FMT("CLIENT_PROTOCOL_41= %d", mysql_flags & CLIENT_PROTOCOL_41); - DBG_INF_FMT("CLIENT_INTERACTIVE= %d", mysql_flags & CLIENT_INTERACTIVE); - DBG_INF_FMT("CLIENT_SSL= %d", mysql_flags & CLIENT_SSL); - DBG_INF_FMT("CLIENT_IGNORE_SIGPIPE= %d", mysql_flags & CLIENT_IGNORE_SIGPIPE); - DBG_INF_FMT("CLIENT_TRANSACTIONS= %d", mysql_flags & CLIENT_TRANSACTIONS); - DBG_INF_FMT("CLIENT_RESERVED= %d", mysql_flags & CLIENT_RESERVED); - DBG_INF_FMT("CLIENT_SECURE_CONNECTION=%d", mysql_flags & CLIENT_SECURE_CONNECTION); - DBG_INF_FMT("CLIENT_MULTI_STATEMENTS=%d", mysql_flags & CLIENT_MULTI_STATEMENTS); - DBG_INF_FMT("CLIENT_MULTI_RESULTS= %d", mysql_flags & CLIENT_MULTI_RESULTS); - DBG_INF_FMT("CLIENT_PS_MULTI_RESULTS=%d", mysql_flags & CLIENT_PS_MULTI_RESULTS); - DBG_INF_FMT("CLIENT_CONNECT_ATTRS= %d", mysql_flags & CLIENT_PLUGIN_AUTH); - DBG_INF_FMT("CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA= %d", mysql_flags & CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA); - DBG_INF_FMT("CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS= %d", mysql_flags & CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS); - DBG_INF_FMT("CLIENT_SESSION_TRACK= %d", mysql_flags & CLIENT_SESSION_TRACK); - DBG_INF_FMT("CLIENT_SSL_VERIFY_SERVER_CERT= %d", mysql_flags & CLIENT_SSL_VERIFY_SERVER_CERT); - DBG_INF_FMT("CLIENT_REMEMBER_OPTIONS= %d", mysql_flags & CLIENT_REMEMBER_OPTIONS); + DBG_INF_FMT("CLIENT_LONG_PASSWORD= %d", mysql_flags & CLIENT_LONG_PASSWORD? 1:0); + DBG_INF_FMT("CLIENT_FOUND_ROWS= %d", mysql_flags & CLIENT_FOUND_ROWS? 1:0); + DBG_INF_FMT("CLIENT_LONG_FLAG= %d", mysql_flags & CLIENT_LONG_FLAG? 1:0); + DBG_INF_FMT("CLIENT_NO_SCHEMA= %d", mysql_flags & CLIENT_NO_SCHEMA? 1:0); + DBG_INF_FMT("CLIENT_COMPRESS= %d", mysql_flags & CLIENT_COMPRESS? 1:0); + DBG_INF_FMT("CLIENT_ODBC= %d", mysql_flags & CLIENT_ODBC? 1:0); + DBG_INF_FMT("CLIENT_LOCAL_FILES= %d", mysql_flags & CLIENT_LOCAL_FILES? 1:0); + DBG_INF_FMT("CLIENT_IGNORE_SPACE= %d", mysql_flags & CLIENT_IGNORE_SPACE? 1:0); + DBG_INF_FMT("CLIENT_PROTOCOL_41= %d", mysql_flags & CLIENT_PROTOCOL_41? 1:0); + DBG_INF_FMT("CLIENT_INTERACTIVE= %d", mysql_flags & CLIENT_INTERACTIVE? 1:0); + DBG_INF_FMT("CLIENT_SSL= %d", mysql_flags & CLIENT_SSL? 1:0); + DBG_INF_FMT("CLIENT_IGNORE_SIGPIPE= %d", mysql_flags & CLIENT_IGNORE_SIGPIPE? 1:0); + DBG_INF_FMT("CLIENT_TRANSACTIONS= %d", mysql_flags & CLIENT_TRANSACTIONS? 1:0); + DBG_INF_FMT("CLIENT_RESERVED= %d", mysql_flags & CLIENT_RESERVED? 1:0); + DBG_INF_FMT("CLIENT_SECURE_CONNECTION=%d", mysql_flags & CLIENT_SECURE_CONNECTION? 1:0); + DBG_INF_FMT("CLIENT_MULTI_STATEMENTS=%d", mysql_flags & CLIENT_MULTI_STATEMENTS? 1:0); + DBG_INF_FMT("CLIENT_MULTI_RESULTS= %d", mysql_flags & CLIENT_MULTI_RESULTS? 1:0); + DBG_INF_FMT("CLIENT_PS_MULTI_RESULTS=%d", mysql_flags & CLIENT_PS_MULTI_RESULTS? 1:0); + DBG_INF_FMT("CLIENT_CONNECT_ATTRS= %d", mysql_flags & CLIENT_PLUGIN_AUTH? 1:0); + DBG_INF_FMT("CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA= %d", mysql_flags & CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA? 1:0); + DBG_INF_FMT("CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS= %d", mysql_flags & CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS? 1:0); + DBG_INF_FMT("CLIENT_SESSION_TRACK= %d", mysql_flags & CLIENT_SESSION_TRACK? 1:0); + DBG_INF_FMT("CLIENT_SSL_VERIFY_SERVER_CERT= %d", mysql_flags & CLIENT_SSL_VERIFY_SERVER_CERT? 1:0); + DBG_INF_FMT("CLIENT_REMEMBER_OPTIONS= %d", mysql_flags & CLIENT_REMEMBER_OPTIONS? 1:0); auth_packet = conn->protocol->m.get_auth_packet(conn->protocol, FALSE TSRMLS_CC); if (!auth_packet) { From ce2ad0df180f09a52e255535f3a74558eb01e9a2 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 16 Jul 2014 21:33:07 +0200 Subject: [PATCH 17/23] basic routines for phpize mode to - generate headers for non core ext defines - generate js deps for non core exts --- win32/build/confutils.js | 137 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) diff --git a/win32/build/confutils.js b/win32/build/confutils.js index ef50dfe08ec..419d0bab5fa 100644 --- a/win32/build/confutils.js +++ b/win32/build/confutils.js @@ -1636,6 +1636,9 @@ function generate_files() generate_internal_functions(); generate_config_h(); generate_phpize(); + } else { + generate_config_pickle_h(); + generate_ext_pickle(); } STDOUT.WriteLine("Done."); STDOUT.WriteBlankLines(1); @@ -1648,6 +1651,140 @@ function generate_files() } } +function generate_ext_pickle() +{ + var content; + var DEPS = null; + var dest; + var deps_lines = new Array(); + + var build_var_name = function(name) { + return "PHP_" + name.toUpperCase(); + } + + STDOUT.WriteLine("Generating pickle deps"); + dest = PHP_DIR + "/script/"; + + if (!FSO.FolderExists(dest)) { + FSO.CreateFolder(dest); + } + + if (FSO.FileExists(dest + "/ext_pickle.js")) { + DEPS = FSO.OpenTextFile(dest + "/ext_pickle.js", 1); + + while (!DEPS.AtEndOfStream) { + var ln = DEPS.ReadLine(); + var found = false; + + for (var i in extensions_enabled) { + var reg0 = new RegExp(build_var_name(extensions_enabled[i][0]) + "\s*=.+", "g"); + var reg1 = new RegExp(build_var_name(extensions_enabled[i][0]) + "_SHARED" + "\s*=.+", "g"); + + if (ln.match(reg1) || ln.match(reg0)) { + found = true; + break; + } + } + + if (!found) { + deps_lines.push(ln); + } + } + } + + for (var i in extensions_enabled) { + deps_lines.push(build_var_name(extensions_enabled[i][0]) + "=true;"); + deps_lines.push(build_var_name(extensions_enabled[i][0]) + "_SHARED=" + (extensions_enabled[i][1] == 'shared' ? 'true' : 'false') + ";"); + } + + if (!!DEPS) { + DEPS.Close(); + DEPS = null; + } + + /* Replace the ext_pickle.js with the new content */ + DEPS = FSO.CreateTextFile(dest + "/ext_pickle.js", true); + + for (var j in deps_lines) { + DEPS.WriteLine(deps_lines[j]); + } + + DEPS.Close(); +} + +function generate_config_pickle_h() +{ + var outfile = null; + var lines = new Array(); + var keys = (new VBArray(configure_hdr.Keys())).toArray(); + dest = PHP_DIR + "/include/main"; + + var ignore_key = function(key) { + var ignores = [ "CONFIGURE_COMMAND", "PHP_COMPILER_ID", "COMPILER", "ARCHITECTURE", "HAVE_STRNLEN", "PHP_DIR" ]; + + for (var k in ignores) { + if (ignores[k] == key) { + return true; + } + } + + return false; + } + + + STDOUT.WriteLine("Generating main/config.pickle.h"); + + if (FSO.FileExists(dest + "/config.pickle.h")) { + outfile = FSO.OpenTextFile(dest + "/config.pickle.h", 1); + + while (!outfile.AtEndOfStream) { + var found = false; + var ln = outfile.ReadLine(); + + for (var i in keys) { + var reg = new RegExp("#define[\s ]+" + keys[i] + "[\s ]*.*", "g"); + + if (ln.match(reg)) { + found = true; + break; + } + } + + if (!found) { + lines.push(ln); + } + } + } + + for (var i in keys) { + var item = configure_hdr.Item(keys[i]); + + if (ignore_key(keys[i])) { + continue; + } + + /* XXX fix comment handling */ + /*if (!lines[j].match(/^#define.+/g)) { + continue; + }*/ + + lines.push("#define " + keys[i] + " " + item[0]); + } + + if (outfile) { + outfile.Close(); + outfile = null; + } + + outfile = FSO.CreateTextFile(dest + "/config.pickle.h", true); + + for (var k in lines) { + outfile.WriteLine(lines[k]); + } + + outfile.Close(); +} + function generate_config_h() { var infile, outfile; From b3c608911143d75c5edb5fc57259c3de4c0a00a3 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Thu, 17 Jul 2014 09:25:57 +0200 Subject: [PATCH 18/23] implemented force usage of generated .h and .js deps in phpize mode --- win32/build/confutils.js | 3 +++ win32/build/phpize.js.in | 3 +++ 2 files changed, 6 insertions(+) diff --git a/win32/build/confutils.js b/win32/build/confutils.js index 419d0bab5fa..2bc72ee0806 100644 --- a/win32/build/confutils.js +++ b/win32/build/confutils.js @@ -1339,6 +1339,9 @@ function EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir) DEFINE('CFLAGS_' + EXT + '_OBJ', '$(CFLAGS_PHP) $(CFLAGS_' + EXT + ')'); } + if (MODE_PHPIZE && FSO.FileExists(PHP_DIR + "/include/main/config.pickle.h")) { + cflags = "/FI main/config.pickle.h " + cflags; + } ADD_FLAG("CFLAGS_" + EXT, cflags); if (PHP_DSP != "no") { diff --git a/win32/build/phpize.js.in b/win32/build/phpize.js.in index 235c0816a33..a5c83bde01e 100644 --- a/win32/build/phpize.js.in +++ b/win32/build/phpize.js.in @@ -210,6 +210,9 @@ C.WriteLine("var MODE_PHPIZE = true;"); C.WriteLine("var PHP_DIR = " + '"' + PHP_DIR.replace(new RegExp('(["\\\\])', "g"), '\\$1') + '"'); C.Write(file_get_contents(PHP_DIR + "//script//ext_deps.js")); +if (FSO.FileExists(PHP_DIR + "/script/ext_pickle.js")) { + C.Write(file_get_contents(PHP_DIR + "//script//ext_pickle.js")); +} C.Write(file_get_contents(PHP_DIR + "/script/confutils.js")); C.Write(file_get_contents(PHP_DIR + "/script/config.phpize.js")); From f0a1e410a3c23e6ac8c4d10a0218a3c40190b64a Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Thu, 17 Jul 2014 21:47:15 +0200 Subject: [PATCH 19/23] implemented usage of the non core ext deps in phpize mode --- win32/build/Makefile.phpize | 2 +- win32/build/confutils.js | 22 ++++++++++++++++++++-- win32/build/phpize.js.in | 1 + 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/win32/build/Makefile.phpize b/win32/build/Makefile.phpize index 44faf7d54b9..1f92f7716c4 100644 --- a/win32/build/Makefile.phpize +++ b/win32/build/Makefile.phpize @@ -34,5 +34,5 @@ _VC_MANIFEST_EMBED_EXE= if exist $@.manifest $(MT) -nologo -manifest $@.manifest _VC_MANIFEST_EMBED_DLL= if exist $@.manifest $(MT) -nologo -manifest $@.manifest -outputresource:$@;2 !endif -install: build-headers +install: build-headers build-bins diff --git a/win32/build/confutils.js b/win32/build/confutils.js index 2bc72ee0806..1c61316fb96 100644 --- a/win32/build/confutils.js +++ b/win32/build/confutils.js @@ -1201,9 +1201,14 @@ function ADD_EXTENSION_DEP(extname, dependson, optional) ERROR("static " + extname + " cannot depend on shared " + dependson); } - ADD_FLAG("LDFLAGS_" + EXT, "/libpath:$(BUILD_DIR)"); ADD_FLAG("LIBS_" + EXT, "php_" + dependson + ".lib"); - ADD_FLAG("DEPS_" + EXT, "$(BUILD_DIR)\\php_" + dependson + ".lib"); + if (MODE_PHPIZE) { + ADD_FLAG("LDFLAGS_" + EXT, "/libpath:$(BUILD_DIR_DEV)\\lib"); + ADD_FLAG("DEPS_" + EXT, "$(BUILD_DIR_DEV)\\lib\\php_" + dependson + ".lib"); + } else { + ADD_FLAG("LDFLAGS_" + EXT, "/libpath:$(BUILD_DIR)"); + ADD_FLAG("DEPS_" + EXT, "$(BUILD_DIR)\\php_" + dependson + ".lib"); + } } else { @@ -1342,6 +1347,9 @@ function EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir) if (MODE_PHPIZE && FSO.FileExists(PHP_DIR + "/include/main/config.pickle.h")) { cflags = "/FI main/config.pickle.h " + cflags; } + if (MODE_PHPIZE && FSO.FileExists(PHP_DIR + "/include/main/config.pickle.h")) { + cflags = "/FI main/config.pickle.h " + cflags; + } ADD_FLAG("CFLAGS_" + EXT, cflags); if (PHP_DSP != "no") { @@ -1940,6 +1948,16 @@ function generate_makefile() } } MF.WriteLine(" @for %D in ($(INSTALL_HEADERS_DIR)) do @copy %D*.h $(BUILD_DIR_DEV)\\include\\%D /y >nul"); + if (MODE_PHPIZE) { + MF.WriteBlankLines(1); + MF.WriteLine("build-bins:"); + for (var i in extensions_enabled) { + var lib = "php_" + extensions_enabled[i][0] + ".lib"; + var dll = "php_" + extensions_enabled[i][0] + ".dll"; + MF.WriteLine(" @copy $(BUILD_DIR)\\" + lib + " $(BUILD_DIR_DEV)\\lib\\" + lib); + //MF.WriteLine(" @copy $(BUILD_DIR)\\" + dll + " $(PHP_PREFIX)\\" + dll); + } + } TF.Close(); MF.WriteBlankLines(2); diff --git a/win32/build/phpize.js.in b/win32/build/phpize.js.in index a5c83bde01e..3178804212e 100644 --- a/win32/build/phpize.js.in +++ b/win32/build/phpize.js.in @@ -208,6 +208,7 @@ STDOUT.WriteLine(PHP_DIR); C.WriteLine("/* This file automatically generated from script/confutils.js */"); C.WriteLine("var MODE_PHPIZE = true;"); C.WriteLine("var PHP_DIR = " + '"' + PHP_DIR.replace(new RegExp('(["\\\\])', "g"), '\\$1') + '"'); +C.WriteLine("var PHP_PREFIX = " + '"' + PHP_PREFIX.replace(new RegExp('(["\\\\])', "g"), '\\$1') + '"'); C.Write(file_get_contents(PHP_DIR + "//script//ext_deps.js")); if (FSO.FileExists(PHP_DIR + "/script/ext_pickle.js")) { From 2dff153b23c7c874e8c98e1f3bda2e00cde0bd71 Mon Sep 17 00:00:00 2001 From: Lior Kaplan Date: Thu, 17 Jul 2014 22:58:36 +0300 Subject: [PATCH 20/23] Enable build without atoll (e.g old AIX flavours) --- ext/date/php_date.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 595b0b040b9..4259bf0fcba 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -50,7 +50,11 @@ static inline long long php_date_llabs( long long i ) { return i >= 0 ? i : -i; int st = snprintf(s, len, "%lld", i); \ s[st] = '\0'; \ } while (0); +#ifdef HAVE_ATOLL # define DATE_A64I(i, s) i = atoll(s) +#else +# define DATE_A64I(i, s) i = strtoll(s, NULL, 10) +#endif #endif /* {{{ arginfo */ From 84673485f5b3134e357f6ec90bbaab9ffec11a68 Mon Sep 17 00:00:00 2001 From: Lior Kaplan Date: Thu, 17 Jul 2014 23:10:08 +0300 Subject: [PATCH 21/23] Enable build without atoll (e.g old AIX flavours) --- main/rfc1867.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/main/rfc1867.c b/main/rfc1867.c index b1011e21cbc..c93472f5a12 100644 --- a/main/rfc1867.c +++ b/main/rfc1867.c @@ -903,7 +903,11 @@ SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler) /* {{{ */ } if (!strcasecmp(param, "MAX_FILE_SIZE")) { +#ifdef HAVE_ATOLL max_file_size = atoll(value); +#else + max_file_size = strtoll(value, NULL, 10); +#endif } efree(param); From de433d4c4756e18515e4b394298f9e3e60009692 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Fri, 18 Jul 2014 15:45:31 +0800 Subject: [PATCH 22/23] Fixed bug #66608 (Incorrect behavior with nested "finally" blocks) --- NEWS | 2 ++ Zend/tests/bug66608.phpt | 39 +++++++++++++++++++++++++++++++++++++++ Zend/zend_compile.h | 3 +++ Zend/zend_opcode.c | 25 ++++++++++++++++++++++++- Zend/zend_vm_def.h | 9 ++++++--- Zend/zend_vm_execute.h | 9 ++++++--- 6 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 Zend/tests/bug66608.phpt diff --git a/NEWS b/NEWS index cea00519e28..44c09d0d7d5 100644 --- a/NEWS +++ b/NEWS @@ -17,6 +17,8 @@ PHP NEWS . Fixed bug #67151 (strtr with empty array crashes). (Nikita) . Fixed bug #67407 (Windows 8.1/Server 2012 R2 reported as Windows 8/Server 2012). (Christian Wenz) + . Fixed bug #66608 (Incorrect behavior with nested "finally" blocks). + (Laruence, Dmitry) . Implemented FR #34407 (ucwords and Title Case). (Tjerk) - CLI server: diff --git a/Zend/tests/bug66608.phpt b/Zend/tests/bug66608.phpt new file mode 100644 index 00000000000..6329506d066 --- /dev/null +++ b/Zend/tests/bug66608.phpt @@ -0,0 +1,39 @@ +--TEST-- +Bug #66608 (Incorrect behavior with nested "finally" blocks) +--FILE-- +op2); opline->op1.opline_num = op_array->try_catch_array[i].finally_op; if (op_array->try_catch_array[i].catch_op) { - opline->extended_value = 1; + opline->extended_value = ZEND_FAST_CALL_FOR_CATCH; opline->op2.opline_num = op_array->try_catch_array[i].catch_op; } @@ -603,6 +603,26 @@ static void zend_resolve_finally_ret(zend_op_array *op_array, zend_uint op_num T } } +static void zend_resolve_fast_call(zend_op_array *op_array, zend_uint op_num TSRMLS_DC) +{ + int i; + zend_uint finally_op_num = 0; + + for (i = 0; i < op_array->last_try_catch; i++) { + if (op_array->try_catch_array[i].finally_op > op_num) { + break; + } + if (op_num < op_array->try_catch_array[i].finally_end) { + finally_op_num = op_array->try_catch_array[i].finally_op; + } + } + + if (finally_op_num) { + op_array->opcodes[op_num].extended_value = ZEND_FAST_CALL_FOR_FINALLY; + op_array->opcodes[op_num].op2.opline_num = finally_op_num - 2; /* it must be ZEND_FAST_CALL */ + } +} + static void zend_resolve_finally_calls(zend_op_array *op_array TSRMLS_DC) { zend_uint i; @@ -644,6 +664,9 @@ static void zend_resolve_finally_calls(zend_op_array *op_array TSRMLS_DC) case ZEND_JMP: zend_resolve_finally_call(op_array, i, opline->op1.opline_num TSRMLS_CC); break; + case ZEND_FAST_CALL: + zend_resolve_fast_call(op_array, i TSRMLS_CC); + break; case ZEND_FAST_RET: zend_resolve_finally_ret(op_array, i TSRMLS_CC); break; diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index f76e52961ae..161dd774424 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -5396,13 +5396,13 @@ ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ANY, ANY) { USE_OPLINE - if (opline->extended_value && + if ((opline->extended_value & ZEND_FAST_CALL_FOR_CATCH) && UNEXPECTED(EG(prev_exception) != NULL)) { /* in case of unhandled exception jump to catch block instead of finally */ ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.opline_num]); ZEND_VM_CONTINUE(); } - EX(fast_ret) = opline + 1; + EX(fast_ret) = opline; ZEND_VM_SET_OPCODE(opline->op1.jmp_addr); ZEND_VM_CONTINUE(); } @@ -5410,7 +5410,10 @@ ZEND_VM_HANDLER(162, ZEND_FAST_CALL, ANY, ANY) ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, ANY) { if (EX(fast_ret)) { - ZEND_VM_SET_OPCODE(EX(fast_ret)); + ZEND_VM_SET_OPCODE(EX(fast_ret) + 1); + if ((EX(fast_ret)->extended_value & ZEND_FAST_CALL_FOR_FINALLY)) { + EX(fast_ret) = &EX(op_array)->opcodes[EX(fast_ret)->op2.opline_num]; + } ZEND_VM_CONTINUE(); } else { /* special case for unhandled exceptions */ diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 94026a08efc..c94c2d755b3 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1137,13 +1137,13 @@ static int ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE - if (opline->extended_value && + if ((opline->extended_value & ZEND_FAST_CALL_FOR_CATCH) && UNEXPECTED(EG(prev_exception) != NULL)) { /* in case of unhandled exception jump to catch block instead of finally */ ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->op2.opline_num]); ZEND_VM_CONTINUE(); } - EX(fast_ret) = opline + 1; + EX(fast_ret) = opline; ZEND_VM_SET_OPCODE(opline->op1.jmp_addr); ZEND_VM_CONTINUE(); } @@ -1151,7 +1151,10 @@ static int ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) static int ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (EX(fast_ret)) { - ZEND_VM_SET_OPCODE(EX(fast_ret)); + ZEND_VM_SET_OPCODE(EX(fast_ret) + 1); + if ((EX(fast_ret)->extended_value & ZEND_FAST_CALL_FOR_FINALLY)) { + EX(fast_ret) = &EX(op_array)->opcodes[EX(fast_ret)->op2.opline_num]; + } ZEND_VM_CONTINUE(); } else { /* special case for unhandled exceptions */ From 0d01891799280a015b5e8527296294aa9af81b68 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Fri, 18 Jul 2014 15:51:10 +0800 Subject: [PATCH 23/23] Update NEWS --- NEWS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS b/NEWS index 0b1d95fbfd8..7bd2eda384c 100644 --- a/NEWS +++ b/NEWS @@ -8,6 +8,8 @@ PHP NEWS . Fixed bug #67151 (strtr with empty array crashes). (Nikita) . Fixed bug #67407 (Windows 8.1/Server 2012 R2 reported as Windows 8/Server 2012). (Christian Wenz) + . Fixed bug #66608 (Incorrect behavior with nested "finally" blocks). + (Laruence, Dmitry) . Implemented FR #34407 (ucwords and Title Case). (Tjerk) - CLI server: