Skip to content

Commit fb5e77b

Browse files
committed
Merge branch 'PHP-8.2'
* PHP-8.2: Fix incorrect error handling in dom_zvals_to_fragment()
2 parents ce47e59 + 94a00e9 commit fb5e77b

File tree

1 file changed

+13
-20
lines changed

1 file changed

+13
-20
lines changed

ext/dom/parentnode.c

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -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_value_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_value_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

232225
static void dom_fragment_assign_parent_node(xmlNodePtr parentNode, xmlNodePtr fragment)

0 commit comments

Comments
 (0)