comparison src/http/modules/ngx_http_xslt_filter_module.c @ 500:ed3d382670c7 NGINX_0_7_62

nginx 0.7.62 *) Security: a segmentation fault might occur in worker process while specially crafted request handling. Thanks to Chris Ries. *) Feature: the $upstream_cache_status variable. *) Bugfix: an expired cached response might stick in the "UPDATING" state. *) Bugfix: a segmentation fault might occur in worker process, if error_log was set to info or debug level. Thanks to Sergey Bochenkov. *) Bugfix: in handling FastCGI headers split in records. *) Bugfix: XSLT filter may fail with message "not well formed XML document" for valid XML document. Thanks to Kuramoto Eiji. *) Bugfix: now in MacOSX, Cygwin, and nginx/Windows locations given by a regular expression are always tested in case insensitive mode. *) Bugfix: now nginx/Windows ignores trailing dots in URI. Thanks to Hugo Leisink. *) Bugfix: name of file specified in --conf-path was not honored during installation; the bug had appeared in 0.6.6. Thanks to Maxim Dounin. *) Bugfix: a 500 error code was returned for invalid login/password while HTTP Basic authentication on Windows.
author Igor Sysoev <http://sysoev.ru>
date Mon, 14 Sep 2009 00:00:00 +0400
parents 116d5de7cbb6
children 89dc5654117c
comparison
equal deleted inserted replaced
499:f2c782e5161f 500:ed3d382670c7
192 NULL, /* init master */ 192 NULL, /* init master */
193 NULL, /* init module */ 193 NULL, /* init module */
194 NULL, /* init process */ 194 NULL, /* init process */
195 NULL, /* init thread */ 195 NULL, /* init thread */
196 NULL, /* exit thread */ 196 NULL, /* exit thread */
197 ngx_http_xslt_filter_exit, /* exit process */ 197 ngx_http_xslt_filter_exit, /* exit process */
198 ngx_http_xslt_filter_exit, /* exit master */ 198 ngx_http_xslt_filter_exit, /* exit master */
199 NGX_MODULE_V1_PADDING 199 NGX_MODULE_V1_PADDING
200 }; 200 };
201 201
202 202
245 245
246 246
247 static ngx_int_t 247 static ngx_int_t
248 ngx_http_xslt_body_filter(ngx_http_request_t *r, ngx_chain_t *in) 248 ngx_http_xslt_body_filter(ngx_http_request_t *r, ngx_chain_t *in)
249 { 249 {
250 int wellFormed;
250 ngx_chain_t *cl; 251 ngx_chain_t *cl;
251 ngx_http_xslt_filter_ctx_t *ctx; 252 ngx_http_xslt_filter_ctx_t *ctx;
252 253
253 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, 254 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
254 "xslt filter body"); 255 "xslt filter body");
286 287
287 #if (NGX_HTTP_XSLT_REUSE_DTD) 288 #if (NGX_HTTP_XSLT_REUSE_DTD)
288 ctx->doc->extSubset = NULL; 289 ctx->doc->extSubset = NULL;
289 #endif 290 #endif
290 291
292 wellFormed = ctx->ctxt->wellFormed;
293
291 xmlFreeParserCtxt(ctx->ctxt); 294 xmlFreeParserCtxt(ctx->ctxt);
292 295
293 if (ctx->ctxt->wellFormed) { 296 if (wellFormed) {
294 return ngx_http_xslt_send(r, ctx, 297 return ngx_http_xslt_send(r, ctx,
295 ngx_http_xslt_apply_stylesheet(r, ctx)); 298 ngx_http_xslt_apply_stylesheet(r, ctx));
296 } 299 }
297 300
298 xmlFreeDoc(ctx->doc); 301 xmlFreeDoc(ctx->doc);
715 va_end(args); 718 va_end(args);
716 719
717 while (--n && (buf[n] == CR || buf[n] == LF)) { /* void */ } 720 while (--n && (buf[n] == CR || buf[n] == LF)) { /* void */ }
718 721
719 ngx_log_error(NGX_LOG_ERR, ctx->request->connection->log, 0, 722 ngx_log_error(NGX_LOG_ERR, ctx->request->connection->log, 0,
720 "libxml2 error: \"%*s\"", n, buf); 723 "libxml2 error: \"%*s\"", n + 1, buf);
721 } 724 }
722 725
723 726
724 static ngx_buf_t * 727 static ngx_buf_t *
725 ngx_http_xslt_apply_stylesheet(ngx_http_request_t *r, 728 ngx_http_xslt_apply_stylesheet(ngx_http_request_t *r,