]> git.kaiwu.me - nginx.git/commitdiff
Script: simplified copy capture codes.
authorMaxim Dounin <mdounin@mdounin.ru>
Fri, 19 Jun 2026 19:54:19 +0000 (22:54 +0300)
committerRoman Arutyunyan <arutyunyan.roman@gmail.com>
Wed, 15 Jul 2026 17:20:38 +0000 (21:20 +0400)
Signed-off-by: Roman Arutyunyan <arut@nginx.com>
Origin: <https://freenginx.org/hg/nginx/rev/0fd5e6155817>

src/http/ngx_http_script.c
src/stream/ngx_stream_script.c

index 8a28e23a6729b44db21e78f3460e1ca705152fa0..6b33d01ddb37a7b99fc1f2b39003e3623fb99a94 100644 (file)
@@ -1343,6 +1343,7 @@ ngx_http_script_copy_capture_len_code(ngx_http_script_engine_t *e)
 {
     int                                  *cap;
     u_char                               *p;
+    size_t                                len;
     ngx_uint_t                            n;
     ngx_http_request_t                   *r;
     ngx_http_script_copy_capture_code_t  *code;
@@ -1358,17 +1359,17 @@ ngx_http_script_copy_capture_len_code(ngx_http_script_engine_t *e)
     if (n < r->ncaptures) {
 
         cap = r->captures;
+        len = cap[n + 1] - cap[n];
 
         if ((e->is_args || e->quote)
             && (e->request->quoted_uri || e->request->plus_in_uri))
         {
-            p = r->captures_data;
+            p = r->captures_data + cap[n];
+
+            return len + 2 * ngx_escape_uri(NULL, p, len, NGX_ESCAPE_ARGS);
 
-            return cap[n + 1] - cap[n]
-                   + 2 * ngx_escape_uri(NULL, &p[cap[n]], cap[n + 1] - cap[n],
-                                        NGX_ESCAPE_ARGS);
         } else {
-            return cap[n + 1] - cap[n];
+            return len;
         }
     }
 
@@ -1381,6 +1382,7 @@ ngx_http_script_copy_capture_code(ngx_http_script_engine_t *e)
 {
     int                                  *cap;
     u_char                               *p, *pos;
+    size_t                                len;
     ngx_uint_t                            n;
     ngx_http_request_t                   *r;
     ngx_http_script_copy_capture_code_t  *code;
@@ -1398,16 +1400,16 @@ ngx_http_script_copy_capture_code(ngx_http_script_engine_t *e)
     if (n < r->ncaptures) {
 
         cap = r->captures;
-        p = r->captures_data;
+        len = cap[n + 1] - cap[n];
+        p = r->captures_data + cap[n];
 
         if ((e->is_args || e->quote)
             && (e->request->quoted_uri || e->request->plus_in_uri))
         {
-            e->pos = (u_char *) ngx_escape_uri(pos, &p[cap[n]],
-                                               cap[n + 1] - cap[n],
-                                               NGX_ESCAPE_ARGS);
+            e->pos = (u_char *) ngx_escape_uri(pos, p, len, NGX_ESCAPE_ARGS);
+
         } else {
-            e->pos = ngx_copy(pos, &p[cap[n]], cap[n + 1] - cap[n]);
+            e->pos = ngx_copy(pos, p, len);
         }
     }
 
index c447e152f8f453ecac8798d6443a4945cb6c125b..2cd8b08c7df7d15b1d224a935269237b5511faaf 100644 (file)
@@ -894,6 +894,7 @@ size_t
 ngx_stream_script_copy_capture_len_code(ngx_stream_script_engine_t *e)
 {
     int                                    *cap;
+    size_t                                  len;
     ngx_uint_t                              n;
     ngx_stream_session_t                   *s;
     ngx_stream_script_copy_capture_code_t  *code;
@@ -908,7 +909,8 @@ ngx_stream_script_copy_capture_len_code(ngx_stream_script_engine_t *e)
 
     if (n < s->ncaptures) {
         cap = s->captures;
-        return cap[n + 1] - cap[n];
+        len = cap[n + 1] - cap[n];
+        return len;
     }
 
     return 0;
@@ -920,6 +922,7 @@ ngx_stream_script_copy_capture_code(ngx_stream_script_engine_t *e)
 {
     int                                    *cap;
     u_char                                 *p, *pos;
+    size_t                                  len;
     ngx_uint_t                              n;
     ngx_stream_session_t                   *s;
     ngx_stream_script_copy_capture_code_t  *code;
@@ -936,8 +939,9 @@ ngx_stream_script_copy_capture_code(ngx_stream_script_engine_t *e)
 
     if (n < s->ncaptures) {
         cap = s->captures;
-        p = s->captures_data;
-        e->pos = ngx_copy(pos, &p[cap[n]], cap[n + 1] - cap[n]);
+        len = cap[n + 1] - cap[n];
+        p = s->captures_data + cap[n];
+        e->pos = ngx_copy(pos, p, len);
     }
 
     ngx_log_debug2(NGX_LOG_DEBUG_STREAM, e->session->connection->log, 0,