2008-09-01 13:38:22 +00:00
#!/usr/bin/python
import sys , libxml2
libxml2 . debugMemory ( True )
expect = """ --> Invalid expression
- - > xmlXPathEval : evaluation failed
- - > Invalid expression
- - > xmlXPathEval : evaluation failed
- - > Invalid expression
- - > xmlXPathEval : evaluation failed
- - > Invalid expression
- - > xmlXPathEval : evaluation failed
- - > Invalid expression
- - > xmlXPathEval : evaluation failed
- - > Invalid expression
- - > xmlXPathEval : evaluation failed
2009-10-12 22:42:26 +02:00
- - > Invalid expression
- - > xmlXPathEval : evaluation failed
- - > Invalid expression
- - > xmlXPathEval : evaluation failed
- - > Invalid expression
- - > xmlXPathEval : evaluation failed
- - > Invalid expression
- - > xmlXPathEval : evaluation failed
2008-09-01 13:38:22 +00:00
"""
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 )
2009-10-12 22:42:26 +02:00
badexprs = (
" :false() " , " bad:() " , " bad(:) " , " :bad(:) " , " bad:(:) " , " bad:bad(:) " ,
" a:/b " , " /c:/d " , " //e:/f " , " g://h "
)
for expr in badexprs :
2008-09-01 13:38:22 +00:00
try :
ctxt . xpathEval ( expr )
2013-04-02 10:27:57 +08:00
except libxml2 . xpathError :
2008-09-01 13:38:22 +00:00
pass
else :
2013-03-30 21:38:20 +08:00
print ( " Unexpectedly legal expression: " , expr )
2008-09-01 13:38:22 +00:00
ctxt . xpathFreeContext ( )
doc . freeDoc ( )
if err != expect :
2013-03-30 21:38:20 +08:00
print ( " error " )
print ( " received %s " % ( err ) )
print ( " expected %s " % ( expect ) )
2008-09-01 13:38:22 +00:00
sys . exit ( 1 )
libxml2 . cleanupParser ( )
leakedbytes = libxml2 . debugMemory ( True )
if leakedbytes == 0 :
2013-03-30 21:38:20 +08:00
print ( " OK " )
2008-09-01 13:38:22 +00:00
else :
2013-03-30 21:38:20 +08:00
print ( " Memory leak " , leakedbytes , " bytes " )
2008-09-01 13:38:22 +00:00
# drop file to .memdump file in cwd, but won't work if not compiled in
libxml2 . dumpMemory ( )