在XPATH(libxml2)中省略前缀会导致分段错误
我在我的Mac(Darwin <hostname> 16.7.0 Darwin Kernel Version 16.7.0: Thu Jun 15 17:36:27 PDT 2017; root:xnu-3789.70.16~2/RELEASE_X86_64 x86_64
)上使用标准的./configure ; make ; make install
命令安装了C libxml2 version 2.9.4 library。在试图运行testXPath
命令时,在没有前缀的XPATH上使用-tree
选项时,出现分段错误。在XPATH(libxml2)中省略前缀会导致分段错误
~/home/libxml2-2.7.2 $ ./testXPath -tree "/abcde"
In testXPath function...
Compiled Expression : 0 elements
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
END
...etc until:
Segmentation fault: 11
我挖了一下进入testXPath.c
代码和XPATH的编制似乎是错误的。
comp = xmlXPathCompile(BAD_CAST str);
的xmlXPathCompExprPtr
回到了它的last
成员设置为-1
如果我不提供前缀。这会导致xmlXPathDebugDumpCompExpr()
的呼叫出现问题。
在xpath中有一个前缀不会导致错误。难道我做错了什么?
testXPath
是libxml2测试套件的一部分,预计不会由用户直接运行。如果你想用的libxml2测试XPath表达式,使用xmllint
与--xpath
选项:
xmllint --xpath 'expr' XMLFILE
'xmlXPathCompile()',但是,*是*用于用户库的一部分。这就是返回错误的值。 – ShivanKaul
@ShivanKaul如果您认为'xmlXPathCompile'中存在错误,请提交一个[错误报告](https://bugzilla.gnome.org/)。 – nwellnhof
不知道为什么,这是得到downvoted。 – ShivanKaul
不幸的是,SO允许你在没有任何理由的情况下进行倒退。有时候,这只意味着有人在度过糟糕的一天。 –