@@ -64,11 +64,7 @@ typedef struct {
6464 XML_Parser parser ;
6565 XML_Char * target_encoding ;
6666
67- /* Reference to the object itself, for convenience.
68- * It is not owned, do not release it. */
69- zval index ;
70-
71- zend_object * object ;
67+ zend_object * object ; /* object with handlers */
7268 zend_fcall_info_cache startElementHandler ;
7369 zend_fcall_info_cache endElementHandler ;
7470 zend_fcall_info_cache characterDataHandler ;
@@ -641,7 +637,7 @@ void xml_startElementHandler(void *userData, const XML_Char *name, const XML_Cha
641637
642638 if (ZEND_FCC_INITIALIZED (parser -> startElementHandler )) {
643639 zval args [3 ];
644- ZVAL_COPY (& args [0 ], & parser -> index );
640+ ZVAL_OBJ (& args [0 ], & parser -> std );
645641 ZVAL_STR (& args [1 ], xml_stripped_tag (tag_name , parser -> toffset ));
646642 array_init (& args [2 ]);
647643
@@ -660,7 +656,6 @@ void xml_startElementHandler(void *userData, const XML_Char *name, const XML_Cha
660656 }
661657
662658 zend_call_known_fcc (& parser -> startElementHandler , /* retval */ NULL , /* param_count */ 3 , args , /* named_params */ NULL );
663- zval_ptr_dtor (& args [0 ]);
664659 zval_ptr_dtor_str (& args [1 ]);
665660 zval_ptr_dtor (& args [2 ]);
666661 }
@@ -742,11 +737,10 @@ void xml_endElementHandler(void *userData, const XML_Char *name)
742737
743738 if (ZEND_FCC_INITIALIZED (parser -> endElementHandler )) {
744739 zval args [2 ];
745- ZVAL_COPY (& args [0 ], & parser -> index );
740+ ZVAL_OBJ (& args [0 ], & parser -> std );
746741 ZVAL_STR (& args [1 ], xml_stripped_tag (tag_name , parser -> toffset ));
747742
748743 zend_call_known_fcc (& parser -> endElementHandler , /* retval */ NULL , /* param_count */ 2 , args , /* named_params */ NULL );
749- zval_ptr_dtor (& args [0 ]);
750744 zval_ptr_dtor_str (& args [1 ]);
751745 }
752746
@@ -803,11 +797,10 @@ void xml_characterDataHandler(void *userData, const XML_Char *s, int len)
803797
804798 if (ZEND_FCC_INITIALIZED (parser -> characterDataHandler )) {
805799 zval args [2 ];
806- ZVAL_COPY (& args [0 ], & parser -> index );
800+ ZVAL_OBJ (& args [0 ], & parser -> std );
807801 xml_xmlchar_zval (s , len , parser -> target_encoding , & args [1 ]);
808802
809803 zend_call_known_fcc (& parser -> characterDataHandler , /* retval */ NULL , /* param_count */ 2 , args , /* named_params */ NULL );
810- zval_ptr_dtor (& args [0 ]);
811804 zval_ptr_dtor_str (& args [1 ]);
812805 }
813806
@@ -911,12 +904,11 @@ void xml_processingInstructionHandler(void *userData, const XML_Char *target, co
911904
912905 zval args [3 ];
913906
914- ZVAL_COPY (& args [0 ], & parser -> index );
907+ ZVAL_OBJ (& args [0 ], & parser -> std );
915908 xml_xmlchar_zval (target , 0 , parser -> target_encoding , & args [1 ]);
916909 xml_xmlchar_zval (data , 0 , parser -> target_encoding , & args [2 ]);
917910
918911 zend_call_known_fcc (& parser -> processingInstructionHandler , /* retval */ NULL , /* param_count */ 3 , args , /* named_params */ NULL );
919- zval_ptr_dtor (& args [0 ]);
920912 zval_ptr_dtor_str (& args [1 ]);
921913 zval_ptr_dtor_str (& args [2 ]);
922914}
@@ -933,11 +925,10 @@ void xml_defaultHandler(void *userData, const XML_Char *s, int len)
933925
934926 zval args [2 ];
935927
936- ZVAL_COPY (& args [0 ], & parser -> index );
928+ ZVAL_OBJ (& args [0 ], & parser -> std );
937929 xml_xmlchar_zval (s , len , parser -> target_encoding , & args [1 ]);
938930
939931 zend_call_known_fcc (& parser -> defaultHandler , /* retval */ NULL , /* param_count */ 2 , args , /* named_params */ NULL );
940- zval_ptr_dtor (& args [0 ]);
941932 zval_ptr_dtor_str (& args [1 ]);
942933}
943934/* }}} */
@@ -955,15 +946,14 @@ void xml_unparsedEntityDeclHandler(void *userData,
955946
956947 zval args [6 ];
957948
958- ZVAL_COPY (& args [0 ], & parser -> index );
949+ ZVAL_OBJ (& args [0 ], & parser -> std );
959950 xml_xmlchar_zval (entityName , 0 , parser -> target_encoding , & args [1 ]);
960951 xml_xmlchar_zval (base , 0 , parser -> target_encoding , & args [2 ]);
961952 xml_xmlchar_zval (systemId , 0 , parser -> target_encoding , & args [3 ]);
962953 xml_xmlchar_zval (publicId , 0 , parser -> target_encoding , & args [4 ]);
963954 xml_xmlchar_zval (notationName , 0 , parser -> target_encoding , & args [5 ]);
964955
965956 zend_call_known_fcc (& parser -> unparsedEntityDeclHandler , /* retval */ NULL , /* param_count */ 6 , args , /* named_params */ NULL );
966- zval_ptr_dtor (& args [0 ]);
967957 zval_ptr_dtor_str (& args [1 ]);
968958 zval_ptr_dtor_str (& args [2 ]);
969959 zval_ptr_dtor_str (& args [3 ]);
@@ -984,14 +974,13 @@ void xml_notationDeclHandler(void *userData, const XML_Char *notationName,
984974
985975 zval args [5 ];
986976
987- ZVAL_COPY (& args [0 ], & parser -> index );
977+ ZVAL_OBJ (& args [0 ], & parser -> std );
988978 xml_xmlchar_zval (notationName , 0 , parser -> target_encoding , & args [1 ]);
989979 xml_xmlchar_zval (base , 0 , parser -> target_encoding , & args [2 ]);
990980 xml_xmlchar_zval (systemId , 0 , parser -> target_encoding , & args [3 ]);
991981 xml_xmlchar_zval (publicId , 0 , parser -> target_encoding , & args [4 ]);
992982
993983 zend_call_known_fcc (& parser -> notationDeclHandler , /* retval */ NULL , /* param_count */ 5 , args , /* named_params */ NULL );
994- zval_ptr_dtor (& args [0 ]);
995984 zval_ptr_dtor_str (& args [1 ]);
996985 zval_ptr_dtor_str (& args [2 ]);
997986 zval_ptr_dtor_str (& args [3 ]);
@@ -1013,14 +1002,13 @@ int xml_externalEntityRefHandler(XML_Parser userData, const XML_Char *openEntity
10131002 zval args [5 ];
10141003 zval retval ;
10151004
1016- ZVAL_COPY (& args [0 ], & parser -> index );
1005+ ZVAL_OBJ (& args [0 ], & parser -> std );
10171006 xml_xmlchar_zval (openEntityNames , 0 , parser -> target_encoding , & args [1 ]);
10181007 xml_xmlchar_zval (base , 0 , parser -> target_encoding , & args [2 ]);
10191008 xml_xmlchar_zval (systemId , 0 , parser -> target_encoding , & args [3 ]);
10201009 xml_xmlchar_zval (publicId , 0 , parser -> target_encoding , & args [4 ]);
10211010
10221011 zend_call_known_fcc (& parser -> externalEntityRefHandler , /* retval */ & retval , /* param_count */ 5 , args , /* named_params */ NULL );
1023- zval_ptr_dtor (& args [0 ]);
10241012 zval_ptr_dtor_str (& args [1 ]);
10251013 zval_ptr_dtor_str (& args [2 ]);
10261014 zval_ptr_dtor_str (& args [3 ]);
@@ -1048,12 +1036,11 @@ void xml_startNamespaceDeclHandler(void *userData,const XML_Char *prefix, const
10481036
10491037 zval args [3 ];
10501038
1051- ZVAL_COPY (& args [0 ], & parser -> index );
1039+ ZVAL_OBJ (& args [0 ], & parser -> std );
10521040 xml_xmlchar_zval (prefix , 0 , parser -> target_encoding , & args [1 ]);
10531041 xml_xmlchar_zval (uri , 0 , parser -> target_encoding , & args [2 ]);
10541042
10551043 zend_call_known_fcc (& parser -> startNamespaceDeclHandler , /* retval */ NULL , /* param_count */ 3 , args , /* named_params */ NULL );
1056- zval_ptr_dtor (& args [0 ]);
10571044 zval_ptr_dtor_str (& args [1 ]);
10581045 zval_ptr_dtor_str (& args [2 ]);
10591046}
@@ -1070,11 +1057,10 @@ void xml_endNamespaceDeclHandler(void *userData, const XML_Char *prefix)
10701057
10711058 zval args [2 ];
10721059
1073- ZVAL_COPY (& args [0 ], & parser -> index );
1060+ ZVAL_OBJ (& args [0 ], & parser -> std );
10741061 xml_xmlchar_zval (prefix , 0 , parser -> target_encoding , & args [1 ]);
10751062
10761063 zend_call_known_fcc (& parser -> endNamespaceDeclHandler , /* retval */ NULL , /* param_count */ 2 , args , /* named_params */ NULL );
1077- zval_ptr_dtor (& args [0 ]);
10781064 zval_ptr_dtor_str (& args [1 ]);
10791065}
10801066/* }}} */
@@ -1133,7 +1119,6 @@ static void php_xml_parser_create_impl(INTERNAL_FUNCTION_PARAMETERS, int ns_supp
11331119 parser -> parsehuge = false; /* It's the default for BC & DoS protection */
11341120
11351121 XML_SetUserData (parser -> parser , parser );
1136- ZVAL_COPY_VALUE (& parser -> index , return_value );
11371122}
11381123/* }}} */
11391124
0 commit comments