Blame python/tests/xpathleak.py

Packit Service a31ea6
#!/usr/bin/python
Packit Service a31ea6
import sys, libxml2
Packit Service a31ea6
Packit Service a31ea6
libxml2.debugMemory(True)
Packit Service a31ea6
Packit Service a31ea6
expect="""--> Invalid expression
Packit Service a31ea6
--> Invalid expression
Packit Service a31ea6
--> Invalid expression
Packit Service a31ea6
--> Invalid expression
Packit Service a31ea6
--> Invalid expression
Packit Service a31ea6
--> Invalid expression
Packit Service a31ea6
--> Invalid expression
Packit Service a31ea6
--> Invalid expression
Packit Service a31ea6
--> Invalid expression
Packit Service a31ea6
--> Invalid expression
Packit Service a31ea6
"""
Packit Service a31ea6
err=""
Packit Service a31ea6
def callback(ctx, str):
Packit Service a31ea6
     global err
Packit Service a31ea6
Packit Service a31ea6
     err = err + "%s %s" % (ctx, str)
Packit Service a31ea6
Packit Service a31ea6
libxml2.registerErrorHandler(callback, "-->")
Packit Service a31ea6
Packit Service a31ea6
doc = libxml2.parseDoc("<fish/>")
Packit Service a31ea6
ctxt = doc.xpathNewContext()
Packit Service a31ea6
ctxt.setContextNode(doc)
Packit Service a31ea6
badexprs = (
Packit Service a31ea6
	":false()", "bad:()", "bad(:)", ":bad(:)", "bad:(:)", "bad:bad(:)",
Packit Service a31ea6
	"a:/b", "/c:/d", "//e:/f", "g://h"
Packit Service a31ea6
	)
Packit Service a31ea6
for expr in badexprs:
Packit Service a31ea6
	try:
Packit Service a31ea6
		ctxt.xpathEval(expr)
Packit Service a31ea6
	except libxml2.xpathError:
Packit Service a31ea6
	        pass
Packit Service a31ea6
	else:
Packit Service a31ea6
		print("Unexpectedly legal expression:", expr)
Packit Service a31ea6
ctxt.xpathFreeContext()
Packit Service a31ea6
doc.freeDoc()
Packit Service a31ea6
Packit Service a31ea6
if err != expect:
Packit Service a31ea6
    print("error")
Packit Service a31ea6
    print("received %s" %(err))
Packit Service a31ea6
    print("expected %s" %(expect))
Packit Service a31ea6
    sys.exit(1)
Packit Service a31ea6
Packit Service a31ea6
libxml2.cleanupParser()
Packit Service a31ea6
leakedbytes = libxml2.debugMemory(True)
Packit Service a31ea6
if leakedbytes == 0:
Packit Service a31ea6
	print("OK")
Packit Service a31ea6
else:
Packit Service a31ea6
	print("Memory leak", leakedbytes, "bytes")
Packit Service a31ea6
	# drop file to .memdump file in cwd, but won't work if not compiled in
Packit Service a31ea6
	libxml2.dumpMemory()