@@ -1493,6 +1493,35 @@ static void sxe_add_namespaces(php_sxe_object *sxe, xmlNodePtr node, bool recurs
1493
1493
}
1494
1494
} /* }}} */
1495
1495
1496
+ static inline void sxe_object_free_iterxpath (php_sxe_object * sxe )
1497
+ {
1498
+ if (!Z_ISUNDEF (sxe -> iter .data )) {
1499
+ zval_ptr_dtor (& sxe -> iter .data );
1500
+ ZVAL_UNDEF (& sxe -> iter .data );
1501
+ }
1502
+
1503
+ if (sxe -> iter .name ) {
1504
+ efree (sxe -> iter .name );
1505
+ sxe -> iter .name = NULL ;
1506
+ }
1507
+ if (sxe -> iter .nsprefix ) {
1508
+ efree (sxe -> iter .nsprefix );
1509
+ sxe -> iter .nsprefix = NULL ;
1510
+ }
1511
+ if (!Z_ISUNDEF (sxe -> tmp )) {
1512
+ zval_ptr_dtor (& sxe -> tmp );
1513
+ ZVAL_UNDEF (& sxe -> tmp );
1514
+ }
1515
+
1516
+ php_libxml_node_decrement_resource ((php_libxml_node_object * )sxe );
1517
+
1518
+ if (sxe -> xpath ) {
1519
+ xmlXPathFreeContext (sxe -> xpath );
1520
+ sxe -> xpath = NULL ;
1521
+ }
1522
+ }
1523
+
1524
+
1496
1525
/* {{{ Return all namespaces in use */
1497
1526
PHP_METHOD (SimpleXMLElement , getNamespaces )
1498
1527
{
@@ -2149,29 +2178,7 @@ static void sxe_object_free_storage(zend_object *object)
2149
2178
2150
2179
zend_object_std_dtor (& sxe -> zo );
2151
2180
2152
- if (!Z_ISUNDEF (sxe -> iter .data )) {
2153
- zval_ptr_dtor (& sxe -> iter .data );
2154
- ZVAL_UNDEF (& sxe -> iter .data );
2155
- }
2156
-
2157
- if (sxe -> iter .name ) {
2158
- efree (sxe -> iter .name );
2159
- sxe -> iter .name = NULL ;
2160
- }
2161
- if (sxe -> iter .nsprefix ) {
2162
- efree (sxe -> iter .nsprefix );
2163
- sxe -> iter .nsprefix = NULL ;
2164
- }
2165
- if (!Z_ISUNDEF (sxe -> tmp )) {
2166
- zval_ptr_dtor (& sxe -> tmp );
2167
- ZVAL_UNDEF (& sxe -> tmp );
2168
- }
2169
-
2170
- php_libxml_node_decrement_resource ((php_libxml_node_object * )sxe );
2171
-
2172
- if (sxe -> xpath ) {
2173
- xmlXPathFreeContext (sxe -> xpath );
2174
- }
2181
+ sxe_object_free_iterxpath (sxe );
2175
2182
2176
2183
if (sxe -> properties ) {
2177
2184
zend_hash_destroy (sxe -> properties );
@@ -2371,11 +2378,12 @@ PHP_METHOD(SimpleXMLElement, __construct)
2371
2378
PHP_LIBXML_RESTORE_GLOBALS (read_file_or_memory );
2372
2379
2373
2380
if (!docp ) {
2374
- ((php_libxml_node_object * )sxe )-> document = NULL ;
2375
2381
zend_throw_exception (zend_ce_exception , "String could not be parsed as XML" , 0 );
2376
2382
RETURN_THROWS ();
2377
2383
}
2378
2384
2385
+ sxe_object_free_iterxpath (sxe );
2386
+
2379
2387
sxe -> iter .nsprefix = ns_len ? (xmlChar * )estrdup (ns ) : NULL ;
2380
2388
sxe -> iter .isprefix = isprefix ;
2381
2389
php_libxml_increment_doc_ref ((php_libxml_node_object * )sxe , docp );
0 commit comments