diff options
author | Johannes Schlüter <johannes@php.net> | 2019-02-12 14:59:27 +0100 |
---|---|---|
committer | Johannes Schlüter <johannes@php.net> | 2019-02-12 14:59:27 +0100 |
commit | 56dba3f3d05bbe7eedb31f9c85e1a5b55c99ceec (patch) | |
tree | 12e8fe28f51ea34790116d7decac44b62049c7b7 | |
parent | 83d2bc9b6df2f827217f1bc3298fb83cfe2ac210 (diff) | |
parent | 07877c46e3057bc679766898d50529be812243f3 (diff) | |
download | php-git-56dba3f3d05bbe7eedb31f9c85e1a5b55c99ceec.tar.gz |
Merge remote-tracking branch 'origin/PHP-7.2' into PHP-7.2
-rw-r--r-- | .appveyor.yml | 2 | ||||
-rw-r--r-- | Zend/zend_constants.c | 4 | ||||
-rw-r--r-- | ext/date/php_date.c | 9 | ||||
-rw-r--r-- | ext/exif/exif.c | 4 | ||||
-rw-r--r-- | ext/exif/tests/bug77564/bug77564.jpg | bin | 0 -> 73 bytes | |||
-rw-r--r-- | ext/exif/tests/bug77564/bug77564.phpt | 18 | ||||
-rw-r--r-- | ext/opcache/ZendAccelerator.c | 68 | ||||
-rw-r--r-- | ext/opcache/ZendAccelerator.h | 13 | ||||
-rw-r--r-- | ext/opcache/config.m4 | 57 | ||||
-rw-r--r-- | ext/opcache/zend_shared_alloc.c | 21 | ||||
-rw-r--r-- | ext/pcntl/pcntl.c | 6 | ||||
-rw-r--r-- | ext/pcntl/tests/pcntl_realtime_signal.phpt | 20 | ||||
-rw-r--r-- | ext/standard/http.c | 9 | ||||
-rw-r--r-- | ext/standard/tests/general_functions/bug72920.phpt | 11 | ||||
-rw-r--r-- | ext/standard/tests/strings/bug77608.phpt | 11 | ||||
-rw-r--r-- | tests/classes/constants_visibility_002.phpt | 6 | ||||
-rw-r--r-- | tests/classes/constants_visibility_003.phpt | 6 | ||||
-rw-r--r-- | tests/classes/constants_visibility_008.phpt | 12 |
18 files changed, 138 insertions, 139 deletions
diff --git a/.appveyor.yml b/.appveyor.yml index deeccfa066..c3ad49c53e 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -16,7 +16,7 @@ environment: PHP_BUILD_CACHE_BASE_DIR: c:\build-cache PHP_BUILD_OBJ_DIR: c:\obj PHP_BUILD_CACHE_SDK_DIR: c:\build-cache\sdk - PHP_BUILD_SDK_BRANCH: php-sdk-2.2.0beta1 + PHP_BUILD_SDK_BRANCH: php-sdk-2.2.0beta3 PHP_BUILD_CRT: vc15 # ext and env setup for tests #MYSQL_TEST_PASSWD: Password12! diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 14d712235a..64265d3c19 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -341,7 +341,9 @@ ZEND_API zval *zend_get_constant_ex(zend_string *cname, zend_class_entry *scope, ret_constant = NULL; } else { if (!zend_verify_const_access(c, scope)) { - zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(class_name), ZSTR_VAL(constant_name)); + if ((flags & ZEND_FETCH_CLASS_SILENT) == 0) { + zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(class_name), ZSTR_VAL(constant_name)); + } goto failure; } ret_constant = &c->value; diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 1e136e00b6..c8479b5164 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -5278,7 +5278,6 @@ PHP_METHOD(DatePeriod, __wakeup) /* {{{ date_period_read_property */ static zval *date_period_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv) { - zval *zv; if (type != BP_VAR_IS && type != BP_VAR_R) { zend_throw_error(NULL, "Retrieval of DatePeriod properties for modification is unsupported"); return &EG(uninitialized_zval); @@ -5286,13 +5285,7 @@ static zval *date_period_read_property(zval *object, zval *member, int type, voi Z_OBJPROP_P(object); /* build properties hash table */ - zv = std_object_handlers.read_property(object, member, type, cache_slot, rv); - if (Z_TYPE_P(zv) == IS_OBJECT && Z_OBJ_HANDLER_P(zv, clone_obj)) { - /* defensive copy */ - ZVAL_OBJ(zv, Z_OBJ_HANDLER_P(zv, clone_obj)(zv)); - } - - return zv; + return std_object_handlers.read_property(object, member, type, cache_slot, rv); } /* }}} */ diff --git a/ext/exif/exif.c b/ext/exif/exif.c index be02c9da40..9c202196c6 100644 --- a/ext/exif/exif.c +++ b/ext/exif/exif.c @@ -3405,6 +3405,10 @@ static int exif_process_IFD_TAG(image_info_type *ImageInfo, char *dir_entry, cha break; case TAG_USERCOMMENT: + EFREE_IF(ImageInfo->UserComment); + ImageInfo->UserComment = NULL; + EFREE_IF(ImageInfo->UserCommentEncoding); + ImageInfo->UserCommentEncoding = NULL; ImageInfo->UserCommentLength = exif_process_user_comment(ImageInfo, &(ImageInfo->UserComment), &(ImageInfo->UserCommentEncoding), value_ptr, byte_count); break; diff --git a/ext/exif/tests/bug77564/bug77564.jpg b/ext/exif/tests/bug77564/bug77564.jpg Binary files differnew file mode 100644 index 0000000000..868fffd1db --- /dev/null +++ b/ext/exif/tests/bug77564/bug77564.jpg diff --git a/ext/exif/tests/bug77564/bug77564.phpt b/ext/exif/tests/bug77564/bug77564.phpt new file mode 100644 index 0000000000..2f72b3c9ac --- /dev/null +++ b/ext/exif/tests/bug77564/bug77564.phpt @@ -0,0 +1,18 @@ +--TEST-- +Bug 77564 (Memory leak in exif_process_IFD_TAG) +--SKIPIF-- +<?php if (!extension_loaded('exif')) print 'skip exif extension not available';?> +--FILE-- +<?php +var_dump(exif_read_data(dirname(__FILE__) . '/bug77564.jpg')); +?> +DONE +--EXPECTF-- + +Warning: exif_read_data(bug77564.jpg): Illegal IFD offset in %sbug77564.php on line %d + +Warning: exif_read_data(bug77564.jpg): File structure corrupted in %sbug77564.php on line %d + +Warning: exif_read_data(bug77564.jpg): Invalid JPEG file in %sbug77564.php on line %d +bool(false) +DONE diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 46a86a3109..601e3af0cf 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -230,11 +230,12 @@ static inline void accel_restart_enter(void) #ifdef ZEND_WIN32 INCREMENT(restart_in); #else -# ifdef _AIX - static FLOCK_STRUCTURE(restart_in_progress, F_WRLCK, SEEK_SET, 2, 1); -# else - static const FLOCK_STRUCTURE(restart_in_progress, F_WRLCK, SEEK_SET, 2, 1); -#endif + struct flock restart_in_progress; + + restart_in_progress.l_type = F_WRLCK; + restart_in_progress.l_whence = SEEK_SET; + restart_in_progress.l_start = 2; + restart_in_progress.l_len = 1; if (fcntl(lock_file, F_SETLK, &restart_in_progress) == -1) { zend_accel_error(ACCEL_LOG_DEBUG, "RestartC(+1): %s (%d)", strerror(errno), errno); @@ -249,11 +250,12 @@ static inline void accel_restart_leave(void) ZCSG(restart_in_progress) = 0; DECREMENT(restart_in); #else -# ifdef _AIX - static FLOCK_STRUCTURE(restart_finished, F_UNLCK, SEEK_SET, 2, 1); -# else - static const FLOCK_STRUCTURE(restart_finished, F_UNLCK, SEEK_SET, 2, 1); -# endif + struct flock restart_finished; + + restart_finished.l_type = F_UNLCK; + restart_finished.l_whence = SEEK_SET; + restart_finished.l_start = 2; + restart_finished.l_len = 1; ZCSG(restart_in_progress) = 0; if (fcntl(lock_file, F_SETLK, &restart_finished) == -1) { @@ -266,7 +268,12 @@ static inline int accel_restart_is_active(void) { if (ZCSG(restart_in_progress)) { #ifndef ZEND_WIN32 - FLOCK_STRUCTURE(restart_check, F_WRLCK, SEEK_SET, 2, 1); + struct flock restart_check; + + restart_check.l_type = F_WRLCK; + restart_check.l_whence = SEEK_SET; + restart_check.l_start = 2; + restart_check.l_len = 1; if (fcntl(lock_file, F_GETLK, &restart_check) == -1) { zend_accel_error(ACCEL_LOG_DEBUG, "RestartC: %s (%d)", strerror(errno), errno); @@ -291,11 +298,12 @@ static inline int accel_activate_add(void) #ifdef ZEND_WIN32 INCREMENT(mem_usage); #else -# ifdef _AIX - static FLOCK_STRUCTURE(mem_usage_lock, F_RDLCK, SEEK_SET, 1, 1); -# else - static const FLOCK_STRUCTURE(mem_usage_lock, F_RDLCK, SEEK_SET, 1, 1); -# endif + struct flock mem_usage_lock; + + mem_usage_lock.l_type = F_RDLCK; + mem_usage_lock.l_whence = SEEK_SET; + mem_usage_lock.l_start = 1; + mem_usage_lock.l_len = 1; if (fcntl(lock_file, F_SETLK, &mem_usage_lock) == -1) { zend_accel_error(ACCEL_LOG_DEBUG, "UpdateC(+1): %s (%d)", strerror(errno), errno); @@ -314,11 +322,12 @@ static inline void accel_deactivate_sub(void) ZCG(counted) = 0; } #else -# ifdef _AIX - static FLOCK_STRUCTURE(mem_usage_unlock, F_UNLCK, SEEK_SET, 1, 1); -# else - static const FLOCK_STRUCTURE(mem_usage_unlock, F_UNLCK, SEEK_SET, 1, 1); -# endif + struct flock mem_usage_unlock; + + mem_usage_unlock.l_type = F_UNLCK; + mem_usage_unlock.l_whence = SEEK_SET; + mem_usage_unlock.l_start = 1; + mem_usage_unlock.l_len = 1; if (fcntl(lock_file, F_SETLK, &mem_usage_unlock) == -1) { zend_accel_error(ACCEL_LOG_DEBUG, "UpdateC(-1): %s (%d)", strerror(errno), errno); @@ -331,11 +340,12 @@ static inline void accel_unlock_all(void) #ifdef ZEND_WIN32 accel_deactivate_sub(); #else -# ifdef _AIX - static FLOCK_STRUCTURE(mem_usage_unlock_all, F_UNLCK, SEEK_SET, 0, 0); -# else - static const FLOCK_STRUCTURE(mem_usage_unlock_all, F_UNLCK, SEEK_SET, 0, 0); -# endif + struct flock mem_usage_unlock_all; + + mem_usage_unlock_all.l_type = F_UNLCK; + mem_usage_unlock_all.l_whence = SEEK_SET; + mem_usage_unlock_all.l_start = 0; + mem_usage_unlock_all.l_len = 0; if (fcntl(lock_file, F_SETLK, &mem_usage_unlock_all) == -1) { zend_accel_error(ACCEL_LOG_DEBUG, "UnlockAll: %s (%d)", strerror(errno), errno); @@ -730,8 +740,12 @@ static inline int accel_is_inactive(void) return SUCCESS; } #else - FLOCK_STRUCTURE(mem_usage_check, F_WRLCK, SEEK_SET, 1, 1); + struct flock mem_usage_check; + mem_usage_check.l_type = F_WRLCK; + mem_usage_check.l_whence = SEEK_SET; + mem_usage_check.l_start = 1; + mem_usage_check.l_len = 1; mem_usage_check.l_pid = -1; if (fcntl(lock_file, F_GETLK, &mem_usage_check) == -1) { zend_accel_error(ACCEL_LOG_DEBUG, "UpdateC: %s (%d)", strerror(errno), errno); diff --git a/ext/opcache/ZendAccelerator.h b/ext/opcache/ZendAccelerator.h index 685d9e29cb..5f195ba3bc 100644 --- a/ext/opcache/ZendAccelerator.h +++ b/ext/opcache/ZendAccelerator.h @@ -89,19 +89,6 @@ /*** file locking ***/ #ifndef ZEND_WIN32 extern int lock_file; - -# if defined(HAVE_FLOCK_AIX64) -# define FLOCK_STRUCTURE(name, type, whence, start, len) \ - struct flock name = {type, whence, 0, 0, 0, start, len } -# elif defined(HAVE_FLOCK_BSD) -# define FLOCK_STRUCTURE(name, type, whence, start, len) \ - struct flock name = {start, len, -1, type, whence} -# elif defined(HAVE_FLOCK_LINUX) -# define FLOCK_STRUCTURE(name, type, whence, start, len) \ - struct flock name = {type, whence, start, len} -# else -# error "Don't know how to define struct flock" -# endif #endif #if defined(HAVE_OPCACHE_FILE_CACHE) && defined(ZEND_WIN32) diff --git a/ext/opcache/config.m4 b/ext/opcache/config.m4 index ec14487c12..aa50d56116 100644 --- a/ext/opcache/config.m4 +++ b/ext/opcache/config.m4 @@ -343,63 +343,6 @@ int main() { msg=yes,msg=no,msg=no) AC_MSG_RESULT([$msg]) -flock_type=unknown -AC_MSG_CHECKING(for struct flock layout) - -if test "$flock_type" = "unknown"; then -AC_TRY_RUN([ - #include <fcntl.h> - struct flock lock = { 1, 2, 3, 4, 5, 6, 7 }; - int main() { - if(lock.l_type == 1 && lock.l_whence == 2 && lock.l_start == 6 && lock.l_len== 7) { - return 0; - } - return 1; - } -], [ - flock_type=aix64 - AC_DEFINE([HAVE_FLOCK_AIX64], [], [Struct flock is 64-bit AIX-type]) -], []) -fi - -if test "$flock_type" = "unknown"; then -AC_TRY_RUN([ - #include <fcntl.h> - struct flock lock = { 1, 2, 3, 4, 5 }; - int main() { - if(lock.l_type == 1 && lock.l_whence == 2 && lock.l_start == 3 && lock.l_len == 4) { - return 0; - } - return 1; - } -], [ - flock_type=linux - AC_DEFINE([HAVE_FLOCK_LINUX], [], [Struct flock is Linux-type]) -], []) -fi - -if test "$flock_type" = "unknown"; then -AC_TRY_RUN([ - #include <fcntl.h> - struct flock lock = { 1, 2, 3, 4, 5 }; - int main() { - if(lock.l_start == 1 && lock.l_len == 2 && lock.l_type == 4 && lock.l_whence == 5) { - return 0; - } - return 1; - } -], [ - flock_type=bsd - AC_DEFINE([HAVE_FLOCK_BSD], [], [Struct flock is BSD-type]) -], []) -fi - -AC_MSG_RESULT([$flock_type]) - -if test "$flock_type" = "unknown"; then - AC_MSG_ERROR([Don't know how to define struct flock on this system[,] set --enable-opcache=no]) -fi - PHP_NEW_EXTENSION(opcache, ZendAccelerator.c \ zend_accelerator_blacklist.c \ diff --git a/ext/opcache/zend_shared_alloc.c b/ext/opcache/zend_shared_alloc.c index 249d99022a..f2415feaff 100644 --- a/ext/opcache/zend_shared_alloc.c +++ b/ext/opcache/zend_shared_alloc.c @@ -371,15 +371,15 @@ void zend_shared_alloc_safe_unlock(void) } } -#ifndef ZEND_WIN32 -/* name l_type l_whence l_start l_len */ -static FLOCK_STRUCTURE(mem_write_lock, F_WRLCK, SEEK_SET, 0, 1); -static FLOCK_STRUCTURE(mem_write_unlock, F_UNLCK, SEEK_SET, 0, 1); -#endif - void zend_shared_alloc_lock(void) { #ifndef ZEND_WIN32 + struct flock mem_write_lock; + + mem_write_lock.l_type = F_WRLCK; + mem_write_lock.l_whence = SEEK_SET; + mem_write_lock.l_start = 0; + mem_write_lock.l_len = 1; #ifdef ZTS tsrm_mutex_lock(zts_lock); @@ -410,6 +410,15 @@ void zend_shared_alloc_lock(void) void zend_shared_alloc_unlock(void) { +#ifndef ZEND_WIN32 + struct flock mem_write_unlock; + + mem_write_unlock.l_type = F_UNLCK; + mem_write_unlock.l_whence = SEEK_SET; + mem_write_unlock.l_start = 0; + mem_write_unlock.l_len = 1; +#endif + ZCG(locked) = 0; #ifndef ZEND_WIN32 diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c index 228111d351..36d2a672ab 100644 --- a/ext/pcntl/pcntl.c +++ b/ext/pcntl/pcntl.c @@ -1276,6 +1276,12 @@ static void pcntl_siginfo_to_zval(int signo, siginfo_t *siginfo, zval *user_sigi break; #endif } +#if defined(SIGRTMIN) && defined(SIGRTMAX) + if (SIGRTMIN <= signo && signo <= SIGRTMAX) { + add_assoc_long_ex(user_siginfo, "pid", sizeof("pid")-1, siginfo->si_pid); + add_assoc_long_ex(user_siginfo, "uid", sizeof("uid")-1, siginfo->si_uid); + } +#endif } } /* }}} */ diff --git a/ext/pcntl/tests/pcntl_realtime_signal.phpt b/ext/pcntl/tests/pcntl_realtime_signal.phpt new file mode 100644 index 0000000000..212f15e03b --- /dev/null +++ b/ext/pcntl/tests/pcntl_realtime_signal.phpt @@ -0,0 +1,20 @@ +--TEST-- +pcntl_signal() context of realtime signal +--SKIPIF-- +<?php if (!defined('SIGRTMIN')) die("skip realtime signal not supported"); ?> +<?php if (!extension_loaded("pcntl")) print "skip"; ?> +<?php if (!extension_loaded("posix")) die("skip posix extension not available"); ?> +--FILE-- +<?php + +pcntl_signal(SIGRTMIN, function ($signo, $siginfo) { + printf("got realtime signal from %s, ruid:%s\n", $siginfo['pid'] ?? '', $siginfo['uid'] ?? ''); +}); +posix_kill(posix_getpid(), SIGRTMIN); +pcntl_signal_dispatch(); + +echo "ok\n"; +?> +--EXPECTF-- +%rgot realtime signal from \d+, ruid:\d+%r +ok diff --git a/ext/standard/http.c b/ext/standard/http.c index f73d4cac7e..c11c940abe 100644 --- a/ext/standard/http.c +++ b/ext/standard/http.c @@ -192,15 +192,6 @@ PHPAPI int php_url_encode_hash_ex(HashTable *ht, smart_str *formstr, case IS_TRUE: smart_str_appendl(formstr, "1", sizeof("1")-1); break; - case IS_DOUBLE: - { - char *ekey; - size_t ekey_len; - ekey_len = spprintf(&ekey, 0, "%.*G", (int) EG(precision), Z_DVAL_P(zdata)); - smart_str_appendl(formstr, ekey, ekey_len); - efree(ekey); - } - break; default: { zend_string *ekey; diff --git a/ext/standard/tests/general_functions/bug72920.phpt b/ext/standard/tests/general_functions/bug72920.phpt index b5ca4760c3..8ba4d26713 100644 --- a/ext/standard/tests/general_functions/bug72920.phpt +++ b/ext/standard/tests/general_functions/bug72920.phpt @@ -6,10 +6,7 @@ class Foo { private const C1 = "a"; } -try { - var_dump(constant('Foo::C1')); -} catch (Error $e) { - var_dump($e->getMessage()); -} ---EXPECT-- -string(35) "Cannot access private const Foo::C1" +var_dump(constant('Foo::C1')); +--EXPECTF-- +Warning: constant(): Couldn't find constant Foo::C1 in %s on line %d +NULL diff --git a/ext/standard/tests/strings/bug77608.phpt b/ext/standard/tests/strings/bug77608.phpt new file mode 100644 index 0000000000..77bfb74a87 --- /dev/null +++ b/ext/standard/tests/strings/bug77608.phpt @@ -0,0 +1,11 @@ +--TEST-- +Bug #77608: http_build_query doesn't encode "+" in a float number +--FILE-- +<?php + +$a = ["x" => 1E+14, "y" => "1E+14"]; +echo http_build_query($a); + +?> +--EXPECT-- +x=1.0E%2B14&y=1E%2B14 diff --git a/tests/classes/constants_visibility_002.phpt b/tests/classes/constants_visibility_002.phpt index 6ec9901269..4e0ecb1aa2 100644 --- a/tests/classes/constants_visibility_002.phpt +++ b/tests/classes/constants_visibility_002.phpt @@ -21,8 +21,4 @@ constant('A::protectedConst'); string(14) "protectedConst" string(14) "protectedConst" -Fatal error: Uncaught Error: Cannot access protected const A::protectedConst in %s:14 -Stack trace: -#0 %s(14): constant('A::protectedCon...') -#1 {main} - thrown in %s on line 14 +Warning: constant(): Couldn't find constant A::protectedConst in %s on line %d diff --git a/tests/classes/constants_visibility_003.phpt b/tests/classes/constants_visibility_003.phpt index 9c7bcfb21c..7c961695ed 100644 --- a/tests/classes/constants_visibility_003.phpt +++ b/tests/classes/constants_visibility_003.phpt @@ -21,8 +21,4 @@ constant('A::privateConst'); string(12) "privateConst" string(12) "privateConst" -Fatal error: Uncaught Error: Cannot access private const A::privateConst in %s:14 -Stack trace: -#0 %s(14): constant('A::privateConst') -#1 {main} - thrown in %s on line 14 +Warning: constant(): Couldn't find constant A::privateConst in %s on line %d diff --git a/tests/classes/constants_visibility_008.phpt b/tests/classes/constants_visibility_008.phpt new file mode 100644 index 0000000000..f24b70cf59 --- /dev/null +++ b/tests/classes/constants_visibility_008.phpt @@ -0,0 +1,12 @@ +--TEST-- +Defined on private constant should not raise exception +--FILE-- +<?php + +class Foo +{ + private const BAR = 1; +} +echo (int)defined('Foo::BAR'); +--EXPECTF-- +0 |