mirror of
				https://github.com/openresty/openresty.git
				synced 2024-10-13 00:29:41 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			116 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
--- nginx-1.7.7/src/http/modules/ngx_http_log_module.c	2011-11-01 21:24:50.000000000 +0800
 | 
						|
+++ nginx-1.7.7-patched/src/http/modules/ngx_http_log_module.c	2011-11-10 16:17:29.599039534 +0800
 | 
						|
@@ -61,6 +61,8 @@
 | 
						|
     time_t                      open_file_cache_valid;
 | 
						|
     ngx_uint_t                  open_file_cache_min_uses;
 | 
						|
 
 | 
						|
+    ngx_flag_t                  escape_non_ascii;
 | 
						|
+
 | 
						|
     ngx_uint_t                  off;        /* unsigned  off:1 */
 | 
						|
 } ngx_http_log_loc_conf_t;
 | 
						|
 
 | 
						|
@@ -104,7 +106,8 @@
 | 
						|
     uintptr_t data);
 | 
						|
 static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
 | 
						|
     ngx_http_log_op_t *op);
 | 
						|
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
 | 
						|
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
 | 
						|
+    u_char *src, size_t size);
 | 
						|
 
 | 
						|
 
 | 
						|
 static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
 | 
						|
@@ -146,6 +149,13 @@
 | 
						|
       0,
 | 
						|
       NULL },
 | 
						|
 
 | 
						|
+    { ngx_string("log_escape_non_ascii"),
 | 
						|
+      NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
 | 
						|
+      ngx_conf_set_flag_slot,
 | 
						|
+      NGX_HTTP_LOC_CONF_OFFSET,
 | 
						|
+      offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
 | 
						|
+      NULL },
 | 
						|
+
 | 
						|
       ngx_null_command
 | 
						|
 };
 | 
						|
 
 | 
						|
@@ -637,6 +647,7 @@
 | 
						|
 ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
 | 
						|
 {
 | 
						|
     uintptr_t                   len;
 | 
						|
+    ngx_http_log_loc_conf_t    *lcf;
 | 
						|
     ngx_http_variable_value_t  *value;
 | 
						|
 
 | 
						|
     value = ngx_http_get_indexed_variable(r, data);
 | 
						|
@@ -645,7 +656,9 @@
 | 
						|
         return 1;
 | 
						|
     }
 | 
						|
 
 | 
						|
-    len = ngx_http_log_escape(NULL, value->data, value->len);
 | 
						|
+    lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
 | 
						|
+
 | 
						|
+    len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
 | 
						|
 
 | 
						|
     value->escape = len ? 1 : 0;
 | 
						|
 
 | 
						|
@@ -656,6 +669,7 @@
 | 
						|
 static u_char *
 | 
						|
 ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
 | 
						|
 {
 | 
						|
+    ngx_http_log_loc_conf_t    *lcf;
 | 
						|
     ngx_http_variable_value_t  *value;
 | 
						|
 
 | 
						|
     value = ngx_http_get_indexed_variable(r, op->data);
 | 
						|
@@ -669,16 +683,18 @@
 | 
						|
         return ngx_cpymem(buf, value->data, value->len);
 | 
						|
 
 | 
						|
     } else {
 | 
						|
-        return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
 | 
						|
+        lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
 | 
						|
+        return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
 | 
						|
     }
 | 
						|
 }
 | 
						|
 
 | 
						|
 
 | 
						|
 static uintptr_t
 | 
						|
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
 | 
						|
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
 | 
						|
+    size_t size)
 | 
						|
 {
 | 
						|
-    ngx_uint_t      n;
 | 
						|
-    static u_char   hex[] = "0123456789ABCDEF";
 | 
						|
+    ngx_uint_t                   n;
 | 
						|
+    static u_char                hex[] = "0123456789ABCDEF";
 | 
						|
 
 | 
						|
     static uint32_t   escape[] = {
 | 
						|
         0xffffffff, /* 1111 1111 1111 1111  1111 1111 1111 1111 */
 | 
						|
@@ -698,6 +714,12 @@
 | 
						|
         0xffffffff, /* 1111 1111 1111 1111  1111 1111 1111 1111 */
 | 
						|
     };
 | 
						|
 
 | 
						|
+    if (lcf->escape_non_ascii) {
 | 
						|
+        ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
 | 
						|
+
 | 
						|
+    } else {
 | 
						|
+        ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
 | 
						|
+    }
 | 
						|
 
 | 
						|
     if (dst == NULL) {
 | 
						|
 
 | 
						|
@@ -781,6 +803,7 @@
 | 
						|
     }
 | 
						|
 
 | 
						|
     conf->open_file_cache = NGX_CONF_UNSET_PTR;
 | 
						|
+    conf->escape_non_ascii = NGX_CONF_UNSET;
 | 
						|
 
 | 
						|
     return conf;
 | 
						|
 }
 | 
						|
@@ -796,6 +819,8 @@
 | 
						|
     ngx_http_log_fmt_t        *fmt;
 | 
						|
     ngx_http_log_main_conf_t  *lmcf;
 | 
						|
 
 | 
						|
+    ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
 | 
						|
+
 | 
						|
     if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
 | 
						|
 
 | 
						|
         conf->open_file_cache = prev->open_file_cache;
 |