我有一些代码与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_prefsNULL。然后,它设置g_xslt_default_security_prefs

长话短说,我多次打电话给xmlSecInit(),不应这样做。

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

10-12 16:17