memory leak from `xmlSchemaValidateStream` in v2.11.x
I'm seeing what appears to be a significant memory leak when using xmlSchemaValidateStream
. Bisecting leads me to believe that this behavior was introduced in 9a82b94a.
A full repro, including an XSD and both valid and invalid XML files, is at https://gist.github.com/flavorjones/0902cfc1467d44417979060dd3f11971
But here's the C code for convenience:
#include <libxml/xmlschemas.h>
void validate(xmlSchemaPtr schema, const char *filename) {
xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);
xmlSchemaValidateFile(valid_ctxt, filename, 0);
xmlSchemaFreeValidCtxt(valid_ctxt);
}
int main(int argc, char **argv) {
if (argc < 2) {
fprintf(stderr, "Usage: %s <schemafile> <documentfile>\n", argv[0]);
return 1;
}
fprintf(stderr, "using libxml2 version %s\n", xmlParserVersion);
const char* schemafile = argv[1];
const char* documentfile = argv[2];
xmlDocPtr document = xmlReadFile(schemafile, NULL, 0);
xmlSchemaParserCtxtPtr parser_context = xmlSchemaNewDocParserCtxt(document);
xmlSchemaPtr schema = xmlSchemaParse(parser_context);
for (int j = 0; j < 1000; j++) {
validate(schema, documentfile);
}
xmlSchemaFreeParserCtxt(parser_context);
xmlSchemaFree(schema);
xmlFreeDoc(document);
}
When run under valgrind --leak-check-full
there are many instances of memory leaks in 9a82b94a and later that are not present in any earlier commmits:
+ valgrind --error-exitcode=42 --leak-check=full ./foo foo.xsd valid.xml
==937846== Memcheck, a memory error detector
==937846== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==937846== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==937846== Command: ./foo foo.xsd valid.xml
==937846==
--937846-- WARNING: unhandled amd64-linux syscall: 334
--937846-- You may be able to write your own handler.
--937846-- Read the file README_MISSING_SYSCALL_OR_IOCTL.
--937846-- Nevertheless we consider this a bug. Please report
--937846-- it at http://valgrind.org/support/bug_reports.html.
using libxml2 version 21000-GITv2.10.0-30-g9a82b94a
==937846==
==937846== HEAP SUMMARY:
==937846== in use at exit: 10,831,000 bytes in 170,000 blocks
==937846== total heap usage: 252,826 allocs, 82,826 frees, 74,527,400 bytes allocated
==937846==
==937846== 4 bytes in 1 blocks are possibly lost in loss record 1 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x490B8D3: xmlStrndup (xmlstring.c:46)
==937846== by 0x48BBD34: xmlNewDoc (tree.c:1176)
==937846== by 0x495DA10: xmlSAX2StartDocument (SAX2.c:968)
==937846== by 0x48B7CBA: xmlParseDocument (parser.c:10764)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 10 bytes in 1 blocks are possibly lost in loss record 2 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x490B8D3: xmlStrndup (xmlstring.c:46)
==937846== by 0x48BCB3C: xmlNewPropInternal (tree.c:1898)
==937846== by 0x495F58C: xmlSAX2AttributeNs (SAX2.c:2025)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B504C: xmlParseElement (parser.c:9980)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 11 bytes in 1 blocks are possibly lost in loss record 3 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x490B8D3: xmlStrndup (xmlstring.c:46)
==937846== by 0x495F09A: xmlSAX2TextNode (SAX2.c:1900)
==937846== by 0x495F375: xmlSAX2AttributeNs (SAX2.c:2063)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B504C: xmlParseElement (parser.c:9980)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 14 bytes in 1 blocks are possibly lost in loss record 4 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x490B8D3: xmlStrndup (xmlstring.c:46)
==937846== by 0x48BC349: xmlNewNode (tree.c:2269)
==937846== by 0x48C0AB7: xmlNewDocNode (tree.c:2347)
==937846== by 0x495F976: xmlSAX2StartElementNs (SAX2.c:2278)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B504C: xmlParseElement (parser.c:9980)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 20 bytes in 4 blocks are possibly lost in loss record 5 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x490B8D3: xmlStrndup (xmlstring.c:46)
==937846== by 0x495F09A: xmlSAX2TextNode (SAX2.c:1900)
==937846== by 0x495F375: xmlSAX2AttributeNs (SAX2.c:2063)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B43B7: xmlParseContentInternal (parser.c:9908)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 32 bytes in 4 blocks are possibly lost in loss record 6 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x490B8D3: xmlStrndup (xmlstring.c:46)
==937846== by 0x48BCB3C: xmlNewPropInternal (tree.c:1898)
==937846== by 0x495F58C: xmlSAX2AttributeNs (SAX2.c:2025)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B43B7: xmlParseContentInternal (parser.c:9908)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 51 bytes in 6 blocks are possibly lost in loss record 7 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x490B8D3: xmlStrndup (xmlstring.c:46)
==937846== by 0x495F09A: xmlSAX2TextNode (SAX2.c:1900)
==937846== by 0x4960144: xmlSAX2Text (SAX2.c:2561)
==937846== by 0x4921130: charactersSplit (xmlschemas.c:28730)
==937846== by 0x48B4262: xmlParseContentInternal (parser.c:9925)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 96 bytes in 1 blocks are possibly lost in loss record 8 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x48BC90D: xmlNewPropInternal (tree.c:1875)
==937846== by 0x495F58C: xmlSAX2AttributeNs (SAX2.c:2025)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B504C: xmlParseElement (parser.c:9980)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 120 bytes in 1 blocks are possibly lost in loss record 9 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x48BC304: xmlNewNode (tree.c:2261)
==937846== by 0x48C0AB7: xmlNewDocNode (tree.c:2347)
==937846== by 0x495F976: xmlSAX2StartElementNs (SAX2.c:2278)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B504C: xmlParseElement (parser.c:9980)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 120 bytes in 1 blocks are possibly lost in loss record 10 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x495F145: xmlSAX2TextNode (SAX2.c:1861)
==937846== by 0x495F375: xmlSAX2AttributeNs (SAX2.c:2063)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B504C: xmlParseElement (parser.c:9980)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 167 bytes in 24 blocks are possibly lost in loss record 11 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x490B8D3: xmlStrndup (xmlstring.c:46)
==937846== by 0x48BC349: xmlNewNode (tree.c:2269)
==937846== by 0x48C0AB7: xmlNewDocNode (tree.c:2347)
==937846== by 0x495F976: xmlSAX2StartElementNs (SAX2.c:2278)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B43B7: xmlParseContentInternal (parser.c:9908)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 176 bytes in 1 blocks are possibly lost in loss record 12 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x48BBCE9: xmlNewDoc (tree.c:1168)
==937846== by 0x495DA10: xmlSAX2StartDocument (SAX2.c:968)
==937846== by 0x48B7CBA: xmlParseDocument (parser.c:10764)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 186 bytes in 24 blocks are possibly lost in loss record 13 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x490B8D3: xmlStrndup (xmlstring.c:46)
==937846== by 0x495F09A: xmlSAX2TextNode (SAX2.c:1900)
==937846== by 0x496016A: xmlSAX2Text (SAX2.c:2637)
==937846== by 0x4921130: charactersSplit (xmlschemas.c:28730)
==937846== by 0x48B4262: xmlParseContentInternal (parser.c:9925)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 200 bytes in 19 blocks are possibly lost in loss record 14 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x490B8D3: xmlStrndup (xmlstring.c:46)
==937846== by 0x495F09A: xmlSAX2TextNode (SAX2.c:1900)
==937846== by 0x4960144: xmlSAX2Text (SAX2.c:2561)
==937846== by 0x4921130: charactersSplit (xmlschemas.c:28730)
==937846== by 0x48A7CDC: xmlParseCharData (parser.c:4517)
==937846== by 0x48B4262: xmlParseContentInternal (parser.c:9925)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 384 bytes in 4 blocks are possibly lost in loss record 15 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x48BC90D: xmlNewPropInternal (tree.c:1875)
==937846== by 0x495F58C: xmlSAX2AttributeNs (SAX2.c:2025)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B43B7: xmlParseContentInternal (parser.c:9908)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 480 bytes in 4 blocks are possibly lost in loss record 16 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x495F145: xmlSAX2TextNode (SAX2.c:1861)
==937846== by 0x495F375: xmlSAX2AttributeNs (SAX2.c:2063)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B43B7: xmlParseContentInternal (parser.c:9908)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 720 bytes in 6 blocks are possibly lost in loss record 17 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x495F145: xmlSAX2TextNode (SAX2.c:1861)
==937846== by 0x4960144: xmlSAX2Text (SAX2.c:2561)
==937846== by 0x4921130: charactersSplit (xmlschemas.c:28730)
==937846== by 0x48B4262: xmlParseContentInternal (parser.c:9925)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 2,280 bytes in 19 blocks are possibly lost in loss record 18 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x495F145: xmlSAX2TextNode (SAX2.c:1861)
==937846== by 0x4960144: xmlSAX2Text (SAX2.c:2561)
==937846== by 0x4921130: charactersSplit (xmlschemas.c:28730)
==937846== by 0x48A7CDC: xmlParseCharData (parser.c:4517)
==937846== by 0x48B4262: xmlParseContentInternal (parser.c:9925)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 2,880 bytes in 24 blocks are possibly lost in loss record 19 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x48BC304: xmlNewNode (tree.c:2261)
==937846== by 0x48C0AB7: xmlNewDocNode (tree.c:2347)
==937846== by 0x495F976: xmlSAX2StartElementNs (SAX2.c:2278)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B43B7: xmlParseContentInternal (parser.c:9908)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 2,880 bytes in 24 blocks are possibly lost in loss record 20 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x495F145: xmlSAX2TextNode (SAX2.c:1861)
==937846== by 0x496016A: xmlSAX2Text (SAX2.c:2637)
==937846== by 0x4921130: charactersSplit (xmlschemas.c:28730)
==937846== by 0x48B4262: xmlParseContentInternal (parser.c:9925)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 10,831 (120 direct, 10,711 indirect) bytes in 1 blocks are definitely lost in loss record 23 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x495F145: xmlSAX2TextNode (SAX2.c:1861)
==937846== by 0x495F375: xmlSAX2AttributeNs (SAX2.c:2063)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B43B7: xmlParseContentInternal (parser.c:9908)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 21,662 (192 direct, 21,470 indirect) bytes in 2 blocks are definitely lost in loss record 27 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x48BC90D: xmlNewPropInternal (tree.c:1875)
==937846== by 0x495F58C: xmlSAX2AttributeNs (SAX2.c:2025)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B504C: xmlParseElement (parser.c:9980)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 32,493 (360 direct, 32,133 indirect) bytes in 3 blocks are definitely lost in loss record 29 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x495F145: xmlSAX2TextNode (SAX2.c:1861)
==937846== by 0x495F375: xmlSAX2AttributeNs (SAX2.c:2063)
==937846== by 0x495FC8D: xmlSAX2StartElementNs (SAX2.c:2417)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B504C: xmlParseElement (parser.c:9980)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 43,324 (480 direct, 42,844 indirect) bytes in 4 blocks are definitely lost in loss record 30 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x48BC304: xmlNewNode (tree.c:2261)
==937846== by 0x48C0AB7: xmlNewDocNode (tree.c:2347)
==937846== by 0x495F976: xmlSAX2StartElementNs (SAX2.c:2278)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B504C: xmlParseElement (parser.c:9980)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 43,324 (480 direct, 42,844 indirect) bytes in 4 blocks are definitely lost in loss record 31 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x495F145: xmlSAX2TextNode (SAX2.c:1861)
==937846== by 0x4960144: xmlSAX2Text (SAX2.c:2561)
==937846== by 0x4921130: charactersSplit (xmlschemas.c:28730)
==937846== by 0x48A7CDC: xmlParseCharData (parser.c:4517)
==937846== by 0x48B4262: xmlParseContentInternal (parser.c:9925)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 574,043 (6,360 direct, 567,683 indirect) bytes in 53 blocks are definitely lost in loss record 42 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x495F145: xmlSAX2TextNode (SAX2.c:1861)
==937846== by 0x4960144: xmlSAX2Text (SAX2.c:2561)
==937846== by 0x4921130: charactersSplit (xmlschemas.c:28730)
==937846== by 0x48B4262: xmlParseContentInternal (parser.c:9925)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 3,303,455 (36,600 direct, 3,266,855 indirect) bytes in 305 blocks are definitely lost in loss record 47 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x48BC304: xmlNewNode (tree.c:2261)
==937846== by 0x48C0AB7: xmlNewDocNode (tree.c:2347)
==937846== by 0x495F976: xmlSAX2StartElementNs (SAX2.c:2278)
==937846== by 0x493AD9D: startElementNsSplit (xmlschemas.c:28785)
==937846== by 0x48B0B56: xmlParseStartTag2 (parser.c:9658)
==937846== by 0x48B1436: xmlParseElementStart (parser.c:10043)
==937846== by 0x48B43B7: xmlParseContentInternal (parser.c:9908)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 3,379,272 (37,440 direct, 3,341,832 indirect) bytes in 312 blocks are definitely lost in loss record 48 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x495F145: xmlSAX2TextNode (SAX2.c:1861)
==937846== by 0x496016A: xmlSAX2Text (SAX2.c:2637)
==937846== by 0x4921130: charactersSplit (xmlschemas.c:28730)
==937846== by 0x48B4262: xmlParseContentInternal (parser.c:9925)
==937846== by 0x48B505F: xmlParseElement (parser.c:9983)
==937846== by 0x48B7EC9: xmlParseDocument (parser.c:10820)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== 3,411,765 (55,440 direct, 3,356,325 indirect) bytes in 315 blocks are definitely lost in loss record 49 of 49
==937846== at 0x4848855: malloc (vg_replace_malloc.c:381)
==937846== by 0x48BBCE9: xmlNewDoc (tree.c:1168)
==937846== by 0x495DA10: xmlSAX2StartDocument (SAX2.c:968)
==937846== by 0x48B7CBA: xmlParseDocument (parser.c:10764)
==937846== by 0x493B17C: xmlSchemaVStart (xmlschemas.c:28401)
==937846== by 0x493BAE9: xmlSchemaValidateStream (xmlschemas.c:29107)
==937846== by 0x1092C4: validate (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846== by 0x1093AF: main (in /home/flavorjones/code/oss/nokogiri/issues/2865-schema-validation-memory-leak/foo)
==937846==
==937846== LEAK SUMMARY:
==937846== definitely lost: 137,472 bytes in 999 blocks
==937846== indirectly lost: 10,682,697 bytes in 168,831 blocks
==937846== possibly lost: 10,831 bytes in 170 blocks
==937846== still reachable: 0 bytes in 0 blocks
==937846== suppressed: 0 bytes in 0 blocks
==937846==
==937846== For lists of detected and suppressed errors, rerun with: -s
==937846== ERROR SUMMARY: 29 errors from 29 contexts (suppressed: 0 from 0)
I haven't had time to dig into the cause of these memory leaks. I'll also note that the same XML operation does not leak when I call xmlSchemaValidateDoc
on a parse doc -- only xmlSchemaValidateStream
seems to leak.
Edited by Mike Dalessio