2012-08-22 66 views
0

我有一些代码,在http://www.aleksey.com/xmlsec/api/xmlsec-examples-sign-template-file.html非常类似于例如:xmlSecInit()打印断言失败到stderr(g_xslt_default_security_prefs == NULL)

#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),它将此断言失败记录到标准错误:

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

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

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

谢谢!

回答

1

我看着xmlsec源,它看起来像xmlSecInit调用xmlSecTransformIdsInit,它调用xmlSecTransformXsltInitialize。最后一个功能所做的第一件事是检查g_xslt_default_security_prefsNULL。然后,它设置g_xslt_default_security_prefs

长话短说,我多次打电话给​​,不应该那样做。