Mercurial > hg > nginx-quic
annotate auto/cc/gcc @ 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 | d87b45d4a8a0 d1cea70248c7 |
rev | line source |
---|---|
455 | 1 |
2 # Copyright (C) Igor Sysoev | |
4412 | 3 # Copyright (C) Nginx, Inc. |
455 | 4 |
5 | |
501 | 6 # gcc 2.7.2.3, 2.8.1, 2.95.4, egcs-1.1.2 |
497 | 7 # 3.0.4, 3.1.1, 3.2.3, 3.3.2, 3.3.3, 3.3.4, 3.4.0, 3.4.2 |
521 | 8 # 4.0.0, 4.0.1, 4.1.0 |
501 | 9 |
10 | |
11 NGX_GCC_VER=`$CC -v 2>&1 | grep 'gcc version' 2>&1 \ | |
12 | sed -e 's/^.* version \(.*\)/\1/'` | |
13 | |
14 echo " + gcc version: $NGX_GCC_VER" | |
455 | 15 |
557 | 16 have=NGX_COMPILER value="\"gcc $NGX_GCC_VER\"" . auto/define |
17 | |
455 | 18 |
19 # Solaris 7's /usr/ccs/bin/as does not support "-pipe" | |
20 | |
21 CC_TEST_FLAGS="-pipe" | |
22 | |
577 | 23 ngx_feature="gcc -pipe switch" |
455 | 24 ngx_feature_name= |
25 ngx_feature_run=no | |
26 ngx_feature_incs= | |
875
7af8276b1c2f
test PCRE in FreeBSD, Linux, and NetBSD
Igor Sysoev <igor@sysoev.ru>
parents:
743
diff
changeset
|
27 ngx_feature_path= |
455 | 28 ngx_feature_libs= |
29 ngx_feature_test= | |
30 . auto/feature | |
31 | |
32 CC_TEST_FLAGS= | |
33 | |
34 if [ $ngx_found = yes ]; then | |
35 PIPE="-pipe" | |
36 fi | |
37 | |
561 | 38 |
581 | 39 case "$NGX_MACHINE" in |
561 | 40 |
743 | 41 sun4u | sun4v | sparc | sparc64 ) |
563 | 42 # "-mcpu=v9" enables the "casa" assembler instruction |
561 | 43 CFLAGS="$CFLAGS -mcpu=v9" |
44 ;; | |
45 | |
46 esac | |
47 | |
48 | |
455 | 49 # optimizations |
50 | |
487 | 51 #NGX_GCC_OPT="-O2" |
52 #NGX_GCC_OPT="-Os" | |
53 NGX_GCC_OPT="-O" | |
54 | |
55 #CFLAGS="$CFLAGS -fomit-frame-pointer" | |
455 | 56 |
57 case $CPU in | |
58 pentium) | |
59 # optimize for Pentium and Athlon | |
60 CPU_OPT="-march=pentium" | |
589 | 61 NGX_CPU_CACHE_LINE=32 |
455 | 62 ;; |
63 | |
561 | 64 pentiumpro | pentium3) |
455 | 65 # optimize for Pentium Pro, Pentium II and Pentium III |
66 CPU_OPT="-march=pentiumpro" | |
589 | 67 NGX_CPU_CACHE_LINE=32 |
455 | 68 ;; |
69 | |
70 pentium4) | |
71 # optimize for Pentium 4, gcc 3.x | |
72 CPU_OPT="-march=pentium4" | |
589 | 73 NGX_CPU_CACHE_LINE=128 |
455 | 74 ;; |
75 | |
521 | 76 athlon) |
77 # optimize for Athlon, gcc 3.x | |
78 CPU_OPT="-march=athlon" | |
589 | 79 NGX_CPU_CACHE_LINE=64 |
521 | 80 ;; |
81 | |
509 | 82 opteron) |
83 # optimize for Opteron, gcc 3.x | |
84 CPU_OPT="-march=opteron" | |
589 | 85 NGX_CPU_CACHE_LINE=64 |
509 | 86 ;; |
87 | |
581 | 88 sparc32) |
89 # build 32-bit UltraSparc binary | |
90 CPU_OPT="-m32" | |
91 CORE_LINK="$CORE_LINK -m32" | |
589 | 92 NGX_CPU_CACHE_LINE=64 |
581 | 93 ;; |
94 | |
455 | 95 sparc64) |
96 # build 64-bit UltraSparc binary | |
97 CPU_OPT="-m64" | |
98 CORE_LINK="$CORE_LINK -m64" | |
589 | 99 NGX_CPU_CACHE_LINE=64 |
455 | 100 ;; |
101 | |
613 | 102 ppc64) |
103 # build 64-bit PowerPC binary | |
104 CPU_OPT="-m64" | |
105 CPU_OPT="$CPU_OPT -falign-functions=32 -falign-labels=32" | |
106 CPU_OPT="$CPU_OPT -falign-loops=32 -falign-jumps=32" | |
107 CORE_LINK="$CORE_LINK -m64" | |
108 NGX_CPU_CACHE_LINE=128 | |
109 ;; | |
110 | |
455 | 111 esac |
112 | |
3362
b57a4a704f3c
GCC 4.1 builtin atomic operations
Igor Sysoev <igor@sysoev.ru>
parents:
2751
diff
changeset
|
113 CC_AUX_FLAGS="$CC_AUX_FLAGS $CPU_OPT" |
455 | 114 |
501 | 115 case "$NGX_GCC_VER" in |
116 2.7*) | |
117 # batch build | |
118 CPU_OPT= | |
119 ;; | |
120 esac | |
455 | 121 |
122 | |
123 CFLAGS="$CFLAGS $PIPE $CPU_OPT" | |
124 | |
125 if [ ".$PCRE_OPT" = "." ]; then | |
126 PCRE_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT" | |
127 else | |
128 PCRE_OPT="$PCRE_OPT $PIPE" | |
129 fi | |
130 | |
131 if [ ".$MD5_OPT" = "." ]; then | |
132 MD5_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT" | |
133 else | |
134 MD5_OPT="$MD5_OPT $PIPE" | |
135 fi | |
136 | |
137 if [ ".$ZLIB_OPT" = "." ]; then | |
138 ZLIB_OPT="-O2 -fomit-frame-pointer $PIPE $CPU_OPT" | |
139 else | |
140 ZLIB_OPT="$ZLIB_OPT $PIPE" | |
141 fi | |
142 | |
143 | |
144 # warnings | |
145 | |
487 | 146 # -W requires at least -O |
1010 | 147 CFLAGS="$CFLAGS ${NGX_GCC_OPT:--O} -W" |
487 | 148 |
455 | 149 CFLAGS="$CFLAGS -Wall -Wpointer-arith" |
577 | 150 #CFLAGS="$CFLAGS -Wconversion" |
455 | 151 #CFLAGS="$CFLAGS -Winline" |
152 | |
501 | 153 |
154 case "$NGX_GCC_VER" in | |
155 3.* | 4.* ) | |
156 # we have a lot of the unused function arguments | |
157 CFLAGS="$CFLAGS -Wno-unused-parameter" | |
2751 | 158 CFLAGS="$CFLAGS -Wunused-function" |
563 | 159 CFLAGS="$CFLAGS -Wunused-variable" |
160 CFLAGS="$CFLAGS -Wunused-value" | |
2751 | 161 # 4.2.1 shows the warning in wrong places |
501 | 162 #CFLAGS="$CFLAGS -Wunreachable-code" |
163 ;; | |
164 | |
165 *) | |
166 # we have a lot of the unused function arguments | |
167 CFLAGS="$CFLAGS -Wno-unused" | |
168 ;; | |
169 esac | |
170 | |
455 | 171 |
172 # stop on warning | |
173 CFLAGS="$CFLAGS -Werror" | |
174 | |
175 # debug | |
176 CFLAGS="$CFLAGS -g" | |
177 | |
178 # DragonFly's gcc3 generates DWARF | |
179 #CFLAGS="$CFLAGS -g -gstabs" | |
180 | |
181 if [ ".$CPP" = "." ]; then | |
182 CPP="$CC -E" | |
183 fi |