XML-LibXSLT
view release on metacpan or search on metacpan
int
LibXSLT_security_write_net(xsltSecurityPrefsPtr sec,
xsltTransformContextPtr ctxt,
const char * value)
{
return LibXSLT_security_check(XSLT_SECPREF_WRITE_NETWORK, sec, ctxt, value);
}
xsltSecurityPrefsPtr
LibXSLT_init_security_prefs(xsltTransformContextPtr ctxt)
{
xsltSecurityPrefsPtr sec = NULL;
sec = xsltNewSecurityPrefs();
xsltSetSecurityPrefs(sec, XSLT_SECPREF_READ_FILE,
LibXSLT_security_read_file);
xsltSetSecurityPrefs(sec, XSLT_SECPREF_WRITE_FILE,
LibXSLT_security_write_file);
xsltSetSecurityPrefs(sec, XSLT_SECPREF_CREATE_DIRECTORY,
LibXSLT_security_create_dir);
LibXSLT_security_read_net);
xsltSetSecurityPrefs(sec, XSLT_SECPREF_WRITE_NETWORK,
LibXSLT_security_write_net);
xsltSetCtxtSecurityPrefs(sec, ctxt);
return sec;
}
void
LibXSLT_free_security_prefs(xsltSecurityPrefsPtr sec,
xsltTransformContextPtr ctxt)
{
xsltFreeSecurityPrefs(sec);
}
/*
* LibXSLT_init_functions
*
* Add functions registered in $stylesheet->register_function() to the new
* stylesheet context. This iterates over a hash ref keyed on the uri/name of
/* we need own context to distinguish
* <xsl:message terminate="no">
* from those with terminate="yes" and fatal errors */
ctxt = xsltNewTransformContext(self, doc);
if (ctxt == NULL) {
croak("Could not create transformation context");
}
ctxt->xinclude = 1;
ctxt->_private = (void *) wrapper;
sec = LibXSLT_init_security_prefs(ctxt);
LibXSLT_init_functions(ctxt, wrapper);
LibXSLT_init_elements(ctxt, wrapper);
if (doc->intSubset != NULL) {
/* Note: libxslt will unlink intSubset, we
want to restore it when done
*/
dtd_prev = doc->intSubset->prev;
dtd_next = doc->intSubset->next;
}
if (dtd_prev) dtd_prev->next = cur;
if (dtd_next) dtd_next->prev = cur;
if (doc->children == dtd_next) doc->children = cur;
if (doc->last == dtd_prev) doc->last = cur;
}
if ((real_dom != NULL) && (ctxt->state != XSLT_STATE_OK)) {
/* fatal error */
xmlFreeDoc(real_dom);
real_dom = NULL;
}
LibXSLT_free_security_prefs(sec, ctxt);
xsltFreeTransformContext(ctxt);
/* real_dom = xsltApplyStylesheet(self, doc, xslt_params); */
if (real_dom == NULL) {
if ( real_dom != NULL ) xmlFreeDoc( real_dom );
LibXSLT_report_error_ctx(saved_error,0);
croak("Unknown error applying stylesheet");
}
if (real_dom->type == XML_HTML_DOCUMENT_NODE) {
if (self->method != NULL) {
croak("Unknown error loading source document");
} else {
/*real_dom = xsltApplyStylesheet(self, source_dom, xslt_params);*/
ctxt = xsltNewTransformContext(self, source_dom);
if (ctxt == NULL) {
croak("Could not create transformation context");
}
ctxt->xinclude = 1;
ctxt->_private = (void *) wrapper;
sec = LibXSLT_init_security_prefs(ctxt);
LibXSLT_init_functions(ctxt, wrapper);
LibXSLT_init_elements(ctxt, wrapper);
real_dom = xsltApplyStylesheetUser(self, source_dom, xslt_params,
NULL, NULL, ctxt);
if ((ctxt->state != XSLT_STATE_OK) && real_dom) {
/* fatal error */
xmlFreeDoc(real_dom);
real_dom = NULL;
}
LibXSLT_free_security_prefs(sec, ctxt);
xsltFreeTransformContext(ctxt);
xmlFreeDoc( source_dom );
}
if (real_dom == NULL) {
LibXSLT_report_error_ctx(saved_error,0);
croak("Unknown error applying stylesheet");
}
/* non-fatal: probably just a message from the stylesheet */
( run in 0.518 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )