(root)/
libxml2-2.12.3/
python/
tests/
xpathleak.py
       1  #!/usr/bin/env python3
       2  import setup_test
       3  import libxml2
       4  import sys
       5  
       6  libxml2.debugMemory(True)
       7  
       8  expect="""--> 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  """
      19  err=""
      20  def callback(ctx, str):
      21       global err
      22  
      23       err = err + "%s %s" % (ctx, str)
      24  
      25  libxml2.registerErrorHandler(callback, "-->")
      26  
      27  doc = libxml2.parseDoc("<fish/>")
      28  ctxt = doc.xpathNewContext()
      29  ctxt.setContextNode(doc)
      30  badexprs = (
      31  	":false()", "bad:()", "bad(:)", ":bad(:)", "bad:(:)", "bad:bad(:)",
      32  	"a:/b", "/c:/d", "//e:/f", "g://h"
      33  	)
      34  for expr in badexprs:
      35  	try:
      36  		ctxt.xpathEval(expr)
      37  	except libxml2.xpathError:
      38  	        pass
      39  	else:
      40  		print("Unexpectedly legal expression:", expr)
      41  ctxt.xpathFreeContext()
      42  doc.freeDoc()
      43  
      44  if err != expect:
      45      print("error")
      46      print("received %s" %(err))
      47      print("expected %s" %(expect))
      48      sys.exit(1)
      49  
      50  libxml2.cleanupParser()
      51  leakedbytes = libxml2.debugMemory(True)
      52  if leakedbytes == 0:
      53  	print("OK")
      54  else:
      55  	print("Memory leak", leakedbytes, "bytes")