Hello! On Sat, Jul 13, 2013 at 12:19:51PM +0200, Kate F wrote:
> Hi, > > I'm trying to use EXSLT's <func:function> with nginx's xslt filter > module. The effect I think I'm seeing is that my functions are > seemingly ignored. [...] > Looking at ngx_http_xslt_filter_module.c I see exsltRegisterAll() is > called, which is what should register libexslt's handler for > func:function and friends: > > #if (NGX_HAVE_EXSLT) > exsltRegisterAll(); > #endif > > I know NGX_HAVE_EXSLT is defined because other EXSLT functions (such > as things in the date: and str: namespaces) work fine. It looks like exsltRegisterAll() is called too late for EXSLT Functions extension. Please try the following patch: # HG changeset patch # User Maxim Dounin <[email protected]> # Date 1373909466 -14400 # Node ID bc1cf51a5b0a5e8512a8170dc7991f9e966c5533 # Parent 8e7db77e5d88b20d113e77b574e676737d67bf0e Xslt: exsltRegisterAll() moved to preconfiguration. The exsltRegisterAll() needs to be called before XSLT stylesheets are compiled, else stylesheet compilation hooks will not work. This change fixes EXSLT Functions extension. diff --git a/src/http/modules/ngx_http_xslt_filter_module.c b/src/http/modules/ngx_http_xslt_filter_module.c --- a/src/http/modules/ngx_http_xslt_filter_module.c +++ b/src/http/modules/ngx_http_xslt_filter_module.c @@ -104,6 +104,7 @@ static void *ngx_http_xslt_filter_create static void *ngx_http_xslt_filter_create_conf(ngx_conf_t *cf); static char *ngx_http_xslt_filter_merge_conf(ngx_conf_t *cf, void *parent, void *child); +static ngx_int_t ngx_http_xslt_filter_preconfiguration(ngx_conf_t *cf); static ngx_int_t ngx_http_xslt_filter_init(ngx_conf_t *cf); static void ngx_http_xslt_filter_exit(ngx_cycle_t *cycle); @@ -163,7 +164,7 @@ static ngx_command_t static ngx_http_module_t ngx_http_xslt_filter_module_ctx = { - NULL, /* preconfiguration */ + ngx_http_xslt_filter_preconfiguration, /* preconfiguration */ ngx_http_xslt_filter_init, /* postconfiguration */ ngx_http_xslt_filter_create_main_conf, /* create main configuration */ @@ -1111,7 +1112,7 @@ ngx_http_xslt_filter_merge_conf(ngx_conf static ngx_int_t -ngx_http_xslt_filter_init(ngx_conf_t *cf) +ngx_http_xslt_filter_preconfiguration(ngx_conf_t *cf) { xmlInitParser(); @@ -1119,6 +1120,13 @@ ngx_http_xslt_filter_init(ngx_conf_t exsltRegisterAll(); #endif + return NGX_OK; +} + + +static ngx_int_t +ngx_http_xslt_filter_init(ngx_conf_t *cf) +{ ngx_http_next_header_filter = ngx_http_top_header_filter; ngx_http_top_header_filter = ngx_http_xslt_header_filter; -- Maxim Dounin http://nginx.org/en/donation.html _______________________________________________ nginx mailing list [email protected] http://mailman.nginx.org/mailman/listinfo/nginx
