mirror of
https://github.com/darlinghq/darling-libxml2.git
synced 2025-03-09 05:20:53 +00:00
remove a memory leak on schemas type facets. reduce verbosity incorporated
* relaxng.c: remove a memory leak on schemas type facets. * check-relaxng-test-suite.py check-relaxng-test-suite2.py check-xsddata-test-suite.py: reduce verbosity * configure.in Makefile.am: incorporated the Python regressions tests for Relax-NG and Schemas Datatype to "make tests" Daniel
This commit is contained in:
parent
500a1de533
commit
6dc91962d0
@ -1,3 +1,11 @@
|
||||
Mon Mar 22 20:07:27 CET 2004 Daniel Veillard <daniel@veillard.com>
|
||||
|
||||
* relaxng.c: remove a memory leak on schemas type facets.
|
||||
* check-relaxng-test-suite.py check-relaxng-test-suite2.py
|
||||
check-xsddata-test-suite.py: reduce verbosity
|
||||
* configure.in Makefile.am: incorporated the Python regressions
|
||||
tests for Relax-NG and Schemas Datatype to "make tests"
|
||||
|
||||
Mon Mar 22 16:16:18 CET 2004 Daniel Veillard <daniel@veillard.com>
|
||||
|
||||
* xmlwriter.c include/libxml/xmlwriter.h doc/* : applied patch from
|
||||
|
16
Makefile.am
16
Makefile.am
@ -122,7 +122,7 @@ check-local: tests
|
||||
|
||||
testall : tests SVGtests SAXtests
|
||||
|
||||
tests: XMLtests XMLenttests NStests Errtests @READER_TEST@ @TEST_SAX@ @TEST_PUSH@ @TEST_HTML@ @TEST_PHTML@ @TEST_VALID@ URItests @TEST_XPATH@ @TEST_XPTR@ @TEST_XINCLUDE@ @TEST_C14N@ @TEST_DEBUG@ @TEST_CATALOG@ @TEST_REGEXPS@ @TEST_SCHEMAS@ @TEST_THREADS@ Timingtests @TEST_VTIME@
|
||||
tests: XMLtests XMLenttests NStests Errtests @READER_TEST@ @TEST_SAX@ @TEST_PUSH@ @TEST_HTML@ @TEST_PHTML@ @TEST_VALID@ URItests @TEST_XPATH@ @TEST_XPTR@ @TEST_XINCLUDE@ @TEST_C14N@ @TEST_DEBUG@ @TEST_CATALOG@ @TEST_REGEXPS@ @TEST_SCHEMAS@ @TEST_THREADS@ Timingtests @TEST_VTIME@ @PYTHON_TESTS@
|
||||
@(if [ "@PYTHON_SUBDIR@" != "" ] ; then cd python ; $(MAKE) tests ; fi)
|
||||
@(cd doc/examples ; $(MAKE) tests)
|
||||
|
||||
@ -883,6 +883,20 @@ Relaxtests: xmllint$(EXEEXT)
|
||||
fi ; fi ; \
|
||||
done; done)
|
||||
|
||||
RelaxNGPythonTests:
|
||||
@(if [ -x $(PYTHON) ] ; then \
|
||||
echo "## Relax-NG Python based test suite 1" ; \
|
||||
$(PYTHON) $(srcdir)/check-relaxng-test-suite.py ; \
|
||||
echo "## Relax-NG Python based test suite 2" ; \
|
||||
$(PYTHON) $(srcdir)/check-relaxng-test-suite2.py ; \
|
||||
fi)
|
||||
|
||||
SchemasPythonTests:
|
||||
@(if [ -x $(PYTHON) ] ; then \
|
||||
echo "## XML Schemas datatypes Python based test suite" ; \
|
||||
$(PYTHON) $(srcdir)/check-xsddata-test-suite.py ; \
|
||||
fi)
|
||||
|
||||
cleanup:
|
||||
-@(find . -name .\#\* -exec rm {} \;)
|
||||
|
||||
|
@ -11,6 +11,7 @@ import libxml2
|
||||
libxml2.debugMemory(1)
|
||||
debug = 0
|
||||
verbose = 0
|
||||
quiet = 1
|
||||
|
||||
#
|
||||
# the testsuite description
|
||||
@ -44,6 +45,8 @@ resources = {}
|
||||
def resolver(URL, ID, ctxt):
|
||||
global resources
|
||||
|
||||
if string.find(URL, '#') != -1:
|
||||
URL = URL[0:string.find(URL, '#')]
|
||||
if resources.has_key(URL):
|
||||
return(StringIO.StringIO(resources[URL]))
|
||||
log.write("Resolver failure: asked %s\n" % (URL))
|
||||
@ -306,6 +309,7 @@ def handle_testCase(node):
|
||||
def handle_testSuite(node, level = 0):
|
||||
global nb_schemas_tests, nb_schemas_success, nb_schemas_failed
|
||||
global nb_instances_tests, nb_instances_success, nb_instances_failed
|
||||
global quiet
|
||||
if level >= 1:
|
||||
old_schemas_tests = nb_schemas_tests
|
||||
old_schemas_success = nb_schemas_success
|
||||
@ -324,13 +328,15 @@ def handle_testSuite(node, level = 0):
|
||||
msg = msg + "written by "
|
||||
for author in authors:
|
||||
msg = msg + author.content + " "
|
||||
print msg
|
||||
if quiet == 0:
|
||||
print msg
|
||||
sections = node.xpathEval('section')
|
||||
if sections != [] and level <= 0:
|
||||
msg = ""
|
||||
for section in sections:
|
||||
msg = msg + section.content + " "
|
||||
print "Tests for section %s" % (msg)
|
||||
if quiet == 0:
|
||||
print "Tests for section %s" % (msg)
|
||||
for test in node.xpathEval('testCase'):
|
||||
handle_testCase(test)
|
||||
for test in node.xpathEval('testSuite'):
|
||||
@ -362,12 +368,17 @@ root = testsuite.getRootElement()
|
||||
if root.name != 'testSuite':
|
||||
print "%s doesn't start with a testSuite element, aborting" % (CONF)
|
||||
sys.exit(1)
|
||||
print "Running Relax NG testsuite"
|
||||
if quiet == 0:
|
||||
print "Running Relax NG testsuite"
|
||||
handle_testSuite(root)
|
||||
|
||||
print "\nTOTAL:\nfound %d test schemas: %d success %d failures" % (
|
||||
if quiet == 0:
|
||||
print "\nTOTAL:\n"
|
||||
if quiet == 0 or nb_schemas_failed != 0:
|
||||
print "found %d test schemas: %d success %d failures" % (
|
||||
nb_schemas_tests, nb_schemas_success, nb_schemas_failed)
|
||||
print "found %d test instances: %d success %d failures" % (
|
||||
if quiet == 0 or nb_instances_failed != 0:
|
||||
print "found %d test instances: %d success %d failures" % (
|
||||
nb_instances_tests, nb_instances_success, nb_instances_failed)
|
||||
|
||||
testsuite.freeDoc()
|
||||
@ -376,7 +387,8 @@ testsuite.freeDoc()
|
||||
libxml2.relaxNGCleanupTypes()
|
||||
libxml2.cleanupParser()
|
||||
if libxml2.debugMemory(1) == 0:
|
||||
print "OK"
|
||||
if quiet == 0:
|
||||
print "OK"
|
||||
else:
|
||||
print "Memory leak %d bytes" % (libxml2.debugMemory(1))
|
||||
libxml2.dumpMemory()
|
||||
|
@ -10,6 +10,7 @@ import libxml2
|
||||
# Memory debug specific
|
||||
libxml2.debugMemory(1)
|
||||
debug = 0
|
||||
quiet = 1
|
||||
|
||||
#
|
||||
# the testsuite description
|
||||
@ -67,7 +68,7 @@ def handle_valid(node, schema):
|
||||
instance = instance + child.serialize()
|
||||
child = child.next
|
||||
|
||||
mem = libxml2.debugMemory(1);
|
||||
# mem = libxml2.debugMemory(1);
|
||||
try:
|
||||
doc = libxml2.parseDoc(instance)
|
||||
except:
|
||||
@ -91,9 +92,9 @@ def handle_valid(node, schema):
|
||||
ret = -1
|
||||
|
||||
doc.freeDoc()
|
||||
if mem != libxml2.debugMemory(1):
|
||||
print "validating instance %d line %d leaks" % (
|
||||
nb_instances_tests, node.lineNo())
|
||||
# if mem != libxml2.debugMemory(1):
|
||||
# print "validating instance %d line %d leaks" % (
|
||||
# nb_instances_tests, node.lineNo())
|
||||
|
||||
if ret != 0:
|
||||
log.write("\nFailed to validate correct instance:\n-----\n")
|
||||
@ -120,7 +121,7 @@ def handle_invalid(node, schema):
|
||||
instance = instance + child.serialize()
|
||||
child = child.next
|
||||
|
||||
mem = libxml2.debugMemory(1);
|
||||
# mem = libxml2.debugMemory(1);
|
||||
|
||||
try:
|
||||
doc = libxml2.parseDoc(instance)
|
||||
@ -145,9 +146,10 @@ def handle_invalid(node, schema):
|
||||
ret = -1
|
||||
|
||||
doc.freeDoc()
|
||||
if mem != libxml2.debugMemory(1):
|
||||
print "validating instance %d line %d leaks" % (
|
||||
nb_instances_tests, node.lineNo())
|
||||
# mem2 = libxml2.debugMemory(1)
|
||||
# if mem != mem2:
|
||||
# print "validating instance %d line %d leaks %d bytes" % (
|
||||
# nb_instances_tests, node.lineNo(), mem2 - mem)
|
||||
|
||||
if ret == 0:
|
||||
log.write("\nFailed to detect validation problem in instance:\n-----\n")
|
||||
@ -339,13 +341,15 @@ def handle_testSuite(node, level = 0):
|
||||
msg = msg + "written by "
|
||||
for author in authors:
|
||||
msg = msg + author.content + " "
|
||||
print msg
|
||||
if quiet == 0:
|
||||
print msg
|
||||
sections = node.xpathEval('section')
|
||||
if sections != [] and level <= 0:
|
||||
msg = ""
|
||||
for section in sections:
|
||||
msg = msg + section.content + " "
|
||||
print "Tests for section %s" % (msg)
|
||||
if quiet == 0:
|
||||
print "Tests for section %s" % (msg)
|
||||
for test in node.xpathEval('testCase'):
|
||||
handle_testCase(test)
|
||||
for test in node.xpathEval('testSuite'):
|
||||
@ -387,21 +391,28 @@ root = testsuite.getRootElement()
|
||||
if root.name != 'testSuite':
|
||||
print "%s doesn't start with a testSuite element, aborting" % (CONF)
|
||||
sys.exit(1)
|
||||
print "Running Relax NG testsuite"
|
||||
if quiet == 0:
|
||||
print "Running Relax NG testsuite"
|
||||
handle_testSuite(root)
|
||||
|
||||
print "\nTOTAL:\nfound %d test schemas: %d success %d failures" % (
|
||||
if quiet == 0:
|
||||
print "\nTOTAL:\n"
|
||||
if quiet == 0 or nb_schemas_failed != 0:
|
||||
print "found %d test schemas: %d success %d failures" % (
|
||||
nb_schemas_tests, nb_schemas_success, nb_schemas_failed)
|
||||
print "found %d test instances: %d success %d failures" % (
|
||||
if quiet == 0 or nb_instances_failed != 0:
|
||||
print "found %d test instances: %d success %d failures" % (
|
||||
nb_instances_tests, nb_instances_success, nb_instances_failed)
|
||||
|
||||
|
||||
testsuite.freeDoc()
|
||||
|
||||
# Memory debug specific
|
||||
libxml2.relaxNGCleanupTypes()
|
||||
libxml2.cleanupParser()
|
||||
if libxml2.debugMemory(1) == 0:
|
||||
print "OK"
|
||||
if quiet == 0:
|
||||
print "OK"
|
||||
else:
|
||||
print "Memory leak %d bytes" % (libxml2.debugMemory(1))
|
||||
libxml2.dumpMemory()
|
||||
|
@ -10,7 +10,8 @@ import libxml2
|
||||
# Memory debug specific
|
||||
libxml2.debugMemory(1)
|
||||
debug = 0
|
||||
verbose = 1
|
||||
verbose = 0
|
||||
quiet = 1
|
||||
|
||||
#
|
||||
# the testsuite description
|
||||
@ -119,7 +120,7 @@ def handle_invalid(node, schema):
|
||||
instance = instance + child.serialize()
|
||||
child = child.next
|
||||
|
||||
mem = libxml2.debugMemory(1);
|
||||
# mem = libxml2.debugMemory(1);
|
||||
|
||||
try:
|
||||
doc = libxml2.parseDoc(instance)
|
||||
@ -144,9 +145,9 @@ def handle_invalid(node, schema):
|
||||
ret = -1
|
||||
|
||||
doc.freeDoc()
|
||||
if mem != libxml2.debugMemory(1):
|
||||
print "validating instance %d line %d leaks" % (
|
||||
nb_instances_tests, node.lineNo())
|
||||
# if mem != libxml2.debugMemory(1):
|
||||
# print "validating instance %d line %d leaks" % (
|
||||
# nb_instances_tests, node.lineNo())
|
||||
|
||||
if ret == 0:
|
||||
log.write("\nFailed to detect validation problem in instance:\n-----\n")
|
||||
@ -338,13 +339,15 @@ def handle_testSuite(node, level = 0):
|
||||
msg = msg + "written by "
|
||||
for author in authors:
|
||||
msg = msg + author.content + " "
|
||||
print msg
|
||||
if quiet == 0:
|
||||
print msg
|
||||
sections = node.xpathEval('section')
|
||||
if verbose and sections != [] and level <= 0:
|
||||
msg = ""
|
||||
for section in sections:
|
||||
msg = msg + section.content + " "
|
||||
print "Tests for section %s" % (msg)
|
||||
if quiet == 0:
|
||||
print "Tests for section %s" % (msg)
|
||||
for test in node.xpathEval('testCase'):
|
||||
handle_testCase(test)
|
||||
for test in node.xpathEval('testSuite'):
|
||||
@ -393,12 +396,15 @@ root = testsuite.getRootElement()
|
||||
if root.name != 'testSuite':
|
||||
print "%s doesn't start with a testSuite element, aborting" % (CONF)
|
||||
sys.exit(1)
|
||||
print "Running Relax NG testsuite"
|
||||
if quiet == 0:
|
||||
print "Running Relax NG testsuite"
|
||||
handle_testSuite(root)
|
||||
|
||||
print "\nTOTAL:\nfound %d test schemas: %d success %d failures" % (
|
||||
if quiet == 0 or nb_schemas_failed != 0:
|
||||
print "\nTOTAL:\nfound %d test schemas: %d success %d failures" % (
|
||||
nb_schemas_tests, nb_schemas_success, nb_schemas_failed)
|
||||
print "found %d test instances: %d success %d failures" % (
|
||||
if quiet == 0 or nb_instances_failed != 0:
|
||||
print "found %d test instances: %d success %d failures" % (
|
||||
nb_instances_tests, nb_instances_success, nb_instances_failed)
|
||||
|
||||
testsuite.freeDoc()
|
||||
@ -407,7 +413,8 @@ testsuite.freeDoc()
|
||||
libxml2.relaxNGCleanupTypes()
|
||||
libxml2.cleanupParser()
|
||||
if libxml2.debugMemory(1) == 0:
|
||||
print "OK"
|
||||
if quiet == 0:
|
||||
print "OK"
|
||||
else:
|
||||
print "Memory leak %d bytes" % (libxml2.debugMemory(1))
|
||||
libxml2.dumpMemory()
|
||||
|
@ -256,7 +256,7 @@
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* Define if compiler has function prototypes */
|
||||
/* Define to 1 if the C compiler supports function prototypes. */
|
||||
#undef PROTOTYPES
|
||||
|
||||
/* Determine what socket length (socklen_t) data type is */
|
||||
@ -274,6 +274,9 @@
|
||||
/* Using the Win32 Socket implementation */
|
||||
#undef _WINSOCKAPI_
|
||||
|
||||
/* Define like PROTOTYPES; this can be used by system headers. */
|
||||
#undef __PROTOTYPES
|
||||
|
||||
/* Win32 Std C name mangling work-around */
|
||||
#undef snprintf
|
||||
|
||||
|
@ -326,6 +326,7 @@ PYTHON=
|
||||
PYTHON_VERSION=
|
||||
PYTHON_INCLUDES=
|
||||
PYTHON_SITE_PACKAGES=
|
||||
PYTHON_TESTS=
|
||||
pythondir=
|
||||
AC_ARG_WITH(python,
|
||||
[ --with-python[[=DIR]] build Python bindings if found])
|
||||
@ -954,6 +955,9 @@ else
|
||||
echo "Enabled Schemas/Relax-NG support"
|
||||
WITH_SCHEMAS=1
|
||||
TEST_SCHEMAS="Schemastests Relaxtests"
|
||||
if test "$PYTHON_INCLUDES" != "" ; then
|
||||
PYTHON_TESTS="$PYTHON_TESTS RelaxNGPythonTests SchemasPythonTests"
|
||||
fi
|
||||
with_regexps=yes
|
||||
fi
|
||||
AC_SUBST(WITH_SCHEMAS)
|
||||
@ -1049,6 +1053,7 @@ AC_SUBST(RDL_LIBS)
|
||||
dnl for the spec file
|
||||
RELDATE=`date +'%a %b %e %Y'`
|
||||
AC_SUBST(RELDATE)
|
||||
AC_SUBST(PYTHON_TESTS)
|
||||
|
||||
rm -f COPYING.LIB COPYING
|
||||
ln -s Copyright COPYING
|
||||
|
24
relaxng.c
24
relaxng.c
@ -2501,7 +2501,7 @@ xmlRelaxNGSchemaFacetCheck(void *data ATTRIBUTE_UNUSED,
|
||||
xmlSchemaFreeFacet(facet);
|
||||
return (-1);
|
||||
}
|
||||
facet->value = xmlStrdup(val);
|
||||
facet->value = val;
|
||||
ret = xmlSchemaCheckFacet(facet, typ, NULL, type);
|
||||
if (ret != 0) {
|
||||
xmlSchemaFreeFacet(facet);
|
||||
@ -6871,6 +6871,7 @@ xmlRelaxNGCleanupTree(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr root)
|
||||
xmlChar *href, *ns, *base, *URL;
|
||||
xmlRelaxNGDocumentPtr docu;
|
||||
xmlNodePtr tmp;
|
||||
xmlURIPtr uri;
|
||||
|
||||
ns = xmlGetProp(cur, BAD_CAST "ns");
|
||||
if (ns == NULL) {
|
||||
@ -6891,6 +6892,27 @@ xmlRelaxNGCleanupTree(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr root)
|
||||
delete = cur;
|
||||
goto skip_children;
|
||||
}
|
||||
uri = xmlParseURI((const char *) href);
|
||||
if (uri == NULL) {
|
||||
xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
|
||||
"Incorrect URI for externalRef %s\n",
|
||||
href, NULL);
|
||||
if (href != NULL)
|
||||
xmlFree(href);
|
||||
delete = cur;
|
||||
goto skip_children;
|
||||
}
|
||||
if (uri->fragment != NULL) {
|
||||
xmlRngPErr(ctxt, cur, XML_RNGP_HREF_ERROR,
|
||||
"Fragment forbidden in URI for externalRef %s\n",
|
||||
href, NULL);
|
||||
xmlFreeURI(uri);
|
||||
if (href != NULL)
|
||||
xmlFree(href);
|
||||
delete = cur;
|
||||
goto skip_children;
|
||||
}
|
||||
xmlFreeURI(uri);
|
||||
base = xmlNodeGetBase(cur->doc, cur);
|
||||
URL = xmlBuildURI(href, base);
|
||||
if (URL == NULL) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user