@@ -1502,6 +1502,35 @@ static void sxe_add_namespaces(php_sxe_object *sxe, xmlNodePtr node, bool recurs
1502
1502
}
1503
1503
} /* }}} */
1504
1504
1505
+ static inline void sxe_object_free_iterxpath (php_sxe_object * sxe )
1506
+ {
1507
+ if (!Z_ISUNDEF (sxe -> iter .data )) {
1508
+ zval_ptr_dtor (& sxe -> iter .data );
1509
+ ZVAL_UNDEF (& sxe -> iter .data );
1510
+ }
1511
+
1512
+ if (sxe -> iter .name ) {
1513
+ efree (sxe -> iter .name );
1514
+ sxe -> iter .name = NULL ;
1515
+ }
1516
+ if (sxe -> iter .nsprefix ) {
1517
+ efree (sxe -> iter .nsprefix );
1518
+ sxe -> iter .nsprefix = NULL ;
1519
+ }
1520
+ if (!Z_ISUNDEF (sxe -> tmp )) {
1521
+ zval_ptr_dtor (& sxe -> tmp );
1522
+ ZVAL_UNDEF (& sxe -> tmp );
1523
+ }
1524
+
1525
+ php_libxml_node_decrement_resource ((php_libxml_node_object * )sxe );
1526
+
1527
+ if (sxe -> xpath ) {
1528
+ xmlXPathFreeContext (sxe -> xpath );
1529
+ sxe -> xpath = NULL ;
1530
+ }
1531
+ }
1532
+
1533
+
1505
1534
/* {{{ Return all namespaces in use */
1506
1535
PHP_METHOD (SimpleXMLElement , getNamespaces )
1507
1536
{
@@ -2156,29 +2185,7 @@ static void sxe_object_free_storage(zend_object *object)
2156
2185
2157
2186
zend_object_std_dtor (& sxe -> zo );
2158
2187
2159
- if (!Z_ISUNDEF (sxe -> iter .data )) {
2160
- zval_ptr_dtor (& sxe -> iter .data );
2161
- ZVAL_UNDEF (& sxe -> iter .data );
2162
- }
2163
-
2164
- if (sxe -> iter .name ) {
2165
- efree (sxe -> iter .name );
2166
- sxe -> iter .name = NULL ;
2167
- }
2168
- if (sxe -> iter .nsprefix ) {
2169
- efree (sxe -> iter .nsprefix );
2170
- sxe -> iter .nsprefix = NULL ;
2171
- }
2172
- if (!Z_ISUNDEF (sxe -> tmp )) {
2173
- zval_ptr_dtor (& sxe -> tmp );
2174
- ZVAL_UNDEF (& sxe -> tmp );
2175
- }
2176
-
2177
- php_libxml_node_decrement_resource ((php_libxml_node_object * )sxe );
2178
-
2179
- if (sxe -> xpath ) {
2180
- xmlXPathFreeContext (sxe -> xpath );
2181
- }
2188
+ sxe_object_free_iterxpath (sxe );
2182
2189
2183
2190
if (sxe -> properties ) {
2184
2191
zend_hash_destroy (sxe -> properties );
@@ -2378,11 +2385,12 @@ PHP_METHOD(SimpleXMLElement, __construct)
2378
2385
PHP_LIBXML_RESTORE_GLOBALS (read_file_or_memory );
2379
2386
2380
2387
if (!docp ) {
2381
- ((php_libxml_node_object * )sxe )-> document = NULL ;
2382
2388
zend_throw_exception (zend_ce_exception , "String could not be parsed as XML" , 0 );
2383
2389
RETURN_THROWS ();
2384
2390
}
2385
2391
2392
+ sxe_object_free_iterxpath (sxe );
2393
+
2386
2394
sxe -> iter .nsprefix = ns_len ? (xmlChar * )estrdup (ns ) : NULL ;
2387
2395
sxe -> iter .isprefix = isprefix ;
2388
2396
php_libxml_increment_doc_ref ((php_libxml_node_object * )sxe , docp );
0 commit comments