@@ -234,15 +234,6 @@ PHP_METHOD(DOMXPath, registerNamespace)
234234}
235235/* }}} */
236236
237- static void dom_xpath_iter (zval * baseobj , dom_object * intern ) /* {{{ */
238- {
239- dom_nnodemap_object * mapptr = (dom_nnodemap_object * ) intern -> ptr ;
240-
241- ZVAL_COPY_VALUE (& mapptr -> baseobj_zv , baseobj );
242- mapptr -> handler = & php_dom_obj_map_nodeset ;
243- }
244- /* }}} */
245-
246237static void php_xpath_eval (INTERNAL_FUNCTION_PARAMETERS , int type , bool modern ) /* {{{ */
247238{
248239 zval * context = NULL ;
@@ -335,6 +326,7 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type, bool modern)
335326 {
336327 xmlNodeSetPtr nodesetp ;
337328 zval retval ;
329+ bool release_array = false;
338330
339331 if (xpathobjp -> type == XPATH_NODESET && NULL != (nodesetp = xpathobjp -> nodesetval ) && nodesetp -> nodeNr ) {
340332 array_init_size (& retval , nodesetp -> nodeNr );
@@ -369,12 +361,18 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type, bool modern)
369361 }
370362 add_next_index_zval (& retval , & child );
371363 }
364+ release_array = true;
372365 } else {
373366 ZVAL_EMPTY_ARRAY (& retval );
374367 }
368+
375369 object_init_ex (return_value , dom_get_nodelist_ce (modern ));
376370 nodeobj = Z_DOMOBJ_P (return_value );
377- dom_xpath_iter (& retval , nodeobj );
371+ dom_nnodemap_object * mapptr = nodeobj -> ptr ;
372+
373+ mapptr -> array = Z_ARR (retval );
374+ mapptr -> release_array = release_array ;
375+ mapptr -> handler = & php_dom_obj_map_nodeset ;
378376 break ;
379377 }
380378
0 commit comments