comparison src/http/modules/ngx_http_sub_filter_module.c @ 326:f70f2f565fe0 NGINX_0_5_33

nginx 0.5.33 *) Change: now by default the "echo" SSI command uses entity encoding. *) Feature: the "encoding" parameter in the "echo" SSI command. *) Change: mail proxy was split on three modules: pop3, imap and smtp. *) Feature: the --without-mail_pop3_module, --without-mail_imap_module, and --without-mail_smtp_module configuration parameters. *) Feature: the "smtp_greeting_delay" and "smtp_client_buffer" directives of the ngx_mail_smtp_module. *) Feature: the "server_name" and "valid_referers" directives support regular expressions. *) Feature: the "server_name", "map", and "valid_referers" directives support the "www.example.*" wildcards. *) Bugfix: sub_filter did not work with empty substitution. *) Bugfix: in sub_filter parsing. *) 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.5.32. *) Bugfix: nginx could not start on Solaris if the shared PCRE library located in non-standard place was used.
author Igor Sysoev <http://sysoev.ru>
date Wed, 07 Nov 2007 00:00:00 +0300
parents 2ceaee987f37
children 2eea67ed0bc2
comparison
equal deleted inserted replaced
325:5bb1b28ddeaa 326:f70f2f565fe0
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