xmlSecInit() печатает ошибку подтверждения в stderr (g_xslt_default_security_prefs == NULL)

У меня есть код, который очень похож на пример на 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 определены, поэтому эти строки кодов в #ifdefs выполнить.

Спасибо!

1 ответ

Решение

Я посмотрел на источник xmlsec, и это выглядит как xmlSecInit звонки xmlSecTransformIdsInit, который вызывает xmlSecTransformXsltInitialize, Первое, что делает последняя функция, это проверяет, что g_xslt_default_security_prefs является NULL, Затем он устанавливает g_xslt_default_security_prefs,

Короче говоря, я звонил xmlSecInit() более одного раза, и не должны этого делать.

Другие вопросы по тегам