c - xmlSecInit() 将断言失败打印到 stderr (g_xslt_default_security_prefs == NULL)

标签 c xslt libxml2 libxslt xmlsec

我有一些代码与 http://www.aleksey.com/xmlsec/api/xmlsec-examples-sign-template-file.html 中的示例非常相似:

#ifndef XMLSEC_NO_XSLT
    xsltSecurityPrefsPtr xsltSecPrefs = NULL;
#endif /* XMLSEC_NO_XSLT */

    /* Init libxml and libxslt libraries */
    xmlInitParser();
    LIBXML_TEST_VERSION
    xmlLoadExtDtdDefaultValue = XML_DETECT_IDS | XML_COMPLETE_ATTRS;
    xmlSubstituteEntitiesDefault(1);

    /* Init libxslt */
#ifndef XMLSEC_NO_XSLT
    /* disable everything */
    xsltSecPrefs = xsltNewSecurityPrefs(); 
    xsltSetSecurityPrefs(xsltSecPrefs,  XSLT_SECPREF_READ_FILE,        xsltSecurityForbid);
    xsltSetSecurityPrefs(xsltSecPrefs,  XSLT_SECPREF_WRITE_FILE,       xsltSecurityForbid);
    xsltSetSecurityPrefs(xsltSecPrefs,  XSLT_SECPREF_CREATE_DIRECTORY, xsltSecurityForbid);
    xsltSetSecurityPrefs(xsltSecPrefs,  XSLT_SECPREF_READ_NETWORK,     xsltSecurityForbid);
    xsltSetSecurityPrefs(xsltSecPrefs,  XSLT_SECPREF_WRITE_NETWORK,    xsltSecurityForbid);
    xsltSetDefaultSecurityPrefs(xsltSecPrefs); 
#endif /* XMLSEC_NO_XSLT */                

    /* Init xmlsec library */
    if(xmlSecInit() < 0) {
        fprintf(stderr, "Error: xmlsec initialization failed.\n");
        return(-1);
    }

问题是,虽然 xmlSecInit 成功(返回 0),但它会将此断言失败记录到 stderr:

func=xmlSecTransformXsltInitialize:file=xslt.c:line=109:obj=unknown:subj=g_xslt_default_security_prefs == NULL:error=100:assertion:

我怀疑它是无害的,但记录错误可能是有原因的。我想知道如何避免它。

我没有定义 XMLSEC_NO_XSLT,因此 #ifdef 中的那些代码行会执行。

谢谢!

最佳答案

我查看了 xmlsec 源代码,看起来 xmlSecInit 调用 xmlSecTransformIdsInit,后者又调用 xmlSecTransformXsltInitialize。最后一个函数所做的第一件事是检查 g_xslt_default_security_prefs 是否为 NULL。然后,它设置g_xslt_default_security_prefs

长话短说,我多次调用 xmlSecInit() ,不应该这样做。

关于c - xmlSecInit() 将断言失败打印到 stderr (g_xslt_default_security_prefs == NULL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12079526/

相关文章:

html - 使用xsl解析xml输出,使用变量?

xml - 使用 XSLT 转换 XML 并保留 CDATA(在 Ruby 中)

c - 使用 libxml SAX 解析器处理大量嵌套元素

iPhone 开发 - XMLParser 与 libxml2 与 TouchXML

c - "(type)variable"和 "*((type *)&variable)"之间有什么区别(如果有)?

c - 在循环中使用 printf 然后 scanf

java - 如何在Java中递归地从xml属性读取数据并将其存储在CSV中

c - 一种在 C 中自动将字符串文字转换为 `unsigned char*` 的方法?

c - :( rejects "" minutes timed out while waiting for input to be rejected"shows when checking my proggram

c - 按 Enter 键只会在 C 中输入另一行