Welcome! Log In Create A New Profile

Advanced

Re: EXSLT func:function not registered for XSLT filter module

Maxim Dounin
July 15, 2013 01:34PM
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 <mdounin@mdounin.ru>
# 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
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

EXSLT func:function not registered for XSLT filter module

Kate F July 13, 2013 06:22AM

Re: EXSLT func:function not registered for XSLT filter module

Maxim Dounin July 15, 2013 01:34PM

Re: EXSLT func:function not registered for XSLT filter module

Kate F July 17, 2013 12:20PM

Re: EXSLT func:function not registered for XSLT filter module

Maxim Dounin July 19, 2013 08:04AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 74
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready