@@ -162,9 +162,8 @@ xmlNode* dom_zvals_to_fragment(php_libxml_ref_obj *document, xmlNode *contextNod
162162 newNode = dom_object_get_node (newNodeObj );
163163
164164 if (newNode -> doc != documentNode ) {
165- xmlFree (fragment );
166165 php_dom_throw_error (WRONG_DOCUMENT_ERR , stricterror );
167- return NULL ;
166+ goto err ;
168167 }
169168
170169 if (newNode -> parent != NULL ) {
@@ -175,10 +174,7 @@ xmlNode* dom_zvals_to_fragment(php_libxml_ref_obj *document, xmlNode *contextNod
175174 xmlSetTreeDoc (newNode , documentNode );
176175
177176 if (newNode -> type == XML_ATTRIBUTE_NODE ) {
178- xmlFree (fragment );
179-
180- php_dom_throw_error (HIERARCHY_REQUEST_ERR , stricterror );
181- return NULL ;
177+ goto hierarchy_request_err ;
182178 }
183179
184180 /*
@@ -191,42 +187,39 @@ xmlNode* dom_zvals_to_fragment(php_libxml_ref_obj *document, xmlNode *contextNod
191187 }
192188
193189 if (!xmlAddChild (fragment , newNode )) {
194- xmlFree (fragment );
195190 if (nodesc > 1 ) {
196191 xmlFreeNode (newNode );
197192 }
198-
199- php_dom_throw_error (HIERARCHY_REQUEST_ERR , stricterror );
200- return NULL ;
193+ goto hierarchy_request_err ;
201194 }
202195
203196 continue ;
204197 } else {
205- xmlFree (fragment );
206-
207198 zend_argument_type_error (i + 1 , "must be of type DOMNode|string, %s given" , zend_zval_type_name (& nodes [i ]));
208- return NULL ;
199+ goto err ;
209200 }
210201 } else if (Z_TYPE (nodes [i ]) == IS_STRING ) {
211202 newNode = xmlNewDocText (documentNode , (xmlChar * ) Z_STRVAL (nodes [i ]));
212203
213204 xmlSetTreeDoc (newNode , documentNode );
214205
215206 if (!xmlAddChild (fragment , newNode )) {
216- xmlFree (fragment );
217-
218- return NULL ;
207+ xmlFreeNode (newNode );
208+ goto hierarchy_request_err ;
219209 }
220210 } else {
221- xmlFree (fragment );
222-
223211 zend_argument_type_error (i + 1 , "must be of type DOMNode|string, %s given" , zend_zval_type_name (& nodes [i ]));
224-
225- return NULL ;
212+ goto err ;
226213 }
227214 }
228215
229216 return fragment ;
217+
218+ hierarchy_request_err :
219+ php_dom_throw_error (HIERARCHY_REQUEST_ERR , stricterror );
220+ err :
221+ xmlFreeNode (fragment );
222+ return NULL ;
230223}
231224
232225static void dom_fragment_assign_parent_node (xmlNodePtr parentNode , xmlNodePtr fragment )
0 commit comments