2017-08-31 76 views
1

我在我的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中有一个前缀不会导致错误。难道我做错了什么?

+0

不知道为什么,这是得到downvoted。 – ShivanKaul

+0

不幸的是,SO允许你在没有任何理由的情况下进行倒退。有时候,这只意味着有人在度过糟糕的一天。 –

回答

0

testXPath是libxml2测试套件的一部分,预计不会由用户直接运行。如果你想用的libxml2测试XPath表达式,使用xmllint--xpath选项:

xmllint --xpath 'expr' XMLFILE 
+0

'xmlXPathCompile()',但是,*是*用于用户库的一部分。这就是返回错误的值。 – ShivanKaul

+0

@ShivanKaul如果您认为'xmlXPathCompile'中存在错误,请提交一个[错误报告](https://bugzilla.gnome.org/)。 – nwellnhof