comparison src/core/ngx_string.c @ 1726:d2a12e9a34e8 stable-0.5

r1594 merge: unescape SSI include
author Igor Sysoev <igor@sysoev.ru>
date Wed, 12 Dec 2007 20:56:13 +0000
parents ca6845b19113
children d1b075a0f7a2
comparison
equal deleted inserted replaced
1725:0a174d921f1e 1726:d2a12e9a34e8
1241 1241
1242 ch = *s++; 1242 ch = *s++;
1243 1243
1244 switch (state) { 1244 switch (state) {
1245 case sw_usual: 1245 case sw_usual:
1246 if (ch == '?' && type == NGX_UNESCAPE_URI) { 1246 if (ch == '?'
1247 && (type & (NGX_UNESCAPE_URI|NGX_UNESCAPE_REDIRECT)))
1248 {
1247 *d++ = ch; 1249 *d++ = ch;
1248 goto done; 1250 goto done;
1249 } 1251 }
1250 1252
1251 if (ch == '%') { 1253 if (ch == '%') {
1284 state = sw_usual; 1286 state = sw_usual;
1285 1287
1286 if (ch >= '0' && ch <= '9') { 1288 if (ch >= '0' && ch <= '9') {
1287 ch = (u_char) ((decoded << 4) + ch - '0'); 1289 ch = (u_char) ((decoded << 4) + ch - '0');
1288 1290
1289 if (type == NGX_UNESCAPE_URI) { 1291 if (type & NGX_UNESCAPE_REDIRECT) {
1290 if (ch > '%' && ch < 0x7f) { 1292 if (ch > '%' && ch < 0x7f) {
1291 *d++ = ch; 1293 *d++ = ch;
1292 break; 1294 break;
1293 } 1295 }
1294 1296
1304 1306
1305 c = (u_char) (ch | 0x20); 1307 c = (u_char) (ch | 0x20);
1306 if (c >= 'a' && c <= 'f') { 1308 if (c >= 'a' && c <= 'f') {
1307 ch = (u_char) ((decoded << 4) + c - 'a' + 10); 1309 ch = (u_char) ((decoded << 4) + c - 'a' + 10);
1308 1310
1309 if (type == NGX_UNESCAPE_URI) { 1311 if (type & NGX_UNESCAPE_URI) {
1312 if (ch == '?') {
1313 *d++ = ch;
1314 goto done;
1315 }
1316
1317 *d++ = ch;
1318 break;
1319 }
1320
1321 if (type & NGX_UNESCAPE_REDIRECT) {
1310 if (ch == '?') { 1322 if (ch == '?') {
1311 *d++ = ch; 1323 *d++ = ch;
1312 goto done; 1324 goto done;
1313 } 1325 }
1314 1326