1#!/usr/bin/python 2import sys, libxml2 3 4libxml2.debugMemory(True) 5 6expect="""--> Invalid expression 7--> xmlXPathEval: evaluation failed 8--> Invalid expression 9--> xmlXPathEval: evaluation failed 10--> Invalid expression 11--> xmlXPathEval: evaluation failed 12--> Invalid expression 13--> xmlXPathEval: evaluation failed 14--> Invalid expression 15--> xmlXPathEval: evaluation failed 16--> Invalid expression 17--> xmlXPathEval: evaluation failed 18""" 19err="" 20def callback(ctx, str): 21 global err 22 23 err = err + "%s %s" % (ctx, str) 24 25libxml2.registerErrorHandler(callback, "-->") 26 27doc = libxml2.parseDoc("<fish/>") 28ctxt = doc.xpathNewContext() 29ctxt.setContextNode(doc) 30for expr in (":false()","bad:()","bad(:)",":bad(:)","bad:(:)","bad:bad(:)"): 31 try: 32 ctxt.xpathEval(expr) 33 except libxml2.xpathError, e: 34 pass 35 else: 36 print "Unexpectedly legal expression:", expr 37ctxt.xpathFreeContext() 38doc.freeDoc() 39 40if err != expect: 41 print "error" 42 print "received %s" %(err) 43 print "expected %s" %(expect) 44 sys.exit(1) 45 46libxml2.cleanupParser() 47leakedbytes = libxml2.debugMemory(True) 48if leakedbytes == 0: 49 print "OK" 50else: 51 print "Memory leak", leakedbytes, "bytes" 52 # drop file to .memdump file in cwd, but won't work if not compiled in 53 libxml2.dumpMemory() 54