@@ -196,19 +196,25 @@ static void dom_map_cache_obj(dom_nnodemap_object *map, xmlNodePtr itemnode, zen
196196 map -> cached_obj = cached_obj ;
197197}
198198
199- static xmlNodePtr dom_map_get_attr_start ( xmlNodePtr node )
199+ static void dom_map_get_attributes_item ( dom_nnodemap_object * map , zend_long index , zval * return_value )
200200{
201- ZEND_ASSERT (node -> type == XML_ELEMENT_NODE );
202- return (xmlNodePtr ) node -> properties ;
201+ xmlNodePtr nodep = dom_object_get_node (map -> baseobj );
202+ xmlNodePtr itemnode = NULL ;
203+ if (nodep && index >= 0 ) {
204+ ZEND_ASSERT (nodep -> type == XML_ELEMENT_NODE );
205+ itemnode = (xmlNodePtr ) nodep -> properties ;
206+ for (; index > 0 && itemnode ; itemnode = itemnode -> next , index -- );
207+ }
208+ dom_ret_node_to_zobj (map , itemnode , return_value );
203209}
204210
205- static void dom_map_get_chain_item (dom_nnodemap_object * map , zend_long index , zval * return_value , xmlNodePtr ( * get_start )( xmlNodePtr ) )
211+ static void dom_map_get_nodes_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
206212{
207213 xmlNodePtr nodep = dom_object_get_node (map -> baseobj );
208214 xmlNodePtr itemnode = NULL ;
209215 if (nodep && index >= 0 ) {
210216 dom_node_idx_pair start_point = dom_obj_map_get_start_point (map , nodep , index );
211- itemnode = start_point .node ? start_point .node : get_start (nodep );
217+ itemnode = start_point .node ? start_point .node : dom_nodelist_iter_start_first_child (nodep );
212218 for (; start_point .index > 0 && itemnode ; itemnode = itemnode -> next , start_point .index -- );
213219 }
214220 dom_ret_node_to_zobj (map , itemnode , return_value );
@@ -217,16 +223,6 @@ static void dom_map_get_chain_item(dom_nnodemap_object *map, zend_long index, zv
217223 }
218224}
219225
220- static void dom_map_get_attributes_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
221- {
222- dom_map_get_chain_item (map , index , return_value , dom_map_get_attr_start );
223- }
224-
225- static void dom_map_get_nodes_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
226- {
227- dom_map_get_chain_item (map , index , return_value , dom_nodelist_iter_start_first_child );
228- }
229-
230226static void dom_map_get_by_tag_name_item (dom_nnodemap_object * map , zend_long index , zval * return_value )
231227{
232228 xmlNodePtr nodep = dom_object_get_node (map -> baseobj );
@@ -411,7 +407,7 @@ const php_dom_obj_map_handler php_dom_obj_map_attributes = {
411407 .get_item = dom_map_get_attributes_item ,
412408 .get_named_item = dom_map_get_named_item_prop ,
413409 .has_named_item = dom_map_has_named_item_prop ,
414- .use_cache = true ,
410+ .use_cache = false ,
415411 .nameless = false,
416412};
417413
0 commit comments