comparison src/core/ngx_string.c @ 638:692f4d4d7f10 NGINX_1_0_9

nginx 1.0.9 *) Change: now the 0x7F-0x1F characters are escaped as \xXX in an access_log. *) Change: now SIGWINCH signal works only in daemon mode. *) Feature: "proxy/fastcgi/scgi/uwsgi_ignore_headers" directives support the following additional values: X-Accel-Limit-Rate, X-Accel-Buffering, X-Accel-Charset. *) Feature: decrease of memory consumption if SSL is used. *) Feature: accept filters are now supported on NetBSD. *) Feature: the "uwsgi_buffering" and "scgi_buffering" directives. Thanks to Peter Smit. *) Bugfix: a segmentation fault occurred on start or while reconfiguration if the "ssl" directive was used at http level and there was no "ssl_certificate" defined. *) Bugfix: some UTF-8 characters were processed incorrectly. Thanks to Alexey Kuts. *) Bugfix: the ngx_http_rewrite_module directives specified at "server" level were executed twice if no matching locations were defined. *) Bugfix: a socket leak might occurred if "aio sendfile" was used. *) Bugfix: connections with fast clients might be closed after send_timeout if file AIO was used. *) Bugfix: in the ngx_http_autoindex_module. *) Bugfix: the module ngx_http_mp4_module did not support seeking on 32-bit platforms. *) Bugfix: non-cacheable responses might be cached if "proxy_cache_bypass" directive was used. Thanks to John Ferlito. *) Bugfix: cached responses with an empty body were returned incorrectly; the bug had appeared in 0.8.31. *) Bugfix: 201 responses of the ngx_http_dav_module were incorrect; the bug had appeared in 0.8.32. *) Bugfix: in the "return" directive. *) Bugfix: the "ssl_verify_client", "ssl_verify_depth", and "ssl_prefer_server_ciphers" directives might work incorrectly if SNI was used.
author Igor Sysoev <http://sysoev.ru>
date Tue, 01 Nov 2011 00:00:00 +0400
parents 6c96fdd2dfc3
children 1b80544421e8
comparison
equal deleted inserted replaced
637:ea7441793bba 638:692f4d4d7f10
379 scale *= 10.0; 379 scale *= 10.0;
380 } 380 }
381 381
382 /* 382 /*
383 * (int64_t) cast is required for msvc6: 383 * (int64_t) cast is required for msvc6:
384 * it can not convert uint64_t to double 384 * it cannot convert uint64_t to double
385 */ 385 */
386 ui64 = (uint64_t) ((f - (int64_t) ui64) * scale + 0.5); 386 ui64 = (uint64_t) ((f - (int64_t) ui64) * scale + 0.5);
387 387
388 buf = ngx_sprintf_num(buf, last, ui64, '0', 0, frac_width); 388 buf = ngx_sprintf_num(buf, last, ui64, '0', 0, frac_width);
389 } 389 }
1209 size_t len; 1209 size_t len;
1210 uint32_t u, i, valid; 1210 uint32_t u, i, valid;
1211 1211
1212 u = **p; 1212 u = **p;
1213 1213
1214 if (u > 0xf0) { 1214 if (u >= 0xf0) {
1215 1215
1216 u &= 0x07; 1216 u &= 0x07;
1217 valid = 0xffff; 1217 valid = 0xffff;
1218 len = 3; 1218 len = 3;
1219 1219
1220 } else if (u > 0xe0) { 1220 } else if (u >= 0xe0) {
1221 1221
1222 u &= 0x0f; 1222 u &= 0x0f;
1223 valid = 0x7ff; 1223 valid = 0x7ff;
1224 len = 2; 1224 len = 2;
1225 1225
1226 } else if (u > 0xc0) { 1226 } else if (u >= 0xc2) {
1227 1227
1228 u &= 0x1f; 1228 u &= 0x1f;
1229 valid = 0x7f; 1229 valid = 0x7f;
1230 len = 1; 1230 len = 1;
1231 1231
1371 /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */ 1371 /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
1372 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */ 1372 0x00000000, /* 0000 0000 0000 0000 0000 0000 0000 0000 */
1373 1373
1374 /* ~}| {zyx wvut srqp onml kjih gfed cba` */ 1374 /* ~}| {zyx wvut srqp onml kjih gfed cba` */
1375 0x80000000, /* 1000 0000 0000 0000 0000 0000 0000 0000 */ 1375 0x80000000, /* 1000 0000 0000 0000 0000 0000 0000 0000 */
1376
1377 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
1378 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
1379 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
1380 0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
1381 };
1382
1383 /* not ALPHA, DIGIT, "-", ".", "_", "~" */
1384
1385 static uint32_t uri_component[] = {
1386 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
1387
1388 /* ?>=< ;:98 7654 3210 /.-, +*)( '&%$ #"! */
1389 0xfc009fff, /* 1111 1100 0000 0000 1001 1111 1111 1111 */
1390
1391 /* _^]\ [ZYX WVUT SRQP ONML KJIH GFED CBA@ */
1392 0x78000001, /* 0111 1000 0000 0000 0000 0000 0000 0001 */
1393
1394 /* ~}| {zyx wvut srqp onml kjih gfed cba` */
1395 0xb8000001, /* 1011 1000 0000 0000 0000 0000 0000 0001 */
1376 1396
1377 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */ 1397 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
1378 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */ 1398 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
1379 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */ 1399 0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
1380 0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */ 1400 0xffffffff /* 1111 1111 1111 1111 1111 1111 1111 1111 */
1441 }; 1461 };
1442 1462
1443 /* mail_auth is the same as memcached */ 1463 /* mail_auth is the same as memcached */
1444 1464
1445 static uint32_t *map[] = 1465 static uint32_t *map[] =
1446 { uri, args, html, refresh, memcached, memcached }; 1466 { uri, args, uri_component, html, refresh, memcached, memcached };
1447 1467
1448 1468
1449 escape = map[type]; 1469 escape = map[type];
1450 1470
1451 if (dst == NULL) { 1471 if (dst == NULL) {