mirror of
https://github.com/php/php-src.git
synced 2026-04-28 18:53:33 +02:00
Merge remote-tracking branch 'origin/PHP-7.2' into PHP-7.2
This commit is contained in:
+1
-1
@@ -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!
|
||||
|
||||
@@ -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;
|
||||
|
||||
+1
-8
@@ -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);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Binary file not shown.
@@ -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
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -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
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user