Re: [PHP-CVS] com php-src: fix (signed) integer overflow (part of bug #52550: Zend/zend_hash.h
In that code path, it's possible that idx == LONG_MAX+1. Casting that value to a signed long is undefined behavior (since it overflows), which means that the compiler can do bad things with that. With this patch we will basically do the same operation, but over an unsigned long, thus avoiding the undefined behavior of signed integers. This patch prevents miscompilations by more aggressive compilers. Nuno -Original Message- Hi! Could you please explain this commit? idx is ulong, why this change improves anything? Commit:91ce8041a3e85594e81466a528f8d55cdc164c1f Author:Nuno Lopes Mon, 2 Jul 2012 01:31:40 -0400 Parents: be4053cea0462c9de5396641f4e4fa2f56f5a675 Branches: PHP-5.4 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=91ce8041a3e85594e81466a528f8d55cdc164c1f Log: fix (signed) integer overflow (part of bug #52550 Bugs: https://bugs.php.net/52550 Changed paths: M Zend/zend_hash.h Diff: diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index 84ca1de..5c3b1cd 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -330,7 +330,7 @@ END_EXTERN_C() if (idx-1 > LONG_MAX) { /* overflow */ \ break; \ } \ - idx = (ulong)(-(long)idx); \ + idx = -idx; \ } else if (idx > LONG_MAX) { /* overflow */ \ break; \ } \ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP-CVS] com php-src: fix (signed) integer overflow (part of bug #52550: Zend/zend_hash.h
Hi! Could you please explain this commit? idx is ulong, why this change improves anything? > Commit:91ce8041a3e85594e81466a528f8d55cdc164c1f > Author:Nuno Lopes Mon, 2 Jul 2012 01:31:40 -0400 > Parents: be4053cea0462c9de5396641f4e4fa2f56f5a675 > Branches: PHP-5.4 > > Link: > http://git.php.net/?p=php-src.git;a=commitdiff;h=91ce8041a3e85594e81466a528f8d55cdc164c1f > > Log: > fix (signed) integer overflow (part of bug #52550 > > Bugs: > https://bugs.php.net/52550 > > Changed paths: > M Zend/zend_hash.h > > > Diff: > diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h > index 84ca1de..5c3b1cd 100644 > --- a/Zend/zend_hash.h > +++ b/Zend/zend_hash.h > @@ -330,7 +330,7 @@ END_EXTERN_C() > if (idx-1 > LONG_MAX) { /* overflow */ > \ > break; > \ > } > \ > - idx = (ulong)(-(long)idx); > \ > + idx = -idx; > \ > } else if (idx > LONG_MAX) { /* overflow */ > \ > break; > \ > } > \ > > -- Stanislav Malyshev, Software Architect SugarCRM: http://www.sugarcrm.com/ (408)454-6900 ext. 227 -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: fix (signed) integer overflow (part of bug #52550: Zend/zend_hash.h
Commit:91ce8041a3e85594e81466a528f8d55cdc164c1f Author:Nuno Lopes Mon, 2 Jul 2012 01:31:40 -0400 Parents: be4053cea0462c9de5396641f4e4fa2f56f5a675 Branches: PHP-5.4 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=91ce8041a3e85594e81466a528f8d55cdc164c1f Log: fix (signed) integer overflow (part of bug #52550 Bugs: https://bugs.php.net/52550 Changed paths: M Zend/zend_hash.h Diff: diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index 84ca1de..5c3b1cd 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -330,7 +330,7 @@ END_EXTERN_C() if (idx-1 > LONG_MAX) { /* overflow */ \ break; \ } \ - idx = (ulong)(-(long)idx); \ + idx = -idx; \ } else if (idx > LONG_MAX) { /* overflow */ \ break; \ } \ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: fix (signed) integer overflow (part of bug #52550: Zend/zend_hash.h
Commit:d80ff391899f7aead3b9b9c6c084adba8a8203ba Author:Nuno Lopes Mon, 2 Jul 2012 01:31:40 -0400 Parents: 250393f92523fffe643df06a1de2101fd50a327e Branches: PHP-5.3 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=d80ff391899f7aead3b9b9c6c084adba8a8203ba Log: fix (signed) integer overflow (part of bug #52550 Bugs: https://bugs.php.net/52550 Changed paths: M Zend/zend_hash.h Diff: diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index ad0f9f7..a763fc7 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -331,7 +331,7 @@ END_EXTERN_C() if (idx-1 > LONG_MAX) { /* overflow */ \ break; \ } \ - idx = (ulong)(-(long)idx); \ + idx = -idx; \ } else if (idx > LONG_MAX) { /* overflow */ \ break; \ } \ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: fix (signed) integer overflow (part of bug #52550: Zend/zend_hash.h
Commit:f2bf98a589b63ea6e604036eb6ab02aba5fce5ef Author:Nuno Lopes Mon, 2 Jul 2012 01:31:40 -0400 Parents: 8d81a03e434e5476c4c7832b8bcafcaa31fb474e Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=f2bf98a589b63ea6e604036eb6ab02aba5fce5ef Log: fix (signed) integer overflow (part of bug #52550 Bugs: https://bugs.php.net/52550 Changed paths: M Zend/zend_hash.h Diff: diff --git a/Zend/zend_hash.h b/Zend/zend_hash.h index 84ca1de..5c3b1cd 100644 --- a/Zend/zend_hash.h +++ b/Zend/zend_hash.h @@ -330,7 +330,7 @@ END_EXTERN_C() if (idx-1 > LONG_MAX) { /* overflow */ \ break; \ } \ - idx = (ulong)(-(long)idx); \ + idx = -idx; \ } else if (idx > LONG_MAX) { /* overflow */ \ break; \ } \ -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: Fixed bug #62433 (Inconsistent behavior of RecursiveDirectoryIterator to dot files).: NEWS ext/spl/spl_directory.c ext/spl/tests/bug62433.phpt
Commit:be4053cea0462c9de5396641f4e4fa2f56f5a675 Author:Xinchen Hui Mon, 2 Jul 2012 11:33:38 +0800 Parents: ff41bfc87882440cfde0ed5673bd6c3f2347c892 Branches: PHP-5.4 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=be4053cea0462c9de5396641f4e4fa2f56f5a675 Log: Fixed bug #62433 (Inconsistent behavior of RecursiveDirectoryIterator to dot files). Bugs: https://bugs.php.net/62433 Changed paths: M NEWS M ext/spl/spl_directory.c A ext/spl/tests/bug62433.phpt Diff: diff --git a/NEWS b/NEWS index 6dd1feb..70a8eb9 100644 --- a/NEWS +++ b/NEWS @@ -76,6 +76,8 @@ PHP NEWS . Fixed bug #62025 (__ss_family was changed on AIX 5.3). (Felipe) - SPL: + . Fixed bug #62433 (Inconsistent behavior of RecursiveDirectoryIterator to +dot files). (Laruence) . Fixed bug #62262 (RecursiveArrayIterator does not implement Countable). (Nikita Popov) diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index dbae3e2..0fcbd31 100755 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -1432,6 +1432,7 @@ SPL_METHOD(FilesystemIterator, __construct) SPL_METHOD(FilesystemIterator, rewind) { spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC); + int skip_dots = SPL_HAS_FLAG(intern->flags, SPL_FILE_DIR_SKIPDOTS); if (zend_parse_parameters_none() == FAILURE) { return; @@ -1443,7 +1444,7 @@ SPL_METHOD(FilesystemIterator, rewind) } do { spl_filesystem_dir_read(intern TSRMLS_CC); - } while (spl_filesystem_is_dot(intern->u.dir.entry.d_name)); + } while (skip_dots && spl_filesystem_is_dot(intern->u.dir.entry.d_name)); } /* }}} */ diff --git a/ext/spl/tests/bug62433.phpt b/ext/spl/tests/bug62433.phpt new file mode 100644 index 000..86b5df8 --- /dev/null +++ b/ext/spl/tests/bug62433.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug #62433 Inconsistent behavior of RecursiveDirectoryIterator to dot files (. and ..) +--FILE-- + +--EXPECT-- +bool(true) +bool(true) +bool(false) +bool(false) -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: Fix accidential change of php_version.h: main/php_version.h
Commit:ff41bfc87882440cfde0ed5673bd6c3f2347c892 Author:Nikita Popov Sun, 1 Jul 2012 17:05:19 +0200 Parents: b7903f9778a57fda71867f9661505f635d602067 Branches: PHP-5.4 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=ff41bfc87882440cfde0ed5673bd6c3f2347c892 Log: Fix accidential change of php_version.h For some reason the merge reverts changed the version :/ Changed paths: M main/php_version.h Diff: diff --git a/main/php_version.h b/main/php_version.h index 6b49f40..4b7709c 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -5,4 +5,4 @@ #define PHP_RELEASE_VERSION 5 #define PHP_EXTRA_VERSION "-dev" #define PHP_VERSION "5.4.5-dev" -#define PHP_VERSION_ID 50404 +#define PHP_VERSION_ID 50405 -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
[PHP-CVS] com php-src: Revert JSON merges to 5.4: ext/json/JSON_parser.h ext/json/json.c ext/json/php_json.h ext/json/tests/003.phpt ext/json/tests/004.phpt ext/json/tests/007.phpt ext/json/tests/bug4
Commit:b7903f9778a57fda71867f9661505f635d602067 Author:Nikita Popov Sun, 1 Jul 2012 16:38:26 +0200 Parents: 9cbd7a24b6d1d61e51fd6d32669dcfa1df30c883 Branches: PHP-5.4 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=b7903f9778a57fda71867f9661505f635d602067 Log: Revert JSON merges to 5.4 This reverts the following merge commits (-m 1): 405ebfcd182a39f0960ff7d7055d49053d3e0316 d372b33c9b941be9a795bf3705bd22dc5f6092c3 36fa17a5fae84ab332366a202f0a709279a2466a Changed paths: M ext/json/JSON_parser.h M ext/json/json.c M ext/json/php_json.h M ext/json/tests/003.phpt M ext/json/tests/004.phpt M ext/json/tests/007.phpt M ext/json/tests/bug43941.phpt M ext/json/tests/bug53946.phpt M ext/json/tests/bug54058.phpt D ext/json/tests/bug61537.phpt M ext/json/tests/bug61978.phpt D ext/json/tests/inf_nan_error.phpt M ext/json/tests/json_encode_basic.phpt M ext/json/tests/pass001.1.phpt M ext/json/tests/pass001.phpt D ext/json/tests/unsupported_type_error.phpt M main/php_version.h diff --git a/ext/json/JSON_parser.h b/ext/json/JSON_parser.h index 8671765..541664b 100644 --- a/ext/json/JSON_parser.h +++ b/ext/json/JSON_parser.h @@ -25,10 +25,7 @@ enum error_codes { PHP_JSON_ERROR_STATE_MISMATCH, PHP_JSON_ERROR_CTRL_CHAR, PHP_JSON_ERROR_SYNTAX, -PHP_JSON_ERROR_UTF8, -PHP_JSON_ERROR_RECURSION, -PHP_JSON_ERROR_INF_OR_NAN, -PHP_JSON_ERROR_UNSUPPORTED_TYPE +PHP_JSON_ERROR_UTF8 }; extern JSON_parser new_JSON_parser(int depth); diff --git a/ext/json/json.c b/ext/json/json.c index 9669047..786b21a 100644 --- a/ext/json/json.c +++ b/ext/json/json.c @@ -35,7 +35,6 @@ static PHP_MINFO_FUNCTION(json); static PHP_FUNCTION(json_encode); static PHP_FUNCTION(json_decode); static PHP_FUNCTION(json_last_error); -static PHP_FUNCTION(json_last_error_msg); static const char digits[] = "0123456789abcdef"; @@ -58,9 +57,6 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_json_last_error, 0) ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_json_last_error_msg, 0) -ZEND_END_ARG_INFO() /* }}} */ /* {{{ json_functions[] */ @@ -68,7 +64,6 @@ static const zend_function_entry json_functions[] = { PHP_FE(json_encode, arginfo_json_encode) PHP_FE(json_decode, arginfo_json_decode) PHP_FE(json_last_error, arginfo_json_last_error) - PHP_FE(json_last_error_msg, arginfo_json_last_error_msg) PHP_FE_END }; /* }}} */ @@ -101,7 +96,6 @@ static PHP_MINIT_FUNCTION(json) REGISTER_LONG_CONSTANT("JSON_UNESCAPED_SLASHES", PHP_JSON_UNESCAPED_SLASHES, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_PRETTY_PRINT", PHP_JSON_PRETTY_PRINT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_UNESCAPED_UNICODE", PHP_JSON_UNESCAPED_UNICODE, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_PARTIAL_OUTPUT_ON_ERROR", PHP_JSON_PARTIAL_OUTPUT_ON_ERROR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_NONE", PHP_JSON_ERROR_NONE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_DEPTH", PHP_JSON_ERROR_DEPTH, CONST_CS | CONST_PERSISTENT); @@ -109,9 +103,6 @@ static PHP_MINIT_FUNCTION(json) REGISTER_LONG_CONSTANT("JSON_ERROR_CTRL_CHAR", PHP_JSON_ERROR_CTRL_CHAR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_SYNTAX", PHP_JSON_ERROR_SYNTAX, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_UTF8", PHP_JSON_ERROR_UTF8, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_RECURSION", PHP_JSON_ERROR_RECURSION, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_INF_OR_NAN", PHP_JSON_ERROR_INF_OR_NAN, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_UNSUPPORTED_TYPE", PHP_JSON_ERROR_UNSUPPORTED_TYPE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_OBJECT_AS_ARRAY", PHP_JSON_OBJECT_AS_ARRAY, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_BIGINT_AS_STRING", PHP_JSON_BIGINT_AS_STRING, CONST_CS | CONST_PERSISTENT); @@ -240,7 +231,7 @@ static void json_encode_array(smart_str *buf, zval **val, int options TSRMLS_DC) } if (myht && myht->nApplyCount > 1) { - JSON_G(error_code) = PHP_JSON_ERROR_RECURSION; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "recursion detected"); smart_str_appendl(buf, "null", 4); return; } @@ -382,7 +373,7 @@ static void json_escape_string(smart_str *buf, char *s, int len, int options TSR smart_str_appendl(buf, tmp, l); efree(tmp); } else { - JSON_G(error_code) = PHP_JSON_ERROR_INF_OR_NAN; +
[PHP-CVS] com php-src: Revert JSON changes to PHP 5.3: ext/json/JSON_parser.h ext/json/json.c ext/json/tests/003.phpt ext/json/tests/004.phpt ext/json/tests/007.phpt ext/json/tests/bug54058.phpt ext/j
Commit:250393f92523fffe643df06a1de2101fd50a327e Author:Nikita Popov Sun, 1 Jul 2012 16:28:57 +0200 Parents: 5f31c81f0754ac031c2c5c056cb48ff4153fea81 Branches: PHP-5.3 PHP-5.4 master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=250393f92523fffe643df06a1de2101fd50a327e Log: Revert JSON changes to PHP 5.3 This reverts the following commits: 974324676b2436f159f42d9241c569f813471684 4662151ea7d7b6920d115cf2a2d6e9d4232727a3 84fe2cc890e49f40bac7c3ba74b3cfc6dc4cef2f This does not revert the JSON changes released in PHP 5.3.14. Changed paths: M ext/json/JSON_parser.h M ext/json/json.c M ext/json/tests/003.phpt M ext/json/tests/004.phpt M ext/json/tests/007.phpt M ext/json/tests/bug54058.phpt M ext/json/tests/bug61537.phpt D ext/json/tests/inf_nan_error.phpt M ext/json/tests/json_encode_basic.phpt M ext/json/tests/pass001.1.phpt M ext/json/tests/pass001.phpt D ext/json/tests/unsupported_type_error.phpt diff --git a/ext/json/JSON_parser.h b/ext/json/JSON_parser.h index 5037344..746190b 100644 --- a/ext/json/JSON_parser.h +++ b/ext/json/JSON_parser.h @@ -24,10 +24,7 @@ enum error_codes { PHP_JSON_ERROR_STATE_MISMATCH, PHP_JSON_ERROR_CTRL_CHAR, PHP_JSON_ERROR_SYNTAX, -PHP_JSON_ERROR_UTF8, -PHP_JSON_ERROR_RECURSION, -PHP_JSON_ERROR_INF_OR_NAN, -PHP_JSON_ERROR_UNSUPPORTED_TYPE +PHP_JSON_ERROR_UTF8 }; extern JSON_parser new_JSON_parser(int depth); diff --git a/ext/json/json.c b/ext/json/json.c index 4d29a66..ce2cf43 100644 --- a/ext/json/json.c +++ b/ext/json/json.c @@ -34,7 +34,6 @@ static PHP_MINFO_FUNCTION(json); static PHP_FUNCTION(json_encode); static PHP_FUNCTION(json_decode); static PHP_FUNCTION(json_last_error); -static PHP_FUNCTION(json_last_error_msg); static const char digits[] = "0123456789abcdef"; @@ -54,9 +53,6 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_json_last_error, 0) ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_json_last_error_msg, 0) -ZEND_END_ARG_INFO() /* }}} */ /* {{{ json_functions[] */ @@ -64,7 +60,6 @@ static const function_entry json_functions[] = { PHP_FE(json_encode, arginfo_json_encode) PHP_FE(json_decode, arginfo_json_decode) PHP_FE(json_last_error, arginfo_json_last_error) - PHP_FE(json_last_error_msg, arginfo_json_last_error_msg) PHP_FE_END }; /* }}} */ @@ -86,9 +81,6 @@ static PHP_MINIT_FUNCTION(json) REGISTER_LONG_CONSTANT("JSON_ERROR_CTRL_CHAR", PHP_JSON_ERROR_CTRL_CHAR, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_SYNTAX", PHP_JSON_ERROR_SYNTAX, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("JSON_ERROR_UTF8", PHP_JSON_ERROR_UTF8, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_RECURSION", PHP_JSON_ERROR_RECURSION, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_INF_OR_NAN", PHP_JSON_ERROR_INF_OR_NAN, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("JSON_ERROR_UNSUPPORTED_TYPE", PHP_JSON_ERROR_UNSUPPORTED_TYPE, CONST_CS | CONST_PERSISTENT); return SUCCESS; } @@ -189,7 +181,7 @@ static void json_encode_array(smart_str *buf, zval **val, int options TSRMLS_DC) } if (myht && myht->nApplyCount > 1) { - JSON_G(error_code) = PHP_JSON_ERROR_RECURSION; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "recursion detected"); smart_str_appendl(buf, "null", 4); return; } @@ -311,7 +303,7 @@ static void json_escape_string(smart_str *buf, char *s, int len, int options TSR smart_str_appendl(buf, tmp, l); efree(tmp); } else { - JSON_G(error_code) = PHP_JSON_ERROR_INF_OR_NAN; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "double %.9g does not conform to the JSON spec, encoded as 0", d); smart_str_appendc(buf, '0'); } } @@ -329,6 +321,7 @@ static void json_escape_string(smart_str *buf, char *s, int len, int options TSR } if (len < 0) { JSON_G(error_code) = PHP_JSON_ERROR_UTF8; + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid UTF-8 sequence in argument"); smart_str_appendl(buf, "null", 4); } else { smart_str_appendl(buf, "\"\"", 2); @@ -467,7 +460,7 @@ PHP_JSON_API void php_json_encode(smart_str *buf, zval *val, int options TSRMLS_ smart_str_appendl(buf, d, len); efree(d); } else { - JSON_G(error_code) = PHP_JSON_ERROR_INF_OR