diff src/http/ngx_http_script.c @ 190:3689cd4e3228 NGINX_0_3_42

nginx 0.3.42 *) Feature: the "bind" option of the "listen" directive in IMAP/POP3 proxy. *) Bugfix: if the same capture in the "rewrite" directive was used more then once. *) Bugfix: the $sent_http_content_type, $sent_http_content_length, $sent_http_last_modified, $sent_http_connection, $sent_http_keep_alive, and $sent_http_transfer_encoding variables were not written to access log. *) Bugfix: the $sent_http_cache_control returned value of the single "Cache-Control" response header line.
author Igor Sysoev <http://sysoev.ru>
date Wed, 26 Apr 2006 00:00:00 +0400
parents 54aabf2b0bc6
children ca5f86d94316
line wrap: on
line diff
--- a/src/http/ngx_http_script.c
+++ b/src/http/ngx_http_script.c
@@ -91,6 +91,14 @@ ngx_http_script_compile(ngx_http_script_
 
             if (sc->source->data[i] >= '1' && sc->source->data[i] <= '9') {
 
+                n = sc->source->data[i] - '0';
+
+                if (sc->captures_mask & (1 << n)) {
+                    sc->dup_capture = 1;
+                }
+
+                sc->captures_mask |= 1 << n;
+
                 copy_capture = ngx_http_script_add_code(*sc->lengths,
                                    sizeof(ngx_http_script_copy_capture_code_t),
                                    NULL);
@@ -100,7 +108,8 @@ ngx_http_script_compile(ngx_http_script_
 
                 copy_capture->code = (ngx_http_script_code_pt)
                                          ngx_http_script_copy_capture_len_code;
-                copy_capture->n = 2 * (sc->source->data[i] - '0');
+                copy_capture->n = 2 * n;
+
 
                 copy_capture = ngx_http_script_add_code(*sc->values,
                                    sizeof(ngx_http_script_copy_capture_code_t),
@@ -110,14 +119,12 @@ ngx_http_script_compile(ngx_http_script_
                 }
 
                 copy_capture->code = ngx_http_script_copy_capture_code;
-                copy_capture->n = sc->source->data[i] - '0';
+                copy_capture->n = 2 * n;
 
-                if (sc->ncaptures < copy_capture->n) {
-                    sc->ncaptures = copy_capture->n;
+                if (sc->ncaptures < n) {
+                    sc->ncaptures = n;
                 }
 
-                copy_capture->n *= 2;
-
                 i++;
 
                 continue;