mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Fix IntlDateFormatter::parseToCalendar() reference type system breaks
Closes GH-18440.
This commit is contained in:
parent
d00adca199
commit
173dccb646
3 changed files with 33 additions and 6 deletions
2
NEWS
2
NEWS
|
@ -9,6 +9,8 @@ PHP NEWS
|
|||
|
||||
- Intl:
|
||||
. datefmt_parse/datefmt_localtime references type system fixes. (nielsdos)
|
||||
. Fix IntlDateFormatter::parseToCalendar() reference type system breaks.
|
||||
(nielsdos)
|
||||
|
||||
- SPL:
|
||||
. Fixed bug GH-18421 (Integer overflow with large numbers in LimitIterator).
|
||||
|
|
|
@ -185,12 +185,12 @@ PHP_METHOD(IntlDateFormatter, parseToCalendar)
|
|||
DATE_FORMAT_METHOD_FETCH_OBJECT;
|
||||
|
||||
if (z_parse_pos) {
|
||||
zend_long long_parse_pos;
|
||||
ZVAL_DEREF(z_parse_pos);
|
||||
zval *z_parse_pos_tmp = z_parse_pos;
|
||||
ZVAL_DEREF(z_parse_pos_tmp);
|
||||
bool failed = false;
|
||||
long_parse_pos = zval_try_get_long(z_parse_pos, &failed);
|
||||
zend_long long_parse_pos = zval_try_get_long(z_parse_pos_tmp, &failed);
|
||||
if (failed) {
|
||||
zend_argument_type_error(2, "must be of type int, %s given", zend_zval_value_name(z_parse_pos));
|
||||
zend_argument_type_error(2, "must be of type int, %s given", zend_zval_value_name(z_parse_pos_tmp));
|
||||
RETURN_THROWS();
|
||||
}
|
||||
if (ZEND_LONG_INT_OVFL(long_parse_pos)) {
|
||||
|
@ -205,8 +205,7 @@ PHP_METHOD(IntlDateFormatter, parseToCalendar)
|
|||
}
|
||||
internal_parse_to_timestamp( dfo, ZSTR_VAL(text_to_parse), ZSTR_LEN(text_to_parse), z_parse_pos ? &parse_pos : NULL, true, return_value);
|
||||
if (z_parse_pos) {
|
||||
zval_ptr_dtor(z_parse_pos);
|
||||
ZVAL_LONG(z_parse_pos, parse_pos);
|
||||
ZEND_TRY_ASSIGN_REF_LONG(z_parse_pos, parse_pos);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
26
ext/intl/tests/parseToCalendar_references_type_system.phpt
Normal file
26
ext/intl/tests/parseToCalendar_references_type_system.phpt
Normal file
|
@ -0,0 +1,26 @@
|
|||
--TEST--
|
||||
IntlDateFormatter::parseToCalendar() reference type system breaks
|
||||
--EXTENSIONS--
|
||||
intl
|
||||
--FILE--
|
||||
<?php
|
||||
class Test {
|
||||
public float $prop = 0.0;
|
||||
}
|
||||
$test = new Test;
|
||||
$offset =& $test->prop;
|
||||
|
||||
$oIntlDateFormatter = new IntlDateFormatter("en_GB");
|
||||
$oIntlDateFormatter->setTimeZone('Europe/Berlin');
|
||||
$oIntlDateFormatter->setPattern('VV');
|
||||
var_dump($oIntlDateFormatter->parseToCalendar('America/Los_Angeles', $offset));
|
||||
var_dump($offset);
|
||||
var_dump($test);
|
||||
?>
|
||||
--EXPECTF--
|
||||
int(%d)
|
||||
float(%f)
|
||||
object(Test)#%d (1) {
|
||||
["prop"]=>
|
||||
&float(%f)
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue