You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
ini_parse_quantity() fails to parse inputs starting with 0x0b #16892
Since d229a48 (#11910), zend_ini_parse_quantity_internal() rejects inputs in which 0x/0o/0b is followed by whitespace, a sign, or 0x/0o/0b, in order to prevent inputs such as 0x0x12 from being accepted as valid (see #11876). Unfortunately, while 0x and 0o cannot follow a base prefix within valid input, 0b can start a valid hexadecimal number with one leading zero, and such inputs are no longer accepted.
As a suggested fix, zend_ini_consume_quantity() could be changed to not recognize "0b" or "0B", as ZEND_STRTOUL() should not recognize it (at least in the "C" locale). Better yet, do away with that function entirely and also fix #16886. Just check that a whitespace character, +, -, "0x", or "0X" does not immediately follow the base prefix (or check if the first two digits are valid for the base, or at least for hexadecimal). If the first digit is invalid, parsing should not continue (as is the case now), though if the second digit is invalid, the error should be reported as an unknown suffix (if last character) or as more than one character in suffix (if not last character) for consistency with how an invalid second digit is reported in the usual case.
Warning: Invalid quantity "0x0b": no digits after base prefix, interpreting as "0" for backwards compatibility in /home/ki/Documents/Scratchpad/test_parse_quantity_prefixes2.php on line 2
0
Warning: Invalid quantity "-0x0B": no digits after base prefix, interpreting as "0" for backwards compatibility in /home/ki/Documents/Scratchpad/test_parse_quantity_prefixes2.php on line 3
0
Warning: Invalid quantity "0x0beef": no digits after base prefix, interpreting as "0" for backwards compatibility in /home/ki/Documents/Scratchpad/test_parse_quantity_prefixes2.php on line 4
0
Warning: Invalid quantity "-0x0BEEF": no digits after base prefix, interpreting as "0" for backwards compatibility in /home/ki/Documents/Scratchpad/test_parse_quantity_prefixes2.php on line 5
0
I agree this is unintentional BC break, if someone is happy to "properly" implement a version of ZEND_STRTOUL() that accepts 0b, 0o, and 0x prefixes that would be nice. As that would probably fix most issues accross the codebase.
So the best approach is to change this macro that calls libc functions to call something that doesn't not break compatibility and also can work with 0b and the other prefixes?
Activity
cmb69 commentedon Nov 21, 2024
Yeah, that looks like an inadvertent behavioral change. @Girgias, thoughts?
Girgias commentedon Nov 21, 2024
I agree this is unintentional BC break, if someone is happy to "properly" implement a version of
ZEND_STRTOUL()that accepts0b,0o, and0xprefixes that would be nice. As that would probably fix most issues accross the codebase.MarcusXavierr commentedon Dec 3, 2024
So the best approach is to change this macro that calls libc functions to call something that doesn't not break compatibility and also can work with
0band the other prefixes?php-src/Zend/zend_long.h
Lines 67 to 80 in 01093b7
Girgias commentedon Dec 3, 2024
I don't know if the
ZEND_ATOL()orZEND_LTOA()macro needs to be fixed, but yes, this is what I think we should do.Would also remove the double
0x0xsupport, which is a bit dumb.Fix phpGH-16892: ini_parse_quantity() fails to parse inputs starting …
Fix GH-16892: ini_parse_quantity() fails to parse inputs starting wit…
Merge branch 'PHP-8.3' into PHP-8.4
Merge branch 'PHP-8.4'