]> granicus.if.org Git - php/commitdiff
Fixed bug #74852 (property_exists returns true on unknown DateInterval property)
authorjhdxr <jhdxr@php.net>
Sat, 8 Jul 2017 12:04:25 +0000 (20:04 +0800)
committerJoe Watkins <krakjoe@php.net>
Mon, 10 Jul 2017 05:53:22 +0000 (06:53 +0100)
NEWS
ext/date/php_date.c
ext/date/tests/bug74852.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 7c2bfe88f09f1f9f959ecf5d6549f2dc978d1ce9..be13bad7a72467d14105f7bbe412f9a2323466da 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,10 @@ PHP                                                                        NEWS
   . Fixed bug #74761 (Unary operator expected error on some systems). (petk)
   . Fixed bug #73900 (Use After Free in unserialize() SplFixedArray). (nikic)
 
+- Date:
+  . Fixed bug #74852 (property_exists returns true on unknown DateInterval 
+    property). (jhdxr)
+
 - OCI8:
   . Fixed bug #74625 (Integer overflow in oci_bind_array_by_name). (Ingmar Runge)
 
index 7383682543a5613f52191a9f8fac0d29f6e82d37..f671f4cba04b951e5002116227832c07a984f21c 100644 (file)
@@ -1986,7 +1986,7 @@ static int date_interval_has_property(zval *object, zval *member, int type, void
        zval *prop;
        int retval = 0;
 
-       if (Z_TYPE_P(member) != IS_STRING) {
+       if (UNEXPECTED(Z_TYPE_P(member) != IS_STRING)) {
                ZVAL_COPY(&tmp_member, member);
                convert_to_string(&tmp_member);
                member = &tmp_member;
@@ -2002,10 +2002,10 @@ static int date_interval_has_property(zval *object, zval *member, int type, void
                }
                return retval;
        }
-
-       prop = date_interval_read_property(object, member, type, cache_slot, &rv);
-
-       if (prop != NULL) {
+       
+       prop = date_interval_read_property(object, member, BP_VAR_IS, cache_slot, &rv);
+       
+       if (prop != &EG(uninitialized_zval)) {
                if (type == 2) {
                        retval = 1;
                } else if (type == 1) {
diff --git a/ext/date/tests/bug74852.phpt b/ext/date/tests/bug74852.phpt
new file mode 100644 (file)
index 0000000..e293bef
--- /dev/null
@@ -0,0 +1,17 @@
+--TEST--
+Bug #74852 property_exists returns true on unknown DateInterval property
+--FILE--
+<?php
+
+$interval = new DateInterval('P2D');
+var_dump(property_exists($interval,'abcde'));
+var_dump(isset($interval->abcde));
+var_dump($interval->abcde);
+
+?>
+--EXPECTF--
+bool(false)
+bool(false)
+
+Notice: Undefined property: DateInterval::$abcde in %s on line %d
+NULL