0

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ので、sのコード行#ifdefは実行されます。

ありがとう!

4

1 に答える 1

1

xmlsecソースを調べたところ、を呼び出す呼び出しxmlSecInitのように見えます。最後の関数が最初に行うことは、それがであるかどうかをチェックすることです。次に、を設定します。xmlSecTransformIdsInitxmlSecTransformXsltInitializeg_xslt_default_security_prefsNULLg_xslt_default_security_prefs

簡単に言えば、私は何xmlSecInit()度も電話をかけていましたが、そうすべきではありません。

于 2012-08-22T20:05:48.840 に答える