mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-12 19:50:50 +00:00
Compare commits
87
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ae79c52c12 | ||
|
|
579f10c0a1 | ||
|
|
c031d6de68 | ||
|
|
f5431a6483 | ||
|
|
5bfade4d40 | ||
|
|
a3af1b664b | ||
|
|
2e7290f046 | ||
|
|
073e155f4e | ||
|
|
6234e16611 | ||
|
|
64c52c805f | ||
|
|
bbabab1cdc | ||
|
|
06db864426 | ||
|
|
09b5aef876 | ||
|
|
1e6195c6bc | ||
|
|
8836fdd4ed | ||
|
|
b01a607d73 | ||
|
|
1f677c5eff | ||
|
|
959d93086a | ||
|
|
8d5904f10f | ||
|
|
980a2c283d | ||
|
|
209015012f | ||
|
|
74004a160d | ||
|
|
294c3cdbdc | ||
|
|
5576aee84f | ||
|
|
d449c527bc | ||
|
|
63730a6981 | ||
|
|
c5d5aacc79 | ||
|
|
f6e2a1f9b9 | ||
|
|
b3cf4a2dc0 | ||
|
|
332cf3cf56 | ||
|
|
1b5b21539f | ||
|
|
666db28ef2 | ||
|
|
2fbfd6f5a7 | ||
|
|
47595abd40 | ||
|
|
0b27669c5a | ||
|
|
40142c084a | ||
|
|
417e58f332 | ||
|
|
459e20eec0 | ||
|
|
c30937d2bd | ||
|
|
c6b9ee82a4 | ||
|
|
dd1b80e48f | ||
|
|
5ce2cc5d36 | ||
|
|
e74af70780 | ||
|
|
9c259329f7 | ||
|
|
d03e8e0e87 | ||
|
|
4401f56eef | ||
|
|
6ef7c6358f | ||
|
|
b7e910e969 | ||
|
|
ab57205019 | ||
|
|
a02b3fd4b0 | ||
|
|
ff724aadfb | ||
|
|
be58583ced | ||
|
|
1ef817d796 | ||
|
|
e39876bae2 | ||
|
|
6fe551d086 | ||
|
|
1674bd9b15 | ||
|
|
69168b4d0c | ||
|
|
02f762f146 | ||
|
|
738729274f | ||
|
|
72bbde5e78 | ||
|
|
29f0493075 | ||
|
|
0f60a746e4 | ||
|
|
735a7c6a56 | ||
|
|
94e7c770ba | ||
|
|
26abfc8bc9 | ||
|
|
ec4350e4c8 | ||
|
|
3e971e7d5c | ||
|
|
b148ef4496 | ||
|
|
ad8a73dd55 | ||
|
|
ceefc0947a | ||
|
|
2928e412e6 | ||
|
|
770571bce9 | ||
|
|
6cdf477254 | ||
|
|
5784b8f8e6 | ||
|
|
ee573eba67 | ||
|
|
724e98498a | ||
|
|
62062dcd0e | ||
|
|
dfe6fdaa72 | ||
|
|
8d09c84bd3 | ||
|
|
955303ddc8 | ||
|
|
2a0e037c0d | ||
|
|
9876b2c2cf | ||
|
|
5ea2b70645 | ||
|
|
29711264a8 | ||
|
|
dbf30365aa | ||
|
|
9cb8cb4797 | ||
|
|
8a884d628b |
No files matched your search
@@ -1,5 +1,34 @@
|
||||
PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
29 Oct 2015, PHP 7.0.0 RC 6
|
||||
|
||||
- Core:
|
||||
. Fixed bug #70748 (Segfault in ini_lex () at Zend/zend_ini_scanner.l).
|
||||
(Laruence)
|
||||
. Fixed bug #70689 (Exception handler does not work as expected). (Laruence)
|
||||
. Fixed bug #70430 (Stack buffer overflow in zend_language_parser()). (Nikita)
|
||||
. Fixed bug #70782 (null ptr deref and segfault (zend_get_class_fetch_type)).
|
||||
(Nikita)
|
||||
. Fixed bug #70785 (Infinite loop due to exception during identical
|
||||
comparison). (Laruence)
|
||||
|
||||
- Opcache:
|
||||
. Fixed bug #70724 (Undefined Symbols from opcache.so on Mac OS X 10.10).
|
||||
(Laruence)
|
||||
|
||||
- PDO_DBlib:
|
||||
. Fixed bug #69757 (Segmentation fault on nextRowset).
|
||||
(miracle at rpz dot name)
|
||||
|
||||
- SOAP:
|
||||
. Fixed bug #70715 (Segmentation fault inside soap client). (Laruence)
|
||||
. Fixed bug #70709 (SOAP Client generates Segfault). (Laruence)
|
||||
|
||||
- SPL:
|
||||
. Fixed bug #70730 (Incorrect ArrayObject serialization if unset is called
|
||||
in serialize()). (Laruence)
|
||||
|
||||
|
||||
15 Oct 2015, PHP 7.0.0 RC 5
|
||||
|
||||
- Core:
|
||||
|
||||
@@ -556,6 +556,10 @@ Other
|
||||
. Added ability to move PHP code pages (PHP TEXT segment) into HUGE pages.
|
||||
It's possible to enable/disable this feature in php.ini through
|
||||
opcache.huge_code_pages=0/1. OS should be configured to provide huge pages.
|
||||
. Added Windows only opcache.file_cache_fallback=1 ini option, which implies
|
||||
the implemented fallback mechanism. When OPcache was not able to reattach
|
||||
the shared memory segment to the desired address and opcache.file_cache
|
||||
is on, opcache.file_cache_only=1 will be automatically enforced.
|
||||
|
||||
- OpenSSL
|
||||
. Added "alpn_protocols" SSL context option allowing encrypted client/server
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
--TEST--
|
||||
Bug #70430: Stack buffer overflow in zend_language_parser()
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$"*** Testing function() : ***\n";
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Parse error: syntax error, unexpected '"*** Testing function() : ***' (T_CONSTANT_ENCAPSED_STRING), expecting variable (T_VARIABLE) or '{' or '$' in %s on line %d
|
||||
@@ -0,0 +1,22 @@
|
||||
--TEST--
|
||||
Bug #70689 (Exception handler does not work as expected)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function foo($foo) {
|
||||
echo "Executing foo\n";
|
||||
}
|
||||
|
||||
set_error_handler(function($errno, $errstr) {
|
||||
throw new Exception($errstr);
|
||||
});
|
||||
|
||||
try {
|
||||
foo();
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage(), "\n";
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Missing argument 1 for foo(), called in %sbug70689.php on line %d and defined
|
||||
@@ -0,0 +1,20 @@
|
||||
--TEST--
|
||||
Bug #70748 (Segfault in ini_lex () at Zend/zend_ini_scanner.l)
|
||||
--FILE--
|
||||
<?php
|
||||
$ini = '[${ ';
|
||||
|
||||
$ini_file = __DIR__ . "/bug70748.ini";
|
||||
|
||||
file_put_contents($ini_file, $ini);
|
||||
|
||||
var_dump(parse_ini_file($ini_file));
|
||||
?>
|
||||
--CLEAN--
|
||||
<?php
|
||||
unlink(__DIR__ . "bug70748.ini");
|
||||
?>
|
||||
--EXPECTF--
|
||||
Warning: syntax error, unexpected $end, expecting '}' in %sbug70748.ini on line %d
|
||||
in %sbug70748.php on line %d
|
||||
bool(false)
|
||||
@@ -0,0 +1,10 @@
|
||||
--TEST--
|
||||
Bug #70782: null ptr deref and segfault (zend_get_class_fetch_type)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
(-0)::$prop;
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Illegal class name in %s on line %d
|
||||
@@ -0,0 +1,25 @@
|
||||
--TEST--
|
||||
Bug #70785 (Infinite loop due to exception during identical comparison)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
set_error_handler(function($no, $msg) {
|
||||
throw new Exception($msg);
|
||||
});
|
||||
|
||||
try {
|
||||
if ($a === null) { // ZEND_VM_SMART_BRANCH
|
||||
undefined_function('Null');
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
}
|
||||
|
||||
try {
|
||||
$c === 3; // ZEND_VM_NEXT_OPCODE
|
||||
undefined_function();
|
||||
} catch (Exception $e) {
|
||||
}
|
||||
?>
|
||||
okey
|
||||
--EXPECT--
|
||||
okey
|
||||
@@ -64,6 +64,15 @@ $tests = [
|
||||
[new DLL, null],
|
||||
[new DLL, ClsUnrelated::class],
|
||||
]],
|
||||
|
||||
[function() {}, [
|
||||
[null, null],
|
||||
[new Cls, null],
|
||||
[new Cls, 'Cls'],
|
||||
[null, 'Cls'],
|
||||
[null, 'stdClass'],
|
||||
[new stdClass, null],
|
||||
]],
|
||||
];
|
||||
|
||||
set_error_handler(function($errno, $errstr) {
|
||||
@@ -79,6 +88,9 @@ foreach ($tests as list($fn, $bindings)) {
|
||||
$c = (new ReflectionFunction($fn))->getClosure();
|
||||
$fnStr = $fn;
|
||||
}
|
||||
if ($fn instanceof Closure) {
|
||||
$fnStr = "(function() {})";
|
||||
}
|
||||
|
||||
echo "$fnStr()\n" . str_repeat('-', strlen($fnStr) + 2), "\n\n";
|
||||
|
||||
@@ -206,3 +218,24 @@ Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure
|
||||
|
||||
bindTo(new SplDoublyLinkedList, ClsUnrelated::class):
|
||||
Cannot rebind scope of closure created by ReflectionFunctionAbstract::getClosure()
|
||||
|
||||
(function() {})()
|
||||
-----------------
|
||||
|
||||
bindTo(null, null):
|
||||
Success!
|
||||
|
||||
bindTo(new Cls, null):
|
||||
Success!
|
||||
|
||||
bindTo(new Cls, Cls::class):
|
||||
Success!
|
||||
|
||||
bindTo(null, Cls::class):
|
||||
Success!
|
||||
|
||||
bindTo(null, stdClass::class):
|
||||
Cannot bind closure to scope of internal class stdClass
|
||||
|
||||
bindTo(new stdClass, null):
|
||||
Success!
|
||||
@@ -1462,7 +1462,15 @@ static void *zend_mm_realloc_heap(zend_mm_heap *heap, void *ptr, size_t size, si
|
||||
#if ZEND_DEBUG
|
||||
size = real_size;
|
||||
#endif
|
||||
#ifdef ZEND_WIN32
|
||||
/* On Windows we don't have ability to extend huge block in-place.
|
||||
* We allocate them with 2MB size granularuty, to avoid many
|
||||
* reallocatioons whenthey when they are extended by small peaces
|
||||
*/
|
||||
new_size = ZEND_MM_ALIGNED_SIZE_EX(size, MAX(REAL_PAGE_SIZE, ZEND_MM_CHUNK_SIZE));
|
||||
#else
|
||||
new_size = ZEND_MM_ALIGNED_SIZE_EX(size, REAL_PAGE_SIZE);
|
||||
#endif
|
||||
if (new_size == old_size) {
|
||||
#if ZEND_DEBUG
|
||||
zend_mm_change_huge_block_size(heap, ptr, new_size, real_size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
|
||||
@@ -1507,7 +1515,9 @@ static void *zend_mm_realloc_heap(zend_mm_heap *heap, void *ptr, size_t size, si
|
||||
heap->real_size += new_size - old_size;
|
||||
#endif
|
||||
#if ZEND_MM_STAT
|
||||
heap->real_peak = MAX(heap->real_peak, heap->real_size);
|
||||
heap->size += new_size - old_size;
|
||||
heap->peak = MAX(heap->peak, heap->size);
|
||||
#endif
|
||||
#if ZEND_DEBUG
|
||||
zend_mm_change_huge_block_size(heap, ptr, new_size, real_size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
|
||||
@@ -1618,9 +1628,19 @@ static void *zend_mm_realloc_heap(zend_mm_heap *heap, void *ptr, size_t size, si
|
||||
}
|
||||
|
||||
/* Naive reallocation */
|
||||
#if ZEND_MM_STAT
|
||||
do {
|
||||
size_t orig_peak = heap->peak;
|
||||
size_t orig_real_peak = heap->real_peak;
|
||||
#endif
|
||||
ret = zend_mm_alloc_heap(heap, size ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
|
||||
memcpy(ret, ptr, MIN(old_size, copy_size));
|
||||
zend_mm_free_heap(heap, ptr ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC);
|
||||
#if ZEND_MM_STAT
|
||||
heap->peak = MAX(orig_peak, heap->size);
|
||||
heap->real_peak = MAX(orig_real_peak, heap->real_size);
|
||||
} while (0);
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1710,7 +1730,15 @@ static void zend_mm_change_huge_block_size(zend_mm_heap *heap, void *ptr, size_t
|
||||
|
||||
static void *zend_mm_alloc_huge(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)
|
||||
{
|
||||
#ifdef ZEND_WIN32
|
||||
/* On Windows we don't have ability to extend huge block in-place.
|
||||
* We allocate them with 2MB size granularuty, to avoid many
|
||||
* reallocatioons whenthey when they are extended by small peaces
|
||||
*/
|
||||
size_t new_size = ZEND_MM_ALIGNED_SIZE_EX(size, MAX(REAL_PAGE_SIZE, ZEND_MM_CHUNK_SIZE));
|
||||
#else
|
||||
size_t new_size = ZEND_MM_ALIGNED_SIZE_EX(size, REAL_PAGE_SIZE);
|
||||
#endif
|
||||
void *ptr;
|
||||
|
||||
#if ZEND_MM_LIMIT
|
||||
|
||||
+9
-2
@@ -2126,8 +2126,15 @@ static zend_op *zend_compile_class_ref(znode *result, zend_ast *name_ast, int th
|
||||
zend_compile_expr(&name_node, name_ast);
|
||||
|
||||
if (name_node.op_type == IS_CONST) {
|
||||
zend_string *name = Z_STR(name_node.u.constant);
|
||||
uint32_t fetch_type = zend_get_class_fetch_type(name);
|
||||
zend_string *name;
|
||||
uint32_t fetch_type;
|
||||
|
||||
if (Z_TYPE(name_node.u.constant) != IS_STRING) {
|
||||
zend_error_noreturn(E_COMPILE_ERROR, "Illegal class name");
|
||||
}
|
||||
|
||||
name = Z_STR(name_node.u.constant);
|
||||
fetch_type = zend_get_class_fetch_type(name);
|
||||
|
||||
opline = zend_emit_op(result, ZEND_FETCH_CLASS, NULL, NULL);
|
||||
opline->extended_value = fetch_type | (throw_exception ? ZEND_FETCH_CLASS_EXCEPTION : 0);
|
||||
|
||||
+3
-5
@@ -893,7 +893,7 @@ static zend_always_inline int zend_verify_missing_arg_type(zend_function *zf, ui
|
||||
return 1;
|
||||
}
|
||||
|
||||
static ZEND_COLD int zend_verify_missing_arg(zend_execute_data *execute_data, uint32_t arg_num, void **cache_slot)
|
||||
static ZEND_COLD void zend_verify_missing_arg(zend_execute_data *execute_data, uint32_t arg_num, void **cache_slot)
|
||||
{
|
||||
if (EXPECTED(!(EX(func)->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS)) ||
|
||||
UNEXPECTED(zend_verify_missing_arg_type(EX(func), arg_num, cache_slot))) {
|
||||
@@ -907,9 +907,7 @@ static ZEND_COLD int zend_verify_missing_arg(zend_execute_data *execute_data, ui
|
||||
} else {
|
||||
zend_error(E_WARNING, "Missing argument %u for %s%s%s()", arg_num, class_name, space, func_name);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static ZEND_COLD void zend_verify_return_error(const zend_function *zf, const char *need_msg, const char *need_kind, const char *returned_msg, const char *returned_kind)
|
||||
@@ -2736,9 +2734,9 @@ ZEND_API int ZEND_FASTCALL zend_check_arg_type(zend_function *zf, uint32_t arg_n
|
||||
return zend_verify_arg_type(zf, arg_num, arg, default_value, cache_slot);
|
||||
}
|
||||
|
||||
ZEND_API int ZEND_FASTCALL zend_check_missing_arg(zend_execute_data *execute_data, uint32_t arg_num, void **cache_slot)
|
||||
ZEND_API void ZEND_FASTCALL zend_check_missing_arg(zend_execute_data *execute_data, uint32_t arg_num, void **cache_slot)
|
||||
{
|
||||
return zend_verify_missing_arg(execute_data, arg_num, cache_slot);
|
||||
zend_verify_missing_arg(execute_data, arg_num, cache_slot);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
+1
-1
@@ -52,7 +52,7 @@ ZEND_API int zend_eval_stringl_ex(char *str, size_t str_len, zval *retval_ptr, c
|
||||
|
||||
ZEND_API void ZEND_FASTCALL zend_check_internal_arg_type(zend_function *zf, uint32_t arg_num, zval *arg);
|
||||
ZEND_API int ZEND_FASTCALL zend_check_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *default_value, void **cache_slot);
|
||||
ZEND_API int ZEND_FASTCALL zend_check_missing_arg(zend_execute_data *execute_data, uint32_t arg_num, void **cache_slot);
|
||||
ZEND_API void ZEND_FASTCALL zend_check_missing_arg(zend_execute_data *execute_data, uint32_t arg_num, void **cache_slot);
|
||||
|
||||
static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval *value, zend_uchar value_type)
|
||||
{
|
||||
|
||||
@@ -114,7 +114,7 @@ ZEND_API zend_ini_scanner_globals ini_scanner_globals;
|
||||
|
||||
/* Eat leading whitespace */
|
||||
#define EAT_LEADING_WHITESPACE() \
|
||||
while (yytext[0]) { \
|
||||
while (yyleng) { \
|
||||
if (yytext[0] == ' ' || yytext[0] == '\t') { \
|
||||
SCNG(yy_text)++; \
|
||||
yyleng--; \
|
||||
@@ -125,7 +125,7 @@ ZEND_API zend_ini_scanner_globals ini_scanner_globals;
|
||||
|
||||
/* Eat trailing whitespace + extra char */
|
||||
#define EAT_TRAILING_WHITESPACE_EX(ch) \
|
||||
while (yyleng > 0 && ( \
|
||||
while (yyleng && ( \
|
||||
(ch != 'X' && yytext[yyleng - 1] == ch) || \
|
||||
yytext[yyleng - 1] == '\n' || \
|
||||
yytext[yyleng - 1] == '\r' || \
|
||||
|
||||
@@ -112,7 +112,7 @@ ZEND_API zend_ini_scanner_globals ini_scanner_globals;
|
||||
|
||||
/* Eat leading whitespace */
|
||||
#define EAT_LEADING_WHITESPACE() \
|
||||
while (yytext[0]) { \
|
||||
while (yyleng) { \
|
||||
if (yytext[0] == ' ' || yytext[0] == '\t') { \
|
||||
SCNG(yy_text)++; \
|
||||
yyleng--; \
|
||||
@@ -123,7 +123,7 @@ ZEND_API zend_ini_scanner_globals ini_scanner_globals;
|
||||
|
||||
/* Eat trailing whitespace + extra char */
|
||||
#define EAT_TRAILING_WHITESPACE_EX(ch) \
|
||||
while (yyleng > 0 && ( \
|
||||
while (yyleng && ( \
|
||||
(ch != 'X' && yytext[yyleng - 1] == ch) || \
|
||||
yytext[yyleng - 1] == '\n' || \
|
||||
yytext[yyleng - 1] == '\r' || \
|
||||
|
||||
+44
-28
@@ -1278,50 +1278,66 @@ isset_variable:
|
||||
would have been. */
|
||||
static YYSIZE_T zend_yytnamerr(char *yyres, const char *yystr)
|
||||
{
|
||||
if (!yyres) {
|
||||
return yystrlen(yystr);
|
||||
/* CG(parse_error) states:
|
||||
* 0 => yyres = NULL, yystr is the unexpected token
|
||||
* 1 => yyres = NULL, yystr is one of the expected tokens
|
||||
* 2 => yyres != NULL, yystr is the unexpected token
|
||||
* 3 => yyres != NULL, yystr is one of the expected tokens
|
||||
*/
|
||||
if (yyres && CG(parse_error) < 2) {
|
||||
CG(parse_error) = 2;
|
||||
}
|
||||
{
|
||||
if (CG(parse_error) == 0) {
|
||||
char buffer[120];
|
||||
const unsigned char *end, *str, *tok1 = NULL, *tok2 = NULL;
|
||||
unsigned int len = 0, toklen = 0, yystr_len;
|
||||
|
||||
CG(parse_error) = 1;
|
||||
if (CG(parse_error) % 2 == 0) {
|
||||
/* The unexpected token */
|
||||
char buffer[120];
|
||||
const unsigned char *end, *str, *tok1 = NULL, *tok2 = NULL;
|
||||
unsigned int len = 0, toklen = 0, yystr_len;
|
||||
|
||||
if (LANG_SCNG(yy_text)[0] == 0 &&
|
||||
LANG_SCNG(yy_leng) == 1 &&
|
||||
memcmp(yystr, "\"end of file\"", sizeof("\"end of file\"") - 1) == 0) {
|
||||
CG(parse_error)++;
|
||||
|
||||
if (LANG_SCNG(yy_text)[0] == 0 &&
|
||||
LANG_SCNG(yy_leng) == 1 &&
|
||||
memcmp(yystr, "\"end of file\"", sizeof("\"end of file\"") - 1) == 0) {
|
||||
if (yyres) {
|
||||
yystpcpy(yyres, "end of file");
|
||||
return sizeof("end of file")-1;
|
||||
}
|
||||
return sizeof("end of file")-1;
|
||||
}
|
||||
|
||||
str = LANG_SCNG(yy_text);
|
||||
end = memchr(str, '\n', LANG_SCNG(yy_leng));
|
||||
yystr_len = (unsigned int)yystrlen(yystr);
|
||||
str = LANG_SCNG(yy_text);
|
||||
end = memchr(str, '\n', LANG_SCNG(yy_leng));
|
||||
yystr_len = (unsigned int)yystrlen(yystr);
|
||||
|
||||
if ((tok1 = memchr(yystr, '(', yystr_len)) != NULL
|
||||
&& (tok2 = zend_memrchr(yystr, ')', yystr_len)) != NULL) {
|
||||
toklen = (tok2 - tok1) + 1;
|
||||
} else {
|
||||
tok1 = tok2 = NULL;
|
||||
toklen = 0;
|
||||
}
|
||||
if ((tok1 = memchr(yystr, '(', yystr_len)) != NULL
|
||||
&& (tok2 = zend_memrchr(yystr, ')', yystr_len)) != NULL) {
|
||||
toklen = (tok2 - tok1) + 1;
|
||||
} else {
|
||||
tok1 = tok2 = NULL;
|
||||
toklen = 0;
|
||||
}
|
||||
|
||||
if (end == NULL) {
|
||||
len = LANG_SCNG(yy_leng) > 30 ? 30 : LANG_SCNG(yy_leng);
|
||||
} else {
|
||||
len = (end - str) > 30 ? 30 : (end - str);
|
||||
}
|
||||
if (end == NULL) {
|
||||
len = LANG_SCNG(yy_leng) > 30 ? 30 : LANG_SCNG(yy_leng);
|
||||
} else {
|
||||
len = (end - str) > 30 ? 30 : (end - str);
|
||||
}
|
||||
if (yyres) {
|
||||
if (toklen) {
|
||||
snprintf(buffer, sizeof(buffer), "'%.*s' %.*s", len, str, toklen, tok1);
|
||||
} else {
|
||||
snprintf(buffer, sizeof(buffer), "'%.*s'", len, str);
|
||||
}
|
||||
yystpcpy(yyres, buffer);
|
||||
return len + (toklen ? toklen + 1 : 0) + 2;
|
||||
}
|
||||
return len + (toklen ? toklen + 1 : 0) + 2;
|
||||
}
|
||||
|
||||
/* One of the expected tokens */
|
||||
if (!yyres) {
|
||||
return yystrlen(yystr) - (*yystr == '"' ? 2 : 0);
|
||||
}
|
||||
|
||||
if (*yystr == '"') {
|
||||
YYSIZE_T yyn = 0;
|
||||
const char *yyp = yystr;
|
||||
|
||||
+7
-21
@@ -328,12 +328,9 @@ ZEND_VM_HANDLER(15, ZEND_IS_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
FREE_OP1();
|
||||
FREE_OP2();
|
||||
ZEND_VM_SMART_BRANCH(result, (OP1_TYPE|OP2_TYPE) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((OP1_TYPE|OP2_TYPE) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(16, ZEND_IS_NOT_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
@@ -349,12 +346,9 @@ ZEND_VM_HANDLER(16, ZEND_IS_NOT_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
FREE_OP1();
|
||||
FREE_OP2();
|
||||
ZEND_VM_SMART_BRANCH(result, (OP1_TYPE|OP2_TYPE) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((OP1_TYPE|OP2_TYPE) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
ZEND_VM_HANDLER(17, ZEND_IS_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
|
||||
@@ -4714,9 +4708,8 @@ ZEND_VM_HANDLER(63, ZEND_RECV, ANY, ANY)
|
||||
|
||||
if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
|
||||
SAVE_OPLINE();
|
||||
if (UNEXPECTED(!zend_verify_missing_arg(execute_data, arg_num, CACHE_ADDR(opline->op2.num)))) {
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
zend_verify_missing_arg(execute_data, arg_num, CACHE_ADDR(opline->op2.num));
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
} else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
|
||||
zval *param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
|
||||
|
||||
@@ -7177,14 +7170,10 @@ ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY)
|
||||
|
||||
SAVE_OPLINE();
|
||||
ret = zend_user_opcode_handlers[opline->opcode](execute_data);
|
||||
|
||||
if (EG(exception)) {
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
opline = EX(opline);
|
||||
|
||||
switch (ret) {
|
||||
case ZEND_USER_OPCODE_CONTINUE:
|
||||
LOAD_OPLINE();
|
||||
ZEND_VM_CONTINUE();
|
||||
case ZEND_USER_OPCODE_RETURN:
|
||||
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
|
||||
@@ -7197,13 +7186,10 @@ ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY)
|
||||
case ZEND_USER_OPCODE_ENTER:
|
||||
ZEND_VM_ENTER();
|
||||
case ZEND_USER_OPCODE_LEAVE:
|
||||
LOAD_OPLINE();
|
||||
ZEND_VM_LEAVE();
|
||||
case ZEND_USER_OPCODE_DISPATCH:
|
||||
ZEND_ASSERT(EX(opline) == opline);
|
||||
ZEND_VM_DISPATCH(opline->opcode, opline);
|
||||
default:
|
||||
ZEND_ASSERT(EX(opline) == opline);
|
||||
ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
|
||||
}
|
||||
}
|
||||
|
||||
+67
-171
@@ -1204,9 +1204,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_
|
||||
|
||||
if (UNEXPECTED(arg_num > EX_NUM_ARGS())) {
|
||||
SAVE_OPLINE();
|
||||
if (UNEXPECTED(!zend_verify_missing_arg(execute_data, arg_num, CACHE_ADDR(opline->op2.num)))) {
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
zend_verify_missing_arg(execute_data, arg_num, CACHE_ADDR(opline->op2.num));
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
} else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
|
||||
zval *param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var);
|
||||
|
||||
@@ -1567,14 +1566,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_
|
||||
|
||||
SAVE_OPLINE();
|
||||
ret = zend_user_opcode_handlers[opline->opcode](execute_data);
|
||||
|
||||
if (EG(exception)) {
|
||||
HANDLE_EXCEPTION();
|
||||
}
|
||||
opline = EX(opline);
|
||||
|
||||
switch (ret) {
|
||||
case ZEND_USER_OPCODE_CONTINUE:
|
||||
LOAD_OPLINE();
|
||||
ZEND_VM_CONTINUE();
|
||||
case ZEND_USER_OPCODE_RETURN:
|
||||
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_GENERATOR) != 0)) {
|
||||
@@ -1587,13 +1582,10 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_
|
||||
case ZEND_USER_OPCODE_ENTER:
|
||||
ZEND_VM_ENTER();
|
||||
case ZEND_USER_OPCODE_LEAVE:
|
||||
LOAD_OPLINE();
|
||||
ZEND_VM_LEAVE();
|
||||
case ZEND_USER_OPCODE_DISPATCH:
|
||||
ZEND_ASSERT(EX(opline) == opline);
|
||||
ZEND_VM_DISPATCH(opline->opcode, opline);
|
||||
default:
|
||||
ZEND_ASSERT(EX(opline) == opline);
|
||||
ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline);
|
||||
}
|
||||
}
|
||||
@@ -4596,12 +4588,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_CONST) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CONST|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -4617,12 +4606,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CO
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_CONST) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CONST|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -6646,12 +6632,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HA
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CONST|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -6667,12 +6650,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TM
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CONST|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -6829,12 +6809,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HA
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CONST|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -6850,12 +6827,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VA
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CONST|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
|
||||
@@ -8540,12 +8514,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CV_HAN
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_CV) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CONST|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -8561,12 +8532,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CONST|IS_CV) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CONST|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -12573,12 +12541,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HA
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_TMP_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -12594,12 +12559,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONS
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_TMP_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -13128,12 +13090,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HAND
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_TMP_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -13149,12 +13108,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_TMP_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -13311,12 +13267,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HAND
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -13332,12 +13285,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -13864,12 +13814,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDL
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_TMP_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -13885,12 +13832,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_H
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_TMP_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_TMP_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -16414,12 +16358,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HA
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -16435,12 +16376,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONS
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_VAR|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
|
||||
@@ -18156,12 +18094,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HAND
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -18177,12 +18112,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_VAR|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -18368,12 +18300,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HAND
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -18389,12 +18318,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -19622,12 +19548,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDL
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -19643,12 +19566,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_H
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
zval_ptr_dtor_nogc(free_op1);
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_VAR|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC)
|
||||
@@ -30100,12 +30020,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HAN
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_CONST) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CV|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -30121,12 +30038,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_CONST) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CV|IS_CONST) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -32981,12 +32895,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDL
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CV|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -33002,12 +32913,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_H
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CV|IS_TMP_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -33192,12 +33100,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDL
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CV|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -33213,12 +33118,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_H
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
|
||||
zval_ptr_dtor_nogc(free_op2);
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_VAR) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CV|IS_VAR) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC)
|
||||
@@ -35338,12 +35240,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLE
|
||||
result = fast_is_identical_function(op1, op2);
|
||||
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_CV) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CV|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
@@ -35359,12 +35258,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HA
|
||||
result = fast_is_not_identical_function(op1, op2);
|
||||
|
||||
|
||||
ZEND_VM_SMART_BRANCH(result, (IS_CV|IS_CV) & (IS_VAR|IS_TMP_VAR));
|
||||
ZEND_VM_SMART_BRANCH(result, 1);
|
||||
ZVAL_BOOL(EX_VAR(opline->result.var), result);
|
||||
if ((IS_CV|IS_CV) & (IS_VAR|IS_TMP_VAR)) {
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
ZEND_VM_NEXT_OPCODE();
|
||||
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
|
||||
}
|
||||
|
||||
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
|
||||
+1
-1
@@ -120,7 +120,7 @@ int zend_sprintf(char *buffer, const char *format, ...);
|
||||
PHP_MAJOR_VERSION=7
|
||||
PHP_MINOR_VERSION=0
|
||||
PHP_RELEASE_VERSION=0
|
||||
PHP_EXTRA_VERSION="-dev"
|
||||
PHP_EXTRA_VERSION="RC6"
|
||||
PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION"
|
||||
PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION`
|
||||
|
||||
|
||||
@@ -2517,13 +2517,13 @@ static int accel_remap_huge_pages(void *start, size_t size, const char *name, si
|
||||
}
|
||||
memcpy(mem, start, size);
|
||||
|
||||
#ifdef MAP_HUGETLB
|
||||
# ifdef MAP_HUGETLB
|
||||
ret = mmap(start, size,
|
||||
PROT_READ | PROT_WRITE | PROT_EXEC,
|
||||
MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED | MAP_HUGETLB,
|
||||
-1, 0);
|
||||
#endif
|
||||
#ifdef MADV_HUGEPAGE
|
||||
# endif
|
||||
# ifdef MADV_HUGEPAGE
|
||||
if (ret == MAP_FAILED) {
|
||||
ret = mmap(start, size,
|
||||
PROT_READ | PROT_WRITE | PROT_EXEC,
|
||||
@@ -2531,7 +2531,7 @@ static int accel_remap_huge_pages(void *start, size_t size, const char *name, si
|
||||
-1, 0);
|
||||
madvise(start, size, MADV_HUGEPAGE);
|
||||
}
|
||||
#endif
|
||||
# endif
|
||||
if (ret == start) {
|
||||
memcpy(start, mem, size);
|
||||
mprotect(start, size, PROT_READ | PROT_EXEC);
|
||||
@@ -2565,7 +2565,13 @@ static void accel_move_code_to_huge_pages(void)
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
# endif
|
||||
# else
|
||||
static void accel_move_code_to_huge_pages(void)
|
||||
{
|
||||
zend_error(E_WARNING, ACCELERATOR_PRODUCT_NAME ": opcache.huge_code_pages has no affect as huge page is not supported");
|
||||
return;
|
||||
}
|
||||
# endif /* defined(MAP_HUGETLB) || defined(MADV_HUGEPAGE) */
|
||||
#endif /* HAVE_HUGE_CODE_PAGES */
|
||||
|
||||
static int accel_startup(zend_extension *extension)
|
||||
|
||||
@@ -242,7 +242,6 @@ static ZEND_INI_MH(OnEnable)
|
||||
}
|
||||
|
||||
#ifdef HAVE_OPCACHE_FILE_CACHE
|
||||
|
||||
static ZEND_INI_MH(OnUpdateFileCache)
|
||||
{
|
||||
if (new_value) {
|
||||
|
||||
@@ -192,15 +192,25 @@ static int pdo_dblib_stmt_describe(pdo_stmt_t *stmt, int colno)
|
||||
pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data;
|
||||
pdo_dblib_db_handle *H = S->H;
|
||||
struct pdo_column_data *col;
|
||||
zend_string *str;
|
||||
|
||||
char *fname;
|
||||
|
||||
if(colno >= stmt->column_count || colno < 0) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
col = &stmt->columns[colno];
|
||||
str = dbcolname(H->link, colno+1);
|
||||
col->name = zend_string_init(str, strlen(str), 0);
|
||||
fname = (char*)dbcolname(H->link, colno+1);
|
||||
|
||||
if (fname && *fname) {
|
||||
col->name = zend_string_init(fname, strlen(fname), 0);
|
||||
} else {
|
||||
char buf[16];
|
||||
int len;
|
||||
|
||||
len = snprintf(buf, sizeof(buf), "computed%d", colno);
|
||||
col->name = zend_string_init(buf, len, 0);
|
||||
}
|
||||
|
||||
col->maxlen = dbcollen(H->link, colno+1);
|
||||
col->param_type = PDO_PARAM_STR;
|
||||
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
--TEST--
|
||||
PDO_DBLIB: Segmentation fault on pdo_dblib::nextRowset
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded('pdo_dblib')) die('skip not loaded');
|
||||
require __DIR__ . '/config.inc';
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
require __DIR__ . '/config.inc';
|
||||
|
||||
$sql = "
|
||||
exec dbo.sp_executesql N'
|
||||
SELECT * FROM sysobjects
|
||||
SELECT * FROM syscolumns
|
||||
'
|
||||
";
|
||||
$stmt = $db->query($sql);
|
||||
$resultset1 = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
if (true !== $stmt->nextRowset()) {
|
||||
die('expect TRUE on nextRowset');
|
||||
}
|
||||
$resultset2 = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
if (false !== $stmt->nextRowset()) {
|
||||
die('expect FALSE on nextRowset');
|
||||
}
|
||||
$stmt->closeCursor();
|
||||
|
||||
echo "OK\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
OK
|
||||
@@ -1762,7 +1762,12 @@ ZEND_METHOD(reflection_function, getClosure)
|
||||
}
|
||||
GET_REFLECTION_OBJECT_PTR(fptr);
|
||||
|
||||
zend_create_fake_closure(return_value, fptr, NULL, NULL, NULL);
|
||||
if (!Z_ISUNDEF(intern->obj)) {
|
||||
/* Closures are immutable objects */
|
||||
ZVAL_COPY(return_value, &intern->obj);
|
||||
} else {
|
||||
zend_create_fake_closure(return_value, fptr, NULL, NULL, NULL);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
+11
-2
@@ -1419,7 +1419,12 @@ static zend_string* get_http_body(php_stream *stream, int close, char *headers)
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
http_buf = zend_string_realloc(http_buf, http_buf_size + buf_size, 0);
|
||||
|
||||
if (http_buf) {
|
||||
http_buf = zend_string_realloc(http_buf, http_buf_size + buf_size, 0);
|
||||
} else {
|
||||
http_buf = zend_string_alloc(buf_size, 0);
|
||||
}
|
||||
|
||||
while (len_size < buf_size) {
|
||||
int len_read = php_stream_read(stream, http_buf->val + http_buf_size, buf_size - len_size);
|
||||
@@ -1489,7 +1494,11 @@ static zend_string* get_http_body(php_stream *stream, int close, char *headers)
|
||||
} else if (header_close) {
|
||||
do {
|
||||
int len_read;
|
||||
http_buf = zend_string_realloc(http_buf, http_buf_size + 4096 + 1, 0);
|
||||
if (http_buf) {
|
||||
http_buf = zend_string_realloc(http_buf, http_buf_size + 4096, 0);
|
||||
} else {
|
||||
http_buf = zend_string_alloc(4096, 0);
|
||||
}
|
||||
len_read = php_stream_read(stream, http_buf->val + http_buf_size, 4096);
|
||||
if (len_read > 0) {
|
||||
http_buf_size += len_read;
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
--TEST--
|
||||
Bug #70730 (Incorrect ArrayObject serialization if unset is called in serialize())
|
||||
--FILE--
|
||||
<?php
|
||||
class A extends \ArrayObject
|
||||
{
|
||||
protected $foo;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->foo = 'bar';
|
||||
}
|
||||
|
||||
public function serialize()
|
||||
{
|
||||
unset($this->foo);
|
||||
$result = parent::serialize();
|
||||
$this->foo = 'bar';
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
$a = new A();
|
||||
$a->append('item1');
|
||||
$a->append('item2');
|
||||
$a->append('item3');
|
||||
$b = new A();
|
||||
$b->unserialize($a->serialize());
|
||||
var_dump($b);
|
||||
?>
|
||||
--EXPECTF--
|
||||
object(A)#%d (2) {
|
||||
["foo":protected]=>
|
||||
string(3) "bar"
|
||||
["storage":"ArrayObject":private]=>
|
||||
array(3) {
|
||||
[0]=>
|
||||
string(5) "item1"
|
||||
[1]=>
|
||||
string(5) "item2"
|
||||
[2]=>
|
||||
string(5) "item3"
|
||||
}
|
||||
}
|
||||
@@ -871,6 +871,8 @@ static int php_sqlite3_callback_compare(void *coll, int a_len, const void *a, in
|
||||
if ((ret = zend_call_function(&collation->fci.fci, &collation->fci.fcc)) == FAILURE) {
|
||||
php_error_docref(NULL, E_WARNING, "An error occurred while invoking the compare callback");
|
||||
}
|
||||
} else {
|
||||
ZVAL_UNDEF(&retval);
|
||||
}
|
||||
|
||||
zval_ptr_dtor(&zargs[0]);
|
||||
|
||||
+15
-15
@@ -35,7 +35,7 @@
|
||||
#define COMMON (is_ref ? "&" : "")
|
||||
/* }}} */
|
||||
|
||||
static uint32_t zend_hash_recalc_elements(HashTable *ht) /* {{{ */
|
||||
static uint32_t php_array_recalc_elements(HashTable *ht) /* {{{ */
|
||||
{
|
||||
zval *val;
|
||||
uint32_t num = ht->nNumOfElements;
|
||||
@@ -52,12 +52,12 @@ static uint32_t zend_hash_recalc_elements(HashTable *ht) /* {{{ */
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static uint32_t zend_obj_num_elements(HashTable *ht) /* {{{ */
|
||||
static uint32_t php_array_num_elements(HashTable *ht) /* {{{ */
|
||||
{
|
||||
uint32_t num = ht->nNumOfElements;
|
||||
|
||||
if (UNEXPECTED(ht->u.v.flags & HASH_FLAG_HAS_EMPTY_IND)) {
|
||||
num = zend_hash_recalc_elements(ht);
|
||||
num = php_array_recalc_elements(ht);
|
||||
if (UNEXPECTED(ht->nNumOfElements == num)) {
|
||||
ht->u.v.flags &= ~HASH_FLAG_HAS_EMPTY_IND;
|
||||
}
|
||||
@@ -151,9 +151,9 @@ again:
|
||||
return;
|
||||
}
|
||||
if (UNEXPECTED(Z_SYMBOLTABLE_P(struc))) {
|
||||
count = zend_hash_recalc_elements(myht);
|
||||
count = php_array_recalc_elements(myht);
|
||||
} else {
|
||||
count = zend_hash_num_elements(myht);
|
||||
count = php_array_num_elements(myht);
|
||||
}
|
||||
php_printf("%sarray(%d) {\n", COMMON, count);
|
||||
is_temp = 0;
|
||||
@@ -182,7 +182,7 @@ again:
|
||||
|
||||
myht = Z_OBJDEBUG_P(struc, is_temp);
|
||||
class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc));
|
||||
php_printf("%sobject(%s)#%d (%d) {\n", COMMON, ZSTR_VAL(class_name), Z_OBJ_HANDLE_P(struc), myht ? zend_obj_num_elements(myht) : 0);
|
||||
php_printf("%sobject(%s)#%d (%d) {\n", COMMON, ZSTR_VAL(class_name), Z_OBJ_HANDLE_P(struc), myht ? php_array_num_elements(myht) : 0);
|
||||
zend_string_release(class_name);
|
||||
|
||||
if (myht) {
|
||||
@@ -325,9 +325,9 @@ again:
|
||||
return;
|
||||
}
|
||||
if (UNEXPECTED(Z_SYMBOLTABLE_P(struc))) {
|
||||
count = zend_hash_recalc_elements(myht);
|
||||
count = php_array_recalc_elements(myht);
|
||||
} else {
|
||||
count = zend_hash_num_elements(myht);
|
||||
count = php_array_num_elements(myht);
|
||||
}
|
||||
php_printf("%sarray(%d) refcount(%u){\n", COMMON, count, Z_REFCOUNTED_P(struc) ? Z_REFCOUNT_P(struc) : 1);
|
||||
ZEND_HASH_FOREACH_KEY_VAL_IND(myht, index, key, val) {
|
||||
@@ -356,7 +356,7 @@ again:
|
||||
}
|
||||
}
|
||||
class_name = Z_OBJ_HANDLER_P(struc, get_class_name)(Z_OBJ_P(struc));
|
||||
php_printf("%sobject(%s)#%d (%d) refcount(%u){\n", COMMON, ZSTR_VAL(class_name), Z_OBJ_HANDLE_P(struc), myht ? zend_obj_num_elements(myht) : 0, Z_REFCOUNT_P(struc));
|
||||
php_printf("%sobject(%s)#%d (%d) refcount(%u){\n", COMMON, ZSTR_VAL(class_name), Z_OBJ_HANDLE_P(struc), myht ? php_array_num_elements(myht) : 0, Z_REFCOUNT_P(struc));
|
||||
zend_string_release(class_name);
|
||||
if (myht) {
|
||||
ZEND_HASH_FOREACH_KEY_VAL_IND(myht, index, key, val) {
|
||||
@@ -708,13 +708,13 @@ static void php_var_serialize_class(smart_str *buf, zval *struc, zval *retval_pt
|
||||
if (Z_TYPE_P(retval_ptr) == IS_ARRAY) {
|
||||
ht = Z_ARRVAL_P(retval_ptr);
|
||||
if (UNEXPECTED(Z_SYMBOLTABLE_P(struc))) {
|
||||
count = zend_hash_recalc_elements(ht);
|
||||
count = php_array_recalc_elements(ht);
|
||||
} else {
|
||||
count = zend_hash_num_elements(ht);
|
||||
count = php_array_num_elements(ht);
|
||||
}
|
||||
} else if (Z_TYPE_P(retval_ptr) == IS_OBJECT) {
|
||||
ht = Z_OBJPROP_P(retval_ptr);
|
||||
count = zend_obj_num_elements(ht);
|
||||
count = php_array_num_elements(ht);
|
||||
if (incomplete_class) {
|
||||
--count;
|
||||
}
|
||||
@@ -936,16 +936,16 @@ again:
|
||||
smart_str_appendl(buf, "a:", 2);
|
||||
myht = Z_ARRVAL_P(struc);
|
||||
if (UNEXPECTED(Z_SYMBOLTABLE_P(struc))) {
|
||||
i = zend_hash_recalc_elements(myht);
|
||||
i = php_array_recalc_elements(myht);
|
||||
} else {
|
||||
i = zend_hash_num_elements(myht);
|
||||
i = php_array_num_elements(myht);
|
||||
}
|
||||
} else {
|
||||
incomplete_class = php_var_serialize_class_name(buf, struc);
|
||||
myht = Z_OBJPROP_P(struc);
|
||||
/* count after serializing name, since php_var_serialize_class_name
|
||||
* changes the count if the variable is incomplete class */
|
||||
i = zend_obj_num_elements(myht);
|
||||
i = php_array_num_elements(myht);
|
||||
if (i > 0 && incomplete_class) {
|
||||
--i;
|
||||
}
|
||||
|
||||
+2
-2
@@ -3,6 +3,6 @@
|
||||
#define PHP_MAJOR_VERSION 7
|
||||
#define PHP_MINOR_VERSION 0
|
||||
#define PHP_RELEASE_VERSION 0
|
||||
#define PHP_EXTRA_VERSION "-dev"
|
||||
#define PHP_VERSION "7.0.0-dev"
|
||||
#define PHP_EXTRA_VERSION "RC6"
|
||||
#define PHP_VERSION "7.0.0RC6"
|
||||
#define PHP_VERSION_ID 70000
|
||||
@@ -964,7 +964,7 @@ static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump) {
|
||||
|
||||
switch (watch->type) {
|
||||
case WATCH_ON_ZVAL:
|
||||
do_break = memcmp(oldPtr, watch->addr.zv, sizeof(zend_value) + sizeof(uint32_t) /* value + typeinfo */);
|
||||
do_break = memcmp(oldPtr, watch->addr.zv, sizeof(zend_value) + sizeof(uint32_t) /* value + typeinfo */) != 0;
|
||||
if (!do_break) {
|
||||
goto end;
|
||||
}
|
||||
@@ -976,7 +976,7 @@ static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump) {
|
||||
}
|
||||
break;
|
||||
case WATCH_ON_REFCOUNTED:
|
||||
do_break = memcmp(oldPtr, watch->addr.ref, sizeof(uint32_t) /* no zend_refcounted metadata info */);
|
||||
do_break = memcmp(oldPtr, watch->addr.ref, sizeof(uint32_t) /* no zend_refcounted metadata info */) != 0;
|
||||
if (!do_break) {
|
||||
goto end;
|
||||
}
|
||||
@@ -999,7 +999,7 @@ static void phpdbg_print_changed_zval(phpdbg_watch_memdump *dump) {
|
||||
|
||||
switch (watch->type) {
|
||||
case WATCH_ON_ZVAL: {
|
||||
int show_value = memcmp(oldPtr, watch->addr.zv, sizeof(zend_value) + sizeof(uint32_t) /* no metadata info */);
|
||||
zend_bool show_value = memcmp(oldPtr, watch->addr.zv, sizeof(zend_value) + sizeof(uint32_t) /* no metadata info */) != 0;
|
||||
|
||||
if ((watch->flags & PHPDBG_WATCH_NORMAL) && (removed || show_value)) {
|
||||
/* TODO: Merge with refcounting watches, store if watched ref value is to be dropped etc. [for example: manually increment refcount transparently for displaying and drop it if it decrements to 1] */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
bz2-1.0.6
|
||||
cclient-2007f
|
||||
freetype-2.6
|
||||
icu-55.1
|
||||
icu-56.1
|
||||
jpeglib-9a
|
||||
libcurl-7.43.0
|
||||
libiconv-1.14
|
||||
|
||||
@@ -33,6 +33,10 @@
|
||||
#error "Use this header only with Microsoft Visual C++ compilers!"
|
||||
#endif // _MSC_VER ]
|
||||
|
||||
// Starting with vc14, many of the C11 features are now included, so we only
|
||||
// need many of these typedefs and defines for older VS suites
|
||||
#if _MSC_VER < 1900
|
||||
|
||||
#ifndef _MSC_INTTYPES_H_ // [
|
||||
#define _MSC_INTTYPES_H_
|
||||
|
||||
@@ -303,3 +307,8 @@ imaxdiv_t __cdecl imaxdiv(intmax_t numer, intmax_t denom)
|
||||
|
||||
|
||||
#endif // _MSC_INTTYPES_H_ ]
|
||||
|
||||
#else
|
||||
#include <inttypes.h>
|
||||
#endif
|
||||
|
||||
Reference in new issue
Block a user