From: Dmitry Stogov Date: Thu, 19 Dec 2019 20:17:39 +0000 (+0300) Subject: Merge branch 'PHP-7.3' into PHP-7.4 X-Git-Tag: php-7.4.7RC1~398 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=66d5b0608a40cd21bc20529e82b62c308178530a;p=php Merge branch 'PHP-7.3' into PHP-7.4 * PHP-7.3: Fixed bug #78999 (Cycle leak when using function result as temporary) --- 66d5b0608a40cd21bc20529e82b62c308178530a diff --cc NEWS index f88f6e67df,60e91f19df..47e4e05b6a --- a/NEWS +++ b/NEWS @@@ -1,23 -1,17 +1,25 @@@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| -?? ??? ????, PHP 7.3.14 -- Core +?? ??? ????, PHP 7.4.2 + +- Core: + . Fixed bug #78929 (plus signs in cookie values are converted to spaces). + (Alexey Kachalin) + . Fixed bug #78973 (Destructor during CV freeing causes segfault if opline + never saved). (Nikita) + . Fixed bug #78776 (Abstract method implementation from trait does not check + "static"). (Nikita) + . Fixed bug #78999 (Cycle leak when using function result as temporary). + (Dmitry) -- CURL: - . Implemented FR #77711 (CURLFile should support UNICODE filenames). (cmb) - -- GD: - . Fixed bug #78923 (Artifacts when convoluting image with transparency). - (wilson chen) +- OPcache: + . Fixed bug #78961 (erroneous optimization of re-assigned $GLOBALS). (Dmitry) + . Fixed bug #78950 (Preloading trait method with static variables). (Nikita) + . Fixed bug #78903 (Conflict in RTD key for closures results in crash). + (Nikita) + . Fixed bug #78986 (Opcache segfaults when inheriting ctor from immutable + into mutable class). (Nikita) - PDO_PgSQL: . Fixed bug #78983 (pdo_pgsql config.w32 cannot find libpq-fe.h). (SATŌ diff --cc Zend/zend_vm_def.h index d041d16893,62a9ad8bed..66a4c6be31 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@@ -4324,25 -3856,25 +4324,29 @@@ ZEND_VM_INLINE_HANDLER(62, ZEND_RETURN } } } else if (OP1_TYPE == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { ++ zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); ++ if (GC_MAY_LEAK(ref)) { ++ gc_possible_root(ref); ++ } + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); } - ZVAL_NULL(retval_ptr); } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (OP1_TYPE == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); diff --cc Zend/zend_vm_execute.h index b015558084,e893e35b6d..f5346d0d57 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@@ -3519,25 -2723,25 +3519,29 @@@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_ } } } else if (IS_CONST == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { ++ zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); ++ if (GC_MAY_LEAK(ref)) { ++ gc_possible_root(ref); ++ } + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); } - ZVAL_NULL(retval_ptr); } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@@ -17794,25 -17665,25 +17798,29 @@@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_ } } } else if (IS_TMP_VAR == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { ++ zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); ++ if (GC_MAY_LEAK(ref)) { ++ gc_possible_root(ref); ++ } + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); } - ZVAL_NULL(retval_ptr); } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@@ -20630,25 -20437,25 +20638,29 @@@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_ } } } else if (IS_VAR == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { ++ zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); ++ if (GC_MAY_LEAK(ref)) { ++ gc_possible_root(ref); ++ } + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); } - ZVAL_NULL(retval_ptr); } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@@ -36997,25 -36883,25 +37009,29 @@@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_ } } } else if (IS_CV == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { ++ zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); ++ if (GC_MAY_LEAK(ref)) { ++ gc_possible_root(ref); ++ } + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); } - ZVAL_NULL(retval_ptr); } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@@ -53784,25 -55726,25 +53800,29 @@@ zend_leave_helper_SPEC_LABEL } } } else if (IS_CONST == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { ++ zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); ++ if (GC_MAY_LEAK(ref)) { ++ gc_possible_root(ref); ++ } + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); } - ZVAL_NULL(retval_ptr); } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@@ -55258,25 -57344,25 +55278,29 @@@ } } } else if (IS_TMP_VAR == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { ++ zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); ++ if (GC_MAY_LEAK(ref)) { ++ gc_possible_root(ref); ++ } + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); } - ZVAL_NULL(retval_ptr); } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@@ -55544,25 -57634,25 +55568,29 @@@ } } } else if (IS_VAR == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { ++ zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); ++ if (GC_MAY_LEAK(ref)) { ++ gc_possible_root(ref); ++ } + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); } - ZVAL_NULL(retval_ptr); } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); @@@ -56626,25 -59280,25 +56654,29 @@@ } } } else if (IS_CV == IS_CV) { - if (Z_OPT_REFCOUNTED_P(retval_ptr)) { - if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { - ZVAL_COPY_VALUE(return_value, retval_ptr); - if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { - zend_refcounted *ref = Z_COUNTED_P(retval_ptr); - if (GC_MAY_LEAK(ref)) { - gc_possible_root(ref); + do { + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { + if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { ++ zend_refcounted *ref = Z_COUNTED_P(retval_ptr); + ZVAL_COPY_VALUE(return_value, retval_ptr); ++ if (GC_MAY_LEAK(ref)) { ++ gc_possible_root(ref); ++ } + ZVAL_NULL(retval_ptr); + break; + } else { + Z_ADDREF_P(retval_ptr); } - ZVAL_NULL(retval_ptr); } else { - Z_ADDREF_P(return_value); + retval_ptr = Z_REFVAL_P(retval_ptr); + if (Z_OPT_REFCOUNTED_P(retval_ptr)) { + Z_ADDREF_P(retval_ptr); + } } - } else { - retval_ptr = Z_REFVAL_P(retval_ptr); - ZVAL_COPY(return_value, retval_ptr); } - } else { ZVAL_COPY_VALUE(return_value, retval_ptr); - } + } while (0); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr);