comparison src/http/modules/ngx_http_sub_filter_module.c @ 340:10cc350ed8a1 NGINX_0_6_14

nginx 0.6.14 *) Change: now by default the "echo" SSI command uses entity encoding. *) Feature: the "encoding" parameter in the "echo" SSI command. *) Feature: the "access_log" directive may be used inside the "limit_except" block. *) Bugfix: if all upstream servers were failed, then all servers had got weight the was equal one until servers became alive; bug appeared in 0.6.6. *) Bugfix: a segmentation fault occurred in worker process if $date_local and $date_gmt were used outside the ngx_http_ssi_filter_module. *) Bugfix: a segmentation fault might occur in worker process if debug log was enabled. Thanks to Andrei Nigmatulin. *) Bugfix: ngx_http_memcached_module did not set $upstream_response_time. Thanks to Maxim Dounin. *) Bugfix: a worker process may got caught in an endless loop, if the memcached was used. *) Bugfix: nginx supported low case only "close" and "keep-alive" values in the "Connection" request header line; bug appeared in 0.6.11. *) Bugfix: sub_filter did not work with empty substitution. *) Bugfix: in sub_filter parsing.
author Igor Sysoev <http://sysoev.ru>
date Mon, 15 Oct 2007 00:00:00 +0400
parents 2ceaee987f37
children 6639b93e81b2
comparison
equal deleted inserted replaced
339:d19550b67059 340:10cc350ed8a1
367 { 367 {
368 return NGX_ERROR; 368 return NGX_ERROR;
369 } 369 }
370 } 370 }
371 371
372 b->memory = 1; 372 if (ctx->sub.len) {
373 b->pos = ctx->sub.data; 373 b->memory = 1;
374 b->last = ctx->sub.data + ctx->sub.len; 374 b->pos = ctx->sub.data;
375 b->last = ctx->sub.data + ctx->sub.len;
376
377 } else {
378 b->sync = 1;
379 }
375 380
376 cl->buf = b; 381 cl->buf = b;
377 cl->next = NULL; 382 cl->next = NULL;
378 *ctx->last_out = cl; 383 *ctx->last_out = cl;
379 ctx->last_out = &cl->next; 384 ctx->last_out = &cl->next;
555 560
556 ch = *p; 561 ch = *p;
557 ch = ngx_tolower(ch); 562 ch = ngx_tolower(ch);
558 } 563 }
559 564
565 ctx->state = state;
560 ctx->pos = p; 566 ctx->pos = p;
561 ctx->looked = looked; 567 ctx->looked = looked;
562 ctx->copy_end = p; 568 ctx->copy_end = p;
563 569
564 if (ctx->copy_start == NULL) { 570 if (ctx->copy_start == NULL) {
576 582
577 if (ch == ctx->match.data[looked]) { 583 if (ch == ctx->match.data[looked]) {
578 looked++; 584 looked++;
579 585
580 if (looked == ctx->match.len) { 586 if (looked == ctx->match.len) {
587 if ((size_t) (p - ctx->pos) < looked) {
588 ctx->saved = 0;
589 }
590
581 ctx->state = sub_start_state; 591 ctx->state = sub_start_state;
582 ctx->pos = p + 1; 592 ctx->pos = p + 1;
583 ctx->looked = looked; 593 ctx->looked = looked;
584 ctx->copy_end = copy_end; 594 ctx->copy_end = copy_end;
585 595