Skip to content

Commit ca4f9b2

Browse files
committed
Merge branch '1771-memory-leak'
2 parents 117ca2e + 0d26561 commit ca4f9b2

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# unreleased
2+
3+
## Bug fixes
4+
5+
* [MRI] Fix memory leak when creating nodes with namespaces. [#1771]
6+
7+
18
# 1.8.3 / 2018-06-16
29

310
## Security Notes

ext/nokogiri/xml_node.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,23 @@ typedef xmlNodePtr (*pivot_reparentee_func)(xmlNodePtr, xmlNodePtr);
3030
/* :nodoc: */
3131
static void relink_namespace(xmlNodePtr reparented)
3232
{
33-
xmlChar *name, *prefix;
3433
xmlNodePtr child;
3534
xmlNsPtr ns;
3635

3736
if (reparented->type != XML_ATTRIBUTE_NODE &&
3837
reparented->type != XML_ELEMENT_NODE) { return; }
3938

4039
if (reparented->ns == NULL || reparented->ns->prefix == NULL) {
40+
xmlChar *name = 0, *prefix = 0;
41+
4142
name = xmlSplitQName2(reparented->name, &prefix);
4243

43-
if(reparented->type == XML_ATTRIBUTE_NODE) {
44-
if (prefix == NULL || strcmp((char*)prefix, XMLNS_PREFIX) == 0) { return; }
44+
if (reparented->type == XML_ATTRIBUTE_NODE) {
45+
if (prefix == NULL || strcmp((char*)prefix, XMLNS_PREFIX) == 0) {
46+
xmlFree(name);
47+
xmlFree(prefix);
48+
return;
49+
}
4550
}
4651

4752
ns = xmlSearchNs(reparented->doc, reparented, prefix);
@@ -54,6 +59,9 @@ static void relink_namespace(xmlNodePtr reparented)
5459
xmlNodeSetName(reparented, name);
5560
xmlSetNs(reparented, ns);
5661
}
62+
63+
xmlFree(name);
64+
xmlFree(prefix);
5765
}
5866

5967
/* Avoid segv when relinking against unlinked nodes. */

0 commit comments

Comments
 (0)