1 #!/usr/bin/python 2 import sys, libxml2 3 4 libxml2.debugMemory(True) 5 6 expect="""--> 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 --> Invalid expression 19 --> xmlXPathEval: evaluation failed 20 --> Invalid expression 21 --> xmlXPathEval: evaluation failed 22 --> Invalid expression 23 --> xmlXPathEval: evaluation failed 24 --> Invalid expression 25 --> xmlXPathEval: evaluation failed 26 """ 27 err="" 28 def callback(ctx, str): 29 global err 30 31 err = err + "%s %s" % (ctx, str) 32 33 libxml2.registerErrorHandler(callback, "-->") 34 35 doc = libxml2.parseDoc("<fish/>") 36 ctxt = doc.xpathNewContext() 37 ctxt.setContextNode(doc) 38 badexprs = ( 39 ":false()", "bad:()", "bad(:)", ":bad(:)", "bad:(:)", "bad:bad(:)", 40 "a:/b", "/c:/d", "//e:/f", "g://h" 41 ) 42 for expr in badexprs: 43 try: 44 ctxt.xpathEval(expr) 45 except libxml2.xpathError: 46 pass 47 else: 48 print("Unexpectedly legal expression:", expr) 49 ctxt.xpathFreeContext() 50 doc.freeDoc() 51 52 if err != expect: 53 print("error") 54 print("received %s" %(err)) 55 print("expected %s" %(expect)) 56 sys.exit(1) 57 58 libxml2.cleanupParser() 59 leakedbytes = libxml2.debugMemory(True) 60 if leakedbytes == 0: 61 print("OK") 62 else: 63 print("Memory leak", leakedbytes, "bytes") 64 # drop file to .memdump file in cwd, but won't work if not compiled in 65 libxml2.dumpMemory() 66