mirror of
https://gitlab.gnome.org/GNOME/libxml2.git
synced 2025-10-21 14:53:44 +03:00
try to fix a problem with valgrind. applied memory leak fix from Brent
* Makefile.am doc/examples/Makefile.am python/tests/Makefile.am xstc/Makefile.am: try to fix a problem with valgrind. * python/generator.py python/libxml.c python/tests/Makefile.am python/tests/tstmem.py: applied memory leak fix from Brent Hendricks c.f. bug #165349 Daniel
This commit is contained in:
@@ -344,6 +344,8 @@ def skip_function(name):
|
||||
# the next function is defined in libxml.c
|
||||
if name == "xmlRelaxNGFreeValidCtxt":
|
||||
return 1
|
||||
if name == "xmlFreeValidCtxt":
|
||||
return 1
|
||||
#
|
||||
# Those are skipped because the Const version is used of the bindings
|
||||
# instead.
|
||||
|
@@ -1858,6 +1858,31 @@ libxml_xmlSetValidErrors(ATTRIBUTE_UNUSED PyObject * self, PyObject * args)
|
||||
return (py_retval);
|
||||
}
|
||||
|
||||
|
||||
PyObject *
|
||||
libxml_xmlFreeValidCtxt(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
|
||||
xmlValidCtxtPtr cur;
|
||||
xmlValidCtxtPyCtxtPtr pyCtxt;
|
||||
PyObject *pyobj_cur;
|
||||
|
||||
if (!PyArg_ParseTuple(args, (char *)"O:xmlFreeValidCtxt", &pyobj_cur))
|
||||
return(NULL);
|
||||
cur = (xmlValidCtxtPtr) PyValidCtxt_Get(pyobj_cur);
|
||||
|
||||
pyCtxt = (xmlValidCtxtPyCtxtPtr)(cur->userData);
|
||||
if (pyCtxt != NULL)
|
||||
{
|
||||
Py_XDECREF(pyCtxt->error);
|
||||
Py_XDECREF(pyCtxt->warn);
|
||||
Py_XDECREF(pyCtxt->arg);
|
||||
xmlFree(pyCtxt);
|
||||
}
|
||||
|
||||
xmlFreeValidCtxt(cur);
|
||||
Py_INCREF(Py_None);
|
||||
return(Py_None);
|
||||
}
|
||||
|
||||
/************************************************************************
|
||||
* *
|
||||
* Per xmlTextReader error handler *
|
||||
@@ -3618,6 +3643,7 @@ static PyMethodDef libxmlMethods[] = {
|
||||
{(char *) "doc", libxml_doc, METH_VARARGS, NULL},
|
||||
{(char *) "xmlNewNode", libxml_xmlNewNode, METH_VARARGS, NULL},
|
||||
{(char *)"xmlSetValidErrors", libxml_xmlSetValidErrors, METH_VARARGS, NULL},
|
||||
{(char *)"xmlFreeValidCtxt", libxml_xmlFreeValidCtxt, METH_VARARGS, NULL},
|
||||
#ifdef LIBXML_OUTPUT_ENABLED
|
||||
{(char *) "serializeNode", libxml_serializeNode, METH_VARARGS, NULL},
|
||||
{(char *) "saveNodeTo", libxml_saveNodeTo, METH_VARARGS, NULL},
|
||||
|
@@ -37,7 +37,8 @@ PYTESTS= \
|
||||
sync.py \
|
||||
tstLastError.py \
|
||||
indexes.py \
|
||||
dtdvalid.py
|
||||
dtdvalid.py \
|
||||
tstmem.py
|
||||
|
||||
XMLS= \
|
||||
tst.xml \
|
||||
|
36
python/tests/tstmem.py
Executable file
36
python/tests/tstmem.py
Executable file
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/python -u
|
||||
import libxml2
|
||||
import libxml2mod
|
||||
import sys
|
||||
|
||||
def error(msg, data):
|
||||
pass
|
||||
|
||||
# Memory debug specific
|
||||
libxml2.debugMemory(1)
|
||||
|
||||
dtd="""<!ELEMENT foo EMPTY>"""
|
||||
instance="""<?xml version="1.0"?>
|
||||
<foo></foo>"""
|
||||
|
||||
dtd = libxml2.parseDTD(None, 'test.dtd')
|
||||
ctxt = libxml2.newValidCtxt()
|
||||
libxml2mod.xmlSetValidErrors(ctxt._o, error, error)
|
||||
doc = libxml2.parseDoc(instance)
|
||||
ret = doc.validateDtd(ctxt, dtd)
|
||||
if ret != 1:
|
||||
print "error doing DTD validation"
|
||||
sys.exit(1)
|
||||
|
||||
doc.freeDoc()
|
||||
dtd.freeDtd()
|
||||
del dtd
|
||||
del ctxt
|
||||
|
||||
# Memory debug specific
|
||||
libxml2.cleanupParser()
|
||||
if libxml2.debugMemory(1) == 0:
|
||||
print "OK"
|
||||
else:
|
||||
print "Memory leak %d bytes" % (libxml2.debugMemory(1))
|
||||
libxml2.dumpMemory()
|
Reference in New Issue
Block a user