Skip to content

Commit f77be64

Browse files
committed
news entry for #1787
2 parents 450a596 + 77efe76 commit f77be64

File tree

5 files changed

+98
-1
lines changed

5 files changed

+98
-1
lines changed

‎NEWS

+3-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ PHP NEWS
1919
. Implemented FR #72768 (Add ENABLE_VIRTUAL_TERMINAL_PROCESSING flag for
2020
php.exe). (Michele Locati)
2121

22+
- Date:
23+
. Fixed bug #69587 (DateInterval properties and isset). (jhdxr)
24+
2225
- EXIF:
2326
. Added support for vendor specific tags for the following formats:
2427
Samsung, DJI, Panasonic, Sony, Pentax, Minolta & Sigma/Foveon. (Kalle)
@@ -65,4 +68,3 @@ PHP NEWS
6568
. Use Zend MM for allocation in bundled libxmlrpc (Joe)
6669

6770
<<< NOTE: Insert NEWS from last stable release here prior to actual release! >>>
68-

‎ext/date/php_date.c

+49
Original file line numberDiff line numberDiff line change
@@ -1982,6 +1982,54 @@ static int implement_date_interface_handler(zend_class_entry *interface, zend_cl
19821982
return SUCCESS;
19831983
} /* }}} */
19841984

1985+
static int date_interval_has_property(zval *object, zval *member, int type, void **cache_slot) /* {{{ */
1986+
{
1987+
php_interval_obj *obj;
1988+
zval tmp_member;
1989+
zval rv;
1990+
zval *prop;
1991+
int retval = 0;
1992+
1993+
if (Z_TYPE_P(member) != IS_STRING) {
1994+
ZVAL_COPY(&tmp_member, member);
1995+
convert_to_string(&tmp_member);
1996+
member = &tmp_member;
1997+
cache_slot = NULL;
1998+
}
1999+
2000+
obj = Z_PHPINTERVAL_P(object);
2001+
2002+
if (!obj->initialized) {
2003+
retval = (zend_get_std_object_handlers())->has_property(object, member, type, cache_slot);
2004+
if (member == &tmp_member) {
2005+
zval_dtor(member);
2006+
}
2007+
return retval;
2008+
}
2009+
2010+
prop = date_interval_read_property(object, member, type, cache_slot, &rv);
2011+
2012+
if (prop != NULL) {
2013+
if (type == 2) {
2014+
retval = 1;
2015+
} else if (type == 1) {
2016+
retval = zend_is_true(prop);
2017+
} else if (type == 0) {
2018+
retval = (Z_TYPE(*prop) != IS_NULL);
2019+
}
2020+
} else {
2021+
retval = (zend_get_std_object_handlers())->has_property(object, member, type, cache_slot);
2022+
}
2023+
2024+
if (member == &tmp_member) {
2025+
zval_dtor(member);
2026+
}
2027+
2028+
return retval;
2029+
2030+
}
2031+
/* }}} */
2032+
19852033
static void date_register_classes(void) /* {{{ */
19862034
{
19872035
zend_class_entry ce_date, ce_immutable, ce_timezone, ce_interval, ce_period, ce_interface;
@@ -2063,6 +2111,7 @@ static void date_register_classes(void) /* {{{ */
20632111
date_object_handlers_interval.offset = XtOffsetOf(php_interval_obj, std);
20642112
date_object_handlers_interval.free_obj = date_object_free_storage_interval;
20652113
date_object_handlers_interval.clone_obj = date_object_clone_interval;
2114+
date_object_handlers_interval.has_property = date_interval_has_property;
20662115
date_object_handlers_interval.read_property = date_interval_read_property;
20672116
date_object_handlers_interval.write_property = date_interval_write_property;
20682117
date_object_handlers_interval.get_properties = date_object_get_properties_interval;

‎ext/date/tests/bug69587.phpt

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
--TEST--
2+
Bug #69587 (DateInterval properties and isset)
3+
--FILE--
4+
<?php
5+
$datetime1 = new DateTime('2009-10-11');
6+
$datetime2 = new DateTime('2009-10-13');
7+
$interval = $datetime1->diff($datetime2);
8+
9+
var_dump(property_exists($interval, 'm'), isset($interval->m), empty($interval->m), empty($interval->d));
10+
?>
11+
--EXPECT--
12+
bool(true)
13+
bool(true)
14+
bool(true)
15+
bool(false)

‎ext/xml/compat.c

+7
Original file line numberDiff line numberDiff line change
@@ -593,12 +593,19 @@ has been defined and none can be detected */
593593
}
594594
#endif
595595

596+
if (parser->parser->lastError.level >= XML_ERR_WARNING) {
597+
return 0;
598+
}
599+
596600
error = xmlParseChunk(parser->parser, (char *) data, data_len, is_final);
597601
if (error) {
602+
<<<<<<< HEAD
598603
return 0;
599604
} else {
600605
return 1;
601606
} else if (parser->parser->lastError.level > XML_ERR_WARNING ){
607+
=======
608+
>>>>>>> PHP-7.1
602609
return 0;
603610
} else {
604611
return 1;

‎ext/xml/tests/bug73135.phpt

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
--TEST--
2+
Bug #73135 (xml_parse() segmentation fault)
3+
--CREDITS--
4+
edgarsandi - <edgar.r.sandi@gmail.com>
5+
--FILE--
6+
<?php
7+
function start_elem($parser, $xml) {
8+
xml_parse($parser, $xml);
9+
}
10+
11+
$xml = <<<HERE
12+
<a xmlns="ahihi">
13+
<bar foo="ahihi"/>
14+
</a>
15+
HERE;
16+
17+
$parser = xml_parser_create_ns();
18+
xml_set_element_handler($parser, 'start_elem', 'ahihi');
19+
xml_parse($parser, $xml);
20+
?>
21+
--EXPECTF--
22+
Warning: xml_parse(): Unable to call handler ahihi() in %s%ebug73135.php on line %d
23+
24+
Warning: xml_parse(): Unable to call handler ahihi() in %s%ebug73135.php on line %d

0 commit comments

Comments
 (0)