Skip to content

Commit bf4b470

Browse files
committed
Fix reference support for intltz_get_offset()
It should use the helper macros such that types are properly respected. Closes GH-18364.
1 parent c905d59 commit bf4b470

File tree

3 files changed

+32
-5
lines changed

3 files changed

+32
-5
lines changed

NEWS

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ PHP NEWS
1515
. Fixed GH-18243 imagettftext() overflow/underflow on font size value.
1616
(David Carlier)
1717

18+
- Intl:
19+
. Fix reference support for intltz_get_offset(). (nielsdos)
20+
1821
- LDAP:
1922
. Fixed bug GH-17776 (LDAP_OPT_X_TLS_* options can't be overridden). (Remi)
2023
. Fix NULL deref on high modification key. (nielsdos)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
intltz_get_offset references
3+
--EXTENSIONS--
4+
intl
5+
--FILE--
6+
<?php
7+
$tz = IntlTimeZone::createTimeZone('Europe/Brussels');
8+
9+
class Test {
10+
public string $a, $b;
11+
}
12+
$test = new Test;
13+
$test->a = $test->b = "hello";
14+
15+
$rawOffset =& $test->a;
16+
$dstOffset =& $test->b;
17+
intltz_get_offset($tz, 0.0, true, $rawOffset, $dstOffset);
18+
var_dump($test);
19+
?>
20+
--EXPECT--
21+
object(Test)#2 (2) {
22+
["a"]=>
23+
&string(7) "3600000"
24+
["b"]=>
25+
&string(1) "0"
26+
}

ext/intl/timezone/timezone_methods.cpp

+3-5
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,7 @@ U_CFUNC PHP_FUNCTION(intltz_get_offset)
419419
TIMEZONE_METHOD_INIT_VARS;
420420

421421
if (zend_parse_method_parameters(ZEND_NUM_ARGS(), getThis(),
422-
"Odbz/z/", &object, TimeZone_ce_ptr, &date, &local, &rawOffsetArg,
422+
"Odbzz", &object, TimeZone_ce_ptr, &date, &local, &rawOffsetArg,
423423
&dstOffsetArg) == FAILURE) {
424424
RETURN_THROWS();
425425
}
@@ -431,10 +431,8 @@ U_CFUNC PHP_FUNCTION(intltz_get_offset)
431431

432432
INTL_METHOD_CHECK_STATUS(to, "intltz_get_offset: error obtaining offset");
433433

434-
zval_ptr_dtor(rawOffsetArg);
435-
ZVAL_LONG(rawOffsetArg, rawOffset);
436-
zval_ptr_dtor(dstOffsetArg);
437-
ZVAL_LONG(dstOffsetArg, dstOffset);
434+
ZEND_TRY_ASSIGN_REF_LONG(rawOffsetArg, rawOffset);
435+
ZEND_TRY_ASSIGN_REF_LONG(dstOffsetArg, dstOffset);
438436

439437
RETURN_TRUE;
440438
}

0 commit comments

Comments
 (0)