xref: /aosp_15_r20/external/libxml2/python/tests/xpathleak.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
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