Skip to content

Commit 94a00e9

Browse files
committed
Merge branch 'PHP-8.1' into PHP-8.2
* PHP-8.1: Fix incorrect error handling in dom_zvals_to_fragment()
2 parents aeb32bb + 0579beb commit 94a00e9

File tree

2 files changed

+14
-20
lines changed

2 files changed

+14
-20
lines changed

Diff for: NEWS

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ PHP NEWS
1212
- DOM:
1313
. Fixed bug #80602 (Segfault when using DOMChildNode::before()).
1414
(Nathan Freeman)
15+
. Fixed incorrect error handling in dom_zvals_to_fragment(). (nielsdos)
1516

1617
- PCRE:
1718
. Fixed bug GH-10968 (Segfault in preg_replace_callback_array()). (ilutov)

Diff for: ext/dom/parentnode.c

+13-20
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_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

232225
static void dom_fragment_assign_parent_node(xmlNodePtr parentNode, xmlNodePtr fragment)

0 commit comments

Comments
 (0)