Mercurial > hg > nginx-quic
annotate auto/cc/conf @ 4617:972642646f06
Rewrite: fixed escaping and possible segfault (ticket #162).
The following code resulted in incorrect escaping of uri and possible
segfault:
location / {
rewrite ^(.*) $1?c=$1;
return 200 "$uri";
}
If there were arguments in a rewrite's replacement string, and length was
actually calculated (due to duplicate captures as in the example above,
or variables present), the is_args flag was set and incorrectly copied
after length calculation. This resulted in escaping applied to the uri part
of the replacement, resulting in incorrect escaping. Additionally, buffer
was allocated without escaping expected, thus this also resulted in buffer
overrun and possible segfault.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Fri, 11 May 2012 13:19:22 +0000 |
parents | d620f497c50f |
children | 182aee3b1bf5 |
rev | line source |
---|---|
455 | 1 |
2 # Copyright (C) Igor Sysoev | |
4412 | 3 # Copyright (C) Nginx, Inc. |
455 | 4 |
5 | |
487 | 6 LINK="\$(CC)" |
7 | |
455 | 8 ngx_include_opt="-I " |
9 ngx_compile_opt="-c" | |
10 ngx_objout="-o " | |
11 ngx_binout="-o " | |
12 ngx_objext="o" | |
13 ngx_binext= | |
14 | |
573 | 15 ngx_long_start= |
16 ngx_long_end= | |
17 | |
455 | 18 ngx_regex_dirsep="\/" |
19 ngx_dirsep='/' | |
20 | |
21 ngx_regex_cont=' \\\ | |
22 ' | |
23 ngx_cont=' \ | |
24 ' | |
25 ngx_tab=' \ | |
26 ' | |
27 ngx_spacer= | |
28 | |
573 | 29 ngx_long_regex_cont=$ngx_regex_cont |
30 ngx_long_cont=$ngx_cont | |
31 | |
455 | 32 . auto/cc/name |
33 | |
34 if test -n "$CFLAGS"; then | |
35 | |
36 CC_TEST_FLAGS="$CFLAGS $NGX_CC_OPT" | |
37 | |
38 case $NGX_CC_NAME in | |
39 | |
40 ccc) | |
41 # Compaq C V6.5-207 | |
42 | |
43 ngx_include_opt="-I" | |
44 ;; | |
45 | |
46 esac | |
47 | |
48 else | |
49 | |
50 case $NGX_CC_NAME in | |
51 gcc) | |
515 | 52 # gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2 |
53 # 3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4.0, 3.4.2 | |
561 | 54 # 4.0.0, 4.0.1, 4.1.0 |
455 | 55 |
56 . auto/cc/gcc | |
57 ;; | |
58 | |
59 icc) | |
515 | 60 # Intel C++ compiler 7.1, 8.0, 8.1 |
455 | 61 |
62 . auto/cc/icc | |
63 ;; | |
64 | |
561 | 65 sunc) |
66 # Sun C 5.7 Patch 117837-04 2005/05/11 | |
67 | |
68 . auto/cc/sunc | |
69 ;; | |
70 | |
467 | 71 ccc) |
515 | 72 # Compaq C V6.5-207 |
73 | |
74 . auto/cc/ccc | |
467 | 75 ;; |
455 | 76 |
515 | 77 acc) |
78 # aCC: HP ANSI C++ B3910B A.03.55.02 | |
79 | |
80 . auto/cc/acc | |
81 ;; | |
455 | 82 |
461 | 83 msvc*) |
84 # MSVC++ 6.0 SP2, MSVC++ Toolkit 2003 | |
455 | 85 |
86 . auto/cc/msvc | |
87 ;; | |
88 | |
89 owc) | |
90 # Open Watcom C 1.0, 1.2 | |
91 | |
92 . auto/cc/owc | |
93 ;; | |
94 | |
95 bcc) | |
96 # Borland C++ 5.5 | |
97 | |
98 . auto/cc/bcc | |
99 ;; | |
100 | |
101 esac | |
102 | |
515 | 103 CC_TEST_FLAGS="$CC_TEST_FLAGS $NGX_CC_OPT" |
455 | 104 |
105 fi | |
106 | |
107 CFLAGS="$CFLAGS $NGX_CC_OPT" | |
3367
568a854383f9
test invalid --with-ld-opt in right place
Igor Sysoev <igor@sysoev.ru>
parents:
3366
diff
changeset
|
108 NGX_TEST_LD_OPT="$NGX_LD_OPT" |
455 | 109 |
469 | 110 if [ "$NGX_PLATFORM" != win32 ]; then |
455 | 111 |
461 | 112 if test -n "$NGX_LD_OPT"; then |
113 ngx_feature=--with-ld-opt=\"$NGX_LD_OPT\" | |
469 | 114 ngx_feature_name= |
461 | 115 ngx_feature_run=no |
116 ngx_feature_incs= | |
875
7af8276b1c2f
test PCRE in FreeBSD, Linux, and NetBSD
Igor Sysoev <igor@sysoev.ru>
parents:
573
diff
changeset
|
117 ngx_feature_path= |
461 | 118 ngx_feature_libs= |
119 ngx_feature_test= | |
120 . auto/feature | |
121 | |
122 if [ $ngx_found = no ]; then | |
123 echo $0: error: the invalid value in --with-ld-opt=\"$NGX_LD_OPT\" | |
124 echo | |
125 exit 1 | |
126 fi | |
127 fi | |
128 | |
3362
b57a4a704f3c
GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents:
875
diff
changeset
|
129 |
b57a4a704f3c
GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents:
875
diff
changeset
|
130 ngx_feature="gcc builtin atomic operations" |
b57a4a704f3c
GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents:
875
diff
changeset
|
131 ngx_feature_name=NGX_HAVE_GCC_ATOMIC |
3366 | 132 ngx_feature_run=yes |
3362
b57a4a704f3c
GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents:
875
diff
changeset
|
133 ngx_feature_incs= |
b57a4a704f3c
GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents:
875
diff
changeset
|
134 ngx_feature_path= |
b57a4a704f3c
GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents:
875
diff
changeset
|
135 ngx_feature_libs= |
3366 | 136 ngx_feature_test="long n = 0; |
137 if (!__sync_bool_compare_and_swap(&n, 0, 1)) | |
138 return 1; | |
139 if (__sync_fetch_and_add(&n, 1) != 1) | |
140 return 1; | |
141 if (n != 2) | |
142 return 1; | |
143 __sync_synchronize();" | |
3362
b57a4a704f3c
GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents:
875
diff
changeset
|
144 . auto/feature |
b57a4a704f3c
GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents:
875
diff
changeset
|
145 |
b57a4a704f3c
GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents:
875
diff
changeset
|
146 |
517 | 147 if [ "$NGX_CC_NAME" = "ccc" ]; then |
515 | 148 echo "checking for C99 variadic macros ... disabled" |
149 else | |
150 ngx_feature="C99 variadic macros" | |
151 ngx_feature_name="NGX_HAVE_C99_VARIADIC_MACROS" | |
152 ngx_feature_run=yes | |
153 ngx_feature_incs="#include <stdio.h> | |
154 #define var(dummy, ...) sprintf(__VA_ARGS__)" | |
875
7af8276b1c2f
test PCRE in FreeBSD, Linux, and NetBSD
Igor Sysoev <igor@sysoev.ru>
parents:
573
diff
changeset
|
155 ngx_feature_path= |
515 | 156 ngx_feature_libs= |
157 ngx_feature_test="char buf[30]; buf[0] = '0'; | |
158 var(0, buf, \"%d\", 1); | |
159 if (buf[0] != '1') return 1" | |
160 . auto/feature | |
161 fi | |
455 | 162 |
467 | 163 |
3673
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
164 ngx_feature="gcc variadic macros" |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
165 ngx_feature_name="NGX_HAVE_GCC_VARIADIC_MACROS" |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
166 ngx_feature_run=yes |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
167 ngx_feature_incs="#include <stdio.h> |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
168 #define var(dummy, args...) sprintf(args)" |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
169 ngx_feature_path= |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
170 ngx_feature_libs= |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
171 ngx_feature_test="char buf[30]; buf[0] = '0'; |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
172 var(0, buf, \"%d\", 1); |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
173 if (buf[0] != '1') return 1" |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
174 . auto/feature |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
175 |
e27070fb6c6b
try to use C99 variadic macros first:
Igor Sysoev <igor@sysoev.ru>
parents:
3367
diff
changeset
|
176 |
467 | 177 # ngx_feature="inline" |
469 | 178 # ngx_feature_name= |
467 | 179 # ngx_feature_run=no |
180 # ngx_feature_incs="int inline f(void) { return 1 }" | |
875
7af8276b1c2f
test PCRE in FreeBSD, Linux, and NetBSD
Igor Sysoev <igor@sysoev.ru>
parents:
573
diff
changeset
|
181 # ngx_feature_path= |
467 | 182 # ngx_feature_libs= |
183 # ngx_feature_test= | |
184 # . auto/feature | |
185 # | |
186 # if [ $ngx_found = yes ]; then | |
187 # fi | |
188 | |
455 | 189 fi |