xref: /aosp_15_r20/external/libxml2/python/tests/xpathleak.py (revision 7c5688314b92172186c154356a6374bf7684c3ca)
1#!/usr/bin/env python3
2import setup_test
3import libxml2
4import sys
5
6libxml2.debugMemory(True)
7
8expect="""--> Invalid expression
9--> Invalid expression
10--> Invalid expression
11--> Invalid expression
12--> Invalid expression
13--> Invalid expression
14--> Invalid expression
15--> Invalid expression
16--> Invalid expression
17--> Invalid expression
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)
30badexprs = (
31	":false()", "bad:()", "bad(:)", ":bad(:)", "bad:(:)", "bad:bad(:)",
32	"a:/b", "/c:/d", "//e:/f", "g://h"
33	)
34for expr in badexprs:
35	try:
36		ctxt.xpathEval(expr)
37	except libxml2.xpathError:
38	        pass
39	else:
40		print("Unexpectedly legal expression:", expr)
41ctxt.xpathFreeContext()
42doc.freeDoc()
43
44if err != expect:
45    print("error")
46    print("received %s" %(err))
47    print("expected %s" %(expect))
48    sys.exit(1)
49
50libxml2.cleanupParser()
51leakedbytes = libxml2.debugMemory(True)
52if leakedbytes == 0:
53	print("OK")
54else:
55	print("Memory leak", leakedbytes, "bytes")
56