Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 1 | #!/usr/bin/python |
| 2 | import sys, libxml2 |
| 3 | |
| 4 | libxml2.debugMemory(True) |
| 5 | |
| 6 | expect="""--> Invalid expression |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 7 | --> Invalid expression |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 8 | --> Invalid expression |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 9 | --> Invalid expression |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 10 | --> Invalid expression |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 11 | --> Invalid expression |
Martin | 729601f | 2009-10-12 22:42:26 +0200 | [diff] [blame] | 12 | --> Invalid expression |
Martin | 729601f | 2009-10-12 22:42:26 +0200 | [diff] [blame] | 13 | --> Invalid expression |
Martin | 729601f | 2009-10-12 22:42:26 +0200 | [diff] [blame] | 14 | --> Invalid expression |
Martin | 729601f | 2009-10-12 22:42:26 +0200 | [diff] [blame] | 15 | --> Invalid expression |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 16 | """ |
| 17 | err="" |
| 18 | def callback(ctx, str): |
| 19 | global err |
| 20 | |
| 21 | err = err + "%s %s" % (ctx, str) |
| 22 | |
| 23 | libxml2.registerErrorHandler(callback, "-->") |
| 24 | |
| 25 | doc = libxml2.parseDoc("<fish/>") |
| 26 | ctxt = doc.xpathNewContext() |
| 27 | ctxt.setContextNode(doc) |
Martin | 729601f | 2009-10-12 22:42:26 +0200 | [diff] [blame] | 28 | badexprs = ( |
| 29 | ":false()", "bad:()", "bad(:)", ":bad(:)", "bad:(:)", "bad:bad(:)", |
| 30 | "a:/b", "/c:/d", "//e:/f", "g://h" |
| 31 | ) |
| 32 | for expr in badexprs: |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 33 | try: |
| 34 | ctxt.xpathEval(expr) |
Daniel Veillard | bf4a8f0 | 2013-04-02 10:27:57 +0800 | [diff] [blame] | 35 | except libxml2.xpathError: |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 36 | pass |
| 37 | else: |
Daniel Veillard | 2cb6bf8 | 2013-03-30 21:38:20 +0800 | [diff] [blame] | 38 | print("Unexpectedly legal expression:", expr) |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 39 | ctxt.xpathFreeContext() |
| 40 | doc.freeDoc() |
| 41 | |
| 42 | if err != expect: |
Daniel Veillard | 2cb6bf8 | 2013-03-30 21:38:20 +0800 | [diff] [blame] | 43 | print("error") |
| 44 | print("received %s" %(err)) |
| 45 | print("expected %s" %(expect)) |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 46 | sys.exit(1) |
| 47 | |
| 48 | libxml2.cleanupParser() |
| 49 | leakedbytes = libxml2.debugMemory(True) |
| 50 | if leakedbytes == 0: |
Daniel Veillard | 2cb6bf8 | 2013-03-30 21:38:20 +0800 | [diff] [blame] | 51 | print("OK") |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 52 | else: |
Daniel Veillard | 2cb6bf8 | 2013-03-30 21:38:20 +0800 | [diff] [blame] | 53 | print("Memory leak", leakedbytes, "bytes") |
Daniel Veillard | 074f37e | 2008-09-01 13:38:22 +0000 | [diff] [blame] | 54 | # drop file to .memdump file in cwd, but won't work if not compiled in |
| 55 | libxml2.dumpMemory() |