mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Merge branch 'PHP-8.3' into PHP-8.4
* PHP-8.3: Fix fallback paths in fast_long_{add,sub}_function
This commit is contained in:
commit
c7d3c5fcb1
2 changed files with 15 additions and 4 deletions
1
NEWS
1
NEWS
|
@ -10,6 +10,7 @@ PHP NEWS
|
||||||
compilation). (ilutov)
|
compilation). (ilutov)
|
||||||
. Fixed bug GH-17618 (UnhandledMatchError does not take
|
. Fixed bug GH-17618 (UnhandledMatchError does not take
|
||||||
zend.exception_ignore_args=1 into account). (timwolla)
|
zend.exception_ignore_args=1 into account). (timwolla)
|
||||||
|
. Fix fallback paths in fast_long_{add,sub}_function. (nielsdos)
|
||||||
|
|
||||||
- DOM:
|
- DOM:
|
||||||
. Fixed bug GH-17609 (Typo in error message: Dom\NO_DEFAULT_NS instead of
|
. Fixed bug GH-17609 (Typo in error message: Dom\NO_DEFAULT_NS instead of
|
||||||
|
|
|
@ -731,11 +731,13 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
|
||||||
* have read the values of op1 and op2.
|
* have read the values of op1 and op2.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
zend_long sum = (zend_long) ((zend_ulong) Z_LVAL_P(op1) + (zend_ulong) Z_LVAL_P(op2));
|
||||||
|
|
||||||
if (UNEXPECTED((Z_LVAL_P(op1) & LONG_SIGN_MASK) == (Z_LVAL_P(op2) & LONG_SIGN_MASK)
|
if (UNEXPECTED((Z_LVAL_P(op1) & LONG_SIGN_MASK) == (Z_LVAL_P(op2) & LONG_SIGN_MASK)
|
||||||
&& (Z_LVAL_P(op1) & LONG_SIGN_MASK) != ((Z_LVAL_P(op1) + Z_LVAL_P(op2)) & LONG_SIGN_MASK))) {
|
&& (Z_LVAL_P(op1) & LONG_SIGN_MASK) != (sum & LONG_SIGN_MASK))) {
|
||||||
ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
|
ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2));
|
||||||
} else {
|
} else {
|
||||||
ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2));
|
ZVAL_LONG(result, sum);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -813,11 +815,19 @@ overflow: ZEND_ATTRIBUTE_COLD_LABEL
|
||||||
ZVAL_LONG(result, llresult);
|
ZVAL_LONG(result, llresult);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2));
|
/*
|
||||||
|
* 'result' may alias with op1 or op2, so we need to
|
||||||
|
* ensure that 'result' is not updated until after we
|
||||||
|
* have read the values of op1 and op2.
|
||||||
|
*/
|
||||||
|
|
||||||
|
zend_long sub = (zend_long) ((zend_ulong) Z_LVAL_P(op1) - (zend_ulong) Z_LVAL_P(op2));
|
||||||
|
|
||||||
if (UNEXPECTED((Z_LVAL_P(op1) & LONG_SIGN_MASK) != (Z_LVAL_P(op2) & LONG_SIGN_MASK)
|
if (UNEXPECTED((Z_LVAL_P(op1) & LONG_SIGN_MASK) != (Z_LVAL_P(op2) & LONG_SIGN_MASK)
|
||||||
&& (Z_LVAL_P(op1) & LONG_SIGN_MASK) != (Z_LVAL_P(result) & LONG_SIGN_MASK))) {
|
&& (Z_LVAL_P(op1) & LONG_SIGN_MASK) != (sub & LONG_SIGN_MASK))) {
|
||||||
ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
|
ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2));
|
||||||
|
} else {
|
||||||
|
ZVAL_LONG(result, sub);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue