Skip to content

Commit 5cf54f6

Browse files
jhdxrkrakjoe
authored andcommitted
Fixed bug #74852 (property_exists returns true on unknown DateInterval property)
1 parent 62700f7 commit 5cf54f6

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

NEWS

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ PHP NEWS
1010
. Fixed bug #74761 (Unary operator expected error on some systems). (petk)
1111
. Fixed bug #73900 (Use After Free in unserialize() SplFixedArray). (nikic)
1212

13+
- Date:
14+
. Fixed bug #74852 (property_exists returns true on unknown DateInterval
15+
property). (jhdxr)
16+
1317
- OCI8:
1418
. Fixed bug #74625 (Integer overflow in oci_bind_array_by_name). (Ingmar Runge)
1519

ext/date/php_date.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1986,7 +1986,7 @@ static int date_interval_has_property(zval *object, zval *member, int type, void
19861986
zval *prop;
19871987
int retval = 0;
19881988

1989-
if (Z_TYPE_P(member) != IS_STRING) {
1989+
if (UNEXPECTED(Z_TYPE_P(member) != IS_STRING)) {
19901990
ZVAL_COPY(&tmp_member, member);
19911991
convert_to_string(&tmp_member);
19921992
member = &tmp_member;
@@ -2002,10 +2002,10 @@ static int date_interval_has_property(zval *object, zval *member, int type, void
20022002
}
20032003
return retval;
20042004
}
2005-
2006-
prop = date_interval_read_property(object, member, type, cache_slot, &rv);
2007-
2008-
if (prop != NULL) {
2005+
2006+
prop = date_interval_read_property(object, member, BP_VAR_IS, cache_slot, &rv);
2007+
2008+
if (prop != &EG(uninitialized_zval)) {
20092009
if (type == 2) {
20102010
retval = 1;
20112011
} else if (type == 1) {

ext/date/tests/bug74852.phpt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
Bug #74852 property_exists returns true on unknown DateInterval property
3+
--FILE--
4+
<?php
5+
6+
$interval = new DateInterval('P2D');
7+
var_dump(property_exists($interval,'abcde'));
8+
var_dump(isset($interval->abcde));
9+
var_dump($interval->abcde);
10+
11+
?>
12+
--EXPECTF--
13+
bool(false)
14+
bool(false)
15+
16+
Notice: Undefined property: DateInterval::$abcde in %s on line %d
17+
NULL

0 commit comments

Comments
 (0)