1*7c568831SAndroid Build Coastguard Worker#!/usr/bin/env python3 2*7c568831SAndroid Build Coastguard Workerimport setup_test 3*7c568831SAndroid Build Coastguard Workerimport libxml2 4*7c568831SAndroid Build Coastguard Workerimport sys 5*7c568831SAndroid Build Coastguard Worker 6*7c568831SAndroid Build Coastguard Workerlibxml2.debugMemory(True) 7*7c568831SAndroid Build Coastguard Worker 8*7c568831SAndroid Build Coastguard Workerexpect="""--> Invalid expression 9*7c568831SAndroid Build Coastguard Worker--> Invalid expression 10*7c568831SAndroid Build Coastguard Worker--> Invalid expression 11*7c568831SAndroid Build Coastguard Worker--> Invalid expression 12*7c568831SAndroid Build Coastguard Worker--> Invalid expression 13*7c568831SAndroid Build Coastguard Worker--> Invalid expression 14*7c568831SAndroid Build Coastguard Worker--> Invalid expression 15*7c568831SAndroid Build Coastguard Worker--> Invalid expression 16*7c568831SAndroid Build Coastguard Worker--> Invalid expression 17*7c568831SAndroid Build Coastguard Worker--> Invalid expression 18*7c568831SAndroid Build Coastguard Worker""" 19*7c568831SAndroid Build Coastguard Workererr="" 20*7c568831SAndroid Build Coastguard Workerdef callback(ctx, str): 21*7c568831SAndroid Build Coastguard Worker global err 22*7c568831SAndroid Build Coastguard Worker 23*7c568831SAndroid Build Coastguard Worker err = err + "%s %s" % (ctx, str) 24*7c568831SAndroid Build Coastguard Worker 25*7c568831SAndroid Build Coastguard Workerlibxml2.registerErrorHandler(callback, "-->") 26*7c568831SAndroid Build Coastguard Worker 27*7c568831SAndroid Build Coastguard Workerdoc = libxml2.parseDoc("<fish/>") 28*7c568831SAndroid Build Coastguard Workerctxt = doc.xpathNewContext() 29*7c568831SAndroid Build Coastguard Workerctxt.setContextNode(doc) 30*7c568831SAndroid Build Coastguard Workerbadexprs = ( 31*7c568831SAndroid Build Coastguard Worker ":false()", "bad:()", "bad(:)", ":bad(:)", "bad:(:)", "bad:bad(:)", 32*7c568831SAndroid Build Coastguard Worker "a:/b", "/c:/d", "//e:/f", "g://h" 33*7c568831SAndroid Build Coastguard Worker ) 34*7c568831SAndroid Build Coastguard Workerfor expr in badexprs: 35*7c568831SAndroid Build Coastguard Worker try: 36*7c568831SAndroid Build Coastguard Worker ctxt.xpathEval(expr) 37*7c568831SAndroid Build Coastguard Worker except libxml2.xpathError: 38*7c568831SAndroid Build Coastguard Worker pass 39*7c568831SAndroid Build Coastguard Worker else: 40*7c568831SAndroid Build Coastguard Worker print("Unexpectedly legal expression:", expr) 41*7c568831SAndroid Build Coastguard Workerctxt.xpathFreeContext() 42*7c568831SAndroid Build Coastguard Workerdoc.freeDoc() 43*7c568831SAndroid Build Coastguard Worker 44*7c568831SAndroid Build Coastguard Workerif err != expect: 45*7c568831SAndroid Build Coastguard Worker print("error") 46*7c568831SAndroid Build Coastguard Worker print("received %s" %(err)) 47*7c568831SAndroid Build Coastguard Worker print("expected %s" %(expect)) 48*7c568831SAndroid Build Coastguard Worker sys.exit(1) 49*7c568831SAndroid Build Coastguard Worker 50*7c568831SAndroid Build Coastguard Workerlibxml2.cleanupParser() 51*7c568831SAndroid Build Coastguard Workerleakedbytes = libxml2.debugMemory(True) 52*7c568831SAndroid Build Coastguard Workerif leakedbytes == 0: 53*7c568831SAndroid Build Coastguard Worker print("OK") 54*7c568831SAndroid Build Coastguard Workerelse: 55*7c568831SAndroid Build Coastguard Worker print("Memory leak", leakedbytes, "bytes") 56