2012-08-22 2 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 소스를 살펴보면 xmlSecInitxmlSecTransformXsltInitialize을 호출하는 xmlSecTransformIdsInit을 호출합니다. 마지막 기능이 수행하는 첫 번째 작업은 g_xslt_default_security_prefsNULL인지 확인하는 것입니다. 그런 다음 g_xslt_default_security_prefs을 설정합니다.

짧게 요약하자면, 나는 xmlSecInit()을 두 번 이상 호출 했으므로 그렇게해서는 안됩니다.