Skip to content

Commit 550ec29

Browse files
committed
Use php_sxe_reset_iterator_no_clear_iter_data() to avoid having to store and restore iterator data
This makes the code less error-prone, and also makes it simpler.
1 parent 695ec3c commit 550ec29

File tree

1 file changed

+6
-32
lines changed

1 file changed

+6
-32
lines changed

ext/simplexml/simplexml.c

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -975,10 +975,9 @@ static int sxe_prop_is_empty(zend_object *object) /* {{{ */
975975
php_sxe_object *sxe;
976976
xmlNodePtr node;
977977
xmlAttrPtr attr;
978-
zval iter_data;
979978
int test;
980979
int is_empty;
981-
int use_iter = 0;
980+
bool use_iter = false;
982981

983982
sxe = php_sxe_fetch_object(object);
984983

@@ -1004,18 +1003,15 @@ static int sxe_prop_is_empty(zend_object *object) /* {{{ */
10041003
GET_NODE(sxe, node);
10051004
node = php_sxe_get_first_node(sxe, node);
10061005
is_empty = 1;
1007-
ZVAL_UNDEF(&iter_data);
10081006
if (node && sxe->iter.type != SXE_ITER_ATTRLIST) {
10091007
if (node->type == XML_ATTRIBUTE_NODE) {
10101008
return 0;
10111009
} else if (sxe->iter.type != SXE_ITER_CHILD) {
10121010
if (sxe->iter.type == SXE_ITER_NONE || !node->children || !node->parent || node->children->next || node->children->children || node->parent->children == node->parent->last) {
10131011
node = node->children;
10141012
} else {
1015-
ZVAL_COPY_VALUE(&iter_data, &sxe->iter.data);
1016-
ZVAL_UNDEF(&sxe->iter.data);
1017-
node = php_sxe_reset_iterator(sxe, 0);
1018-
use_iter = 1;
1013+
node = php_sxe_reset_iterator_no_clear_iter_data(sxe, 0);
1014+
use_iter = true;
10191015
}
10201016
}
10211017

@@ -1052,13 +1048,6 @@ static int sxe_prop_is_empty(zend_object *object) /* {{{ */
10521048
}
10531049
}
10541050

1055-
if (use_iter) {
1056-
if (!Z_ISUNDEF(sxe->iter.data)) {
1057-
zval_ptr_dtor(&sxe->iter.data);
1058-
}
1059-
ZVAL_COPY_VALUE(&sxe->iter.data, &iter_data);
1060-
}
1061-
10621051
return is_empty;
10631052
}
10641053
/* }}} */
@@ -1074,10 +1063,7 @@ static HashTable *sxe_get_prop_hash(zend_object *object, int is_debug) /* {{{ */
10741063
xmlAttrPtr attr;
10751064
int namelen;
10761065
int test;
1077-
char use_iter;
1078-
zval iter_data;
1079-
1080-
use_iter = 0;
1066+
bool use_iter = false;
10811067

10821068
sxe = php_sxe_fetch_object(object);
10831069

@@ -1127,16 +1113,11 @@ static HashTable *sxe_get_prop_hash(zend_object *object, int is_debug) /* {{{ */
11271113
zend_hash_next_index_insert(rv, &value);
11281114
node = NULL;
11291115
} else if (sxe->iter.type != SXE_ITER_CHILD) {
1130-
11311116
if ( sxe->iter.type == SXE_ITER_NONE || !node->children || !node->parent || !node->next || node->children->next || node->children->children || node->parent->children == node->parent->last ) {
11321117
node = node->children;
11331118
} else {
1134-
ZVAL_COPY_VALUE(&iter_data, &sxe->iter.data);
1135-
ZVAL_UNDEF(&sxe->iter.data);
1136-
1137-
node = php_sxe_reset_iterator(sxe, 0);
1138-
1139-
use_iter = 1;
1119+
node = php_sxe_reset_iterator_no_clear_iter_data(sxe, 0);
1120+
use_iter = true;
11401121
}
11411122
}
11421123

@@ -1188,13 +1169,6 @@ static HashTable *sxe_get_prop_hash(zend_object *object, int is_debug) /* {{{ */
11881169
}
11891170
}
11901171

1191-
if (use_iter) {
1192-
if (!Z_ISUNDEF(sxe->iter.data)) {
1193-
zval_ptr_dtor(&sxe->iter.data);
1194-
}
1195-
ZVAL_COPY_VALUE(&sxe->iter.data, &iter_data);
1196-
}
1197-
11981172
return rv;
11991173
}
12001174
/* }}} */

0 commit comments

Comments
 (0)