HEX
Server: Apache
System: Linux insrv.serversdaddy.com 5.14.0-362.24.2.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC Sat Mar 30 14:11:54 EDT 2024 x86_64
User: jsaha (1066)
PHP: 8.3.6
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //opt/cpanel/ea-libxml2/share/doc/libxml2/python/examples/xpathleak.py
#!/usr/bin/env python3
import setup_test
import libxml2
import sys

libxml2.debugMemory(True)

expect="""--> Invalid expression
--> Invalid expression
--> Invalid expression
--> Invalid expression
--> Invalid expression
--> Invalid expression
--> Invalid expression
--> Invalid expression
--> Invalid expression
--> Invalid expression
"""
err=""
def callback(ctx, str):
     global err

     err = err + "%s %s" % (ctx, str)

libxml2.registerErrorHandler(callback, "-->")

doc = libxml2.parseDoc("<fish/>")
ctxt = doc.xpathNewContext()
ctxt.setContextNode(doc)
badexprs = (
	":false()", "bad:()", "bad(:)", ":bad(:)", "bad:(:)", "bad:bad(:)",
	"a:/b", "/c:/d", "//e:/f", "g://h"
	)
for expr in badexprs:
	try:
		ctxt.xpathEval(expr)
	except libxml2.xpathError:
	        pass
	else:
		print("Unexpectedly legal expression:", expr)
ctxt.xpathFreeContext()
doc.freeDoc()

if err != expect:
    print("error")
    print("received %s" %(err))
    print("expected %s" %(expect))
    sys.exit(1)

libxml2.cleanupParser()
leakedbytes = libxml2.debugMemory(True)
if leakedbytes == 0:
	print("OK")
else:
	print("Memory leak", leakedbytes, "bytes")