mirror of
https://github.com/php/php-src.git
synced 2024-09-29 13:56:09 +00:00
Merge branch 'master' of https://git.php.net/push/php-src
This commit is contained in:
commit
a35512f162
6
NEWS
6
NEWS
@ -49,11 +49,15 @@ PHP NEWS
|
||||
. Fixed bug #72570 (Segmentation fault when binding parameters on a query
|
||||
without placeholders). (Matteo)
|
||||
|
||||
- pcntl
|
||||
- Pcntl
|
||||
. Implemented asynchronous signal handling without TICKS. (Dmitry)
|
||||
. Added pcntl_signal_get_handler() that returns the current signal handler
|
||||
for a particular signal. Addresses FR #72409. (David Walker)
|
||||
|
||||
- SimpleXML:
|
||||
. Fixed bug #72588 (Using global var doesn't work while accessing SimpleXML
|
||||
element). (Laruence)
|
||||
|
||||
- Tidy:
|
||||
. Implemented support for libtidy 5.0.0 and above. (Michael Orlitzky, Anatol)
|
||||
|
||||
|
@ -244,22 +244,29 @@ static zval *sxe_prop_dim_read(zval *object, zval *member, zend_bool elements, z
|
||||
|
||||
sxe = Z_SXEOBJ_P(object);
|
||||
|
||||
if (!member || Z_TYPE_P(member) == IS_LONG) {
|
||||
if (sxe->iter.type != SXE_ITER_ATTRLIST) {
|
||||
attribs = 0;
|
||||
elements = 1;
|
||||
} else if (!member) {
|
||||
if (!member) {
|
||||
if (sxe->iter.type == SXE_ITER_ATTRLIST) {
|
||||
/* This happens when the user did: $sxe[]->foo = $value */
|
||||
zend_throw_error(NULL, "Cannot create unnamed attribute");
|
||||
return &EG(uninitialized_zval);
|
||||
}
|
||||
name = NULL;
|
||||
goto long_dim;
|
||||
} else {
|
||||
if (Z_TYPE_P(member) != IS_STRING) {
|
||||
ZVAL_STR(&tmp_zv, zval_get_string(member));
|
||||
member = &tmp_zv;
|
||||
ZVAL_DEREF(member);
|
||||
if (Z_TYPE_P(member) == IS_LONG) {
|
||||
if (sxe->iter.type != SXE_ITER_ATTRLIST) {
|
||||
long_dim:
|
||||
attribs = 0;
|
||||
elements = 1;
|
||||
}
|
||||
name = NULL;
|
||||
} else {
|
||||
if (Z_TYPE_P(member) != IS_STRING) {
|
||||
ZVAL_STR(&tmp_zv, zval_get_string(member));
|
||||
member = &tmp_zv;
|
||||
}
|
||||
name = Z_STRVAL_P(member);
|
||||
}
|
||||
name = Z_STRVAL_P(member);
|
||||
}
|
||||
|
||||
GET_NODE(sxe, node);
|
||||
@ -450,11 +457,8 @@ static int sxe_prop_dim_write(zval *object, zval *member, zval *value, zend_bool
|
||||
|
||||
sxe = Z_SXEOBJ_P(object);
|
||||
|
||||
if (!member || Z_TYPE_P(member) == IS_LONG) {
|
||||
if (sxe->iter.type != SXE_ITER_ATTRLIST) {
|
||||
attribs = 0;
|
||||
elements = 1;
|
||||
} else if (!member) {
|
||||
if (!member) {
|
||||
if (sxe->iter.type == SXE_ITER_ATTRLIST) {
|
||||
/* This happens when the user did: $sxe[] = $value
|
||||
* and could also be E_PARSE, but we use this only during parsing
|
||||
* and this is during runtime.
|
||||
@ -462,20 +466,30 @@ static int sxe_prop_dim_write(zval *object, zval *member, zval *value, zend_bool
|
||||
zend_throw_error(NULL, "Cannot create unnamed attribute");
|
||||
return FAILURE;
|
||||
}
|
||||
goto long_dim;
|
||||
} else {
|
||||
if (Z_TYPE_P(member) != IS_STRING) {
|
||||
trim_str = zval_get_string(member);
|
||||
ZVAL_STR(&tmp_zv, php_trim(trim_str, NULL, 0, 3));
|
||||
zend_string_release(trim_str);
|
||||
member = &tmp_zv;
|
||||
}
|
||||
|
||||
if (!Z_STRLEN_P(member)) {
|
||||
php_error_docref(NULL, E_WARNING, "Cannot write or create unnamed %s", attribs ? "attribute" : "element");
|
||||
if (member == &tmp_zv) {
|
||||
zval_dtor(&tmp_zv);
|
||||
ZVAL_DEREF(member);
|
||||
if (Z_TYPE_P(member) == IS_LONG) {
|
||||
if (sxe->iter.type != SXE_ITER_ATTRLIST) {
|
||||
long_dim:
|
||||
attribs = 0;
|
||||
elements = 1;
|
||||
}
|
||||
} else {
|
||||
if (Z_TYPE_P(member) != IS_STRING) {
|
||||
trim_str = zval_get_string(member);
|
||||
ZVAL_STR(&tmp_zv, php_trim(trim_str, NULL, 0, 3));
|
||||
zend_string_release(trim_str);
|
||||
member = &tmp_zv;
|
||||
}
|
||||
|
||||
if (!Z_STRLEN_P(member)) {
|
||||
php_error_docref(NULL, E_WARNING, "Cannot write or create unnamed %s", attribs ? "attribute" : "element");
|
||||
if (member == &tmp_zv) {
|
||||
zval_dtor(&tmp_zv);
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
|
41
ext/simplexml/tests/bug72588.phpt
Normal file
41
ext/simplexml/tests/bug72588.phpt
Normal file
@ -0,0 +1,41 @@
|
||||
--TEST--
|
||||
Bug #72588 (Using global var doesn't work while accessing SimpleXML element)
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (!extension_loaded("simplexml")) die("skip SimpleXML not available");
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$tpnb = 5;
|
||||
$dummy = &$tpnb;
|
||||
|
||||
$xmlStruct = <<<EOF
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates>
|
||||
<object type="obj_1" label="Label for object 1"></object>
|
||||
<object type="obj_2" label="Label for object 2"></object>
|
||||
<object type="obj_3" label="Label for object 3"></object>
|
||||
<object type="obj_4" label="Label for object 4"></object>
|
||||
<object type="obj_5" label="Label for object 5"></object>
|
||||
<object type="obj_6" label="Label for object 6"></object>
|
||||
<object type="obj_7" label="Label for object 7"></object>
|
||||
<object type="obj_8" label="Label for object 8"></object>
|
||||
<object type="obj_9" label="Label for object 9"></object>
|
||||
<object type="obj_10" label="Label for object 10"></object>
|
||||
</templates>
|
||||
EOF;
|
||||
$tplxml = simplexml_load_string($xmlStruct);
|
||||
|
||||
var_dump($tplxml->object[$tpnb]);
|
||||
?>
|
||||
--EXPECTF--
|
||||
object(SimpleXMLElement)#%d (1) {
|
||||
["@attributes"]=>
|
||||
array(2) {
|
||||
["type"]=>
|
||||
string(5) "obj_6"
|
||||
["label"]=>
|
||||
string(18) "Label for object 6"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user