我有一些代码与 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/