summaryrefslogtreecommitdiffhomepage
path: root/src (follow)
AgeCommit message (Collapse)AuthorFilesLines
2012-03-15Merge of r4530, r4531: null character fixes.Maxim Dounin5-10/+30
*) Fixed incorrect ngx_cpystrn() usage in ngx_http_*_process_header(). This resulted in a disclosure of previously freed memory if upstream server returned specially crafted response, potentially exposing sensitive information. Reported by Matthew Daley. *) Headers with null character are now rejected. Headers with NUL character aren't allowed by HTTP standard and may cause various security problems. They are now unconditionally rejected.
2012-03-15Version bump.Maxim Dounin2-3/+3
2012-03-05Merge of r4500: fixed spelling in single-line comments.Maxim Dounin21-38/+38
2012-03-05Merge of r4499: workaround for fs_size on ZFS (ticket #46).Maxim Dounin1-2/+3
ZFS reports incorrect st_blocks until file settles on disk, and this may take a while (i.e. just after creation of a file the st_blocks value is incorrect). As a workaround we now use st_blocks only if st_blocks * 512 > st_size, this should fix ZFS problems while still preserving accuracy for other filesystems. The problem had appeared in r3900 (1.0.1).
2012-03-05Merge of r4498:Maxim Dounin6-122/+87
Fix of rbtree lookup on hash collisions. Previous code incorrectly assumed that nodes with identical keys are linked together. This might not be true after tree rebalance. Patch by Lanshun Zhou.
2012-03-05Merge of r4497:Maxim Dounin1-5/+6
Fixed null pointer dereference in resolver (ticket #91). The cycle->new_log.file may not be set before config parsing finished if there are no error_log directive defined at global level. Fix is to copy it after config parsing. Patch by Roman Arutyunyan.
2012-03-05Merge of r4491, r4492:Maxim Dounin6-31/+48
*) Renamed constants and fixed off-by-one error in "msie_padding on" handling. *) Added support for the 307 Temporary Redirect.
2012-03-05Merge of r4474, r4493: configure/build fixes.Maxim Dounin1-1/+5
*) Fixed build with embedded perl and --with-openssl. *) Configure: moved icc detection before gcc. New versions of icc confuse auto/cc/name due to introduced handling of a "icc -v".
2012-03-05Merge of r4473:Maxim Dounin2-0/+14
Core: protection from cycles with named locations and post_action. Now redirects to named locations are counted against normal uri changes limit, and post_action respects this limit as well. As a result at least the following (bad) configurations no longer trigger infinite cycles: 1. Post action which recursively triggers post action: location / { post_action /index.html; } 2. Post action pointing to nonexistent named location: location / { post_action @nonexistent; } 3. Recursive error page for 500 (Internal Server Error) pointing to a nonexistent named location: location / { recursive_error_pages on; error_page 500 @nonexistent; return 500; }
2012-03-05Merge of r4471:Maxim Dounin1-1/+1
Variables: honor no_cacheable for not_found variables. Variables with the "not_found" flag set follow the same rules as ones with the "valid" flag set. Make sure ngx_http_get_flushed_variable() will flush non-cacheable variables with the "not_found" flag set. This fixes at least one known problem with $args not available in a subrequest (with args) when there were no args in the main request and $args variable was queried in the main request (reported by Laurence Rowe aka elro on irc). Also this eliminates unneeded call to ngx_http_get_indexed_variable() in cacheable case (as it will return cached value anyway).
2012-03-05Merge of r4470:Maxim Dounin1-18/+15
Fix for proxy_store leaving temporary files for subrequests. Temporary files might not be removed if the "proxy_store" or "fastcgi_store" directives were used for subrequests (e.g. ssi includes) and client closed connection prematurely. Non-active subrequests are finalized out of the control of the upstream module when client closes a connection. As a result, the code to remove unfinished temporary files in ngx_http_upstream_process_request() wasn't executed. Fix is to move relevant code into ngx_http_upstream_finalize_request() which is called in all cases, either directly or via the cleanup handler.
2012-03-05Merge of r4468:Maxim Dounin1-20/+6
Removed r->cache/r->cached dependencies in range filter. This is a layering violation, use correct offset calculations instead.
2012-03-05Merge of r4461: upstream: fixed "too big header" check.Maxim Dounin1-1/+1
If header filter postponed processing of a header by returning NGX_AGAIN and not moved u->buffer->pos, previous check incorrectly assumed there is additional space and did another recv() with zero-size buffer. This resulted in "upstream prematurely closed connection" error instead of correct "upstream sent too big header" one. Patch by Feibo Li.
2012-03-05Merge of r4460: ngx_ncpu detection for most *nix platforms.Maxim Dounin1-0/+6
This inaccurate detection by using sysconf(_SC_NPROCESSORS_ONLN) can improve usage of the mutex lock optimization on multicore systems.
2012-03-05Merge of r4423: fixed proxy_redirect off inheritance.Maxim Dounin1-0/+2
2012-03-05Version bump.Maxim Dounin2-3/+3
2012-02-05Merge of r4422:Maxim Dounin1-6/+5
Fixed error handling in ngx_event_connect_peer(). Previously if ngx_add_event() failed a connection was freed two times (once in the ngx_event_connect_peer(), and again by a caller) as pc->connection was left set. Fix is to always use ngx_close_connection() to close connection properly and set pc->connection to NULL on errors. Patch by Piotr Sikora.
2012-02-05Merge of r4416:Maxim Dounin2-19/+10
Fixed AIO error handling on FreeBSD. The aio_return() must be called regardless of the error returned by aio_error(). Not calling it resulted in various problems up to segmentation faults (as AIO events are level-triggered and were reported again and again). Additionally, in "aio sendfile" case r->blocked was incremented in case of error returned from ngx_file_aio_read(), thus causing request hangs.
2012-02-05Merge of r4406, r4413: copyrights updated.Maxim Dounin286-0/+286
2012-02-05Merge of r4405:Maxim Dounin1-1/+1
Fixed division by zero exception in ngx_hash_init(). The ngx_hash_init() function did not expect call with zero elements count, which caused FPE error on configs with an empty "types" block in http context and "types_hash_max_size" > 10000.
2012-02-05Merge of r4404:Maxim Dounin1-1/+4
Fixed sched_setaffinity(2) to correctly pass size. Second argument (cpusetsize) is size in bytes, not in bits. Previously used constant 32 resulted in reading of uninitialized memory and caused EINVAL to be returned on some Linux kernels.
2012-02-05Merge of r4402:Maxim Dounin4-5/+21
Fixed proxy_cache_use_stale in "no live upstreams" case.
2012-02-05Merge of r4401, r4415:Maxim Dounin5-22/+34
SSL changes: *) Added support for TLSv1.1, TLSv1.2 in ssl_protocols directive. Support for TLSv1.1 and TLSv1.2 protocols was introduced in OpenSSL 1.0.1 (-beta1 was recently released). This change makes it possible to disable these protocols and/or enable them without other protocols. *) Removed ENGINE_load_builtin_engines() call. It's already called by OPENSSL_config(). Calling it again causes some openssl engines (notably GOST) to corrupt memory, as they don't expect to be created more than once.
2012-02-05Merge of r4398:Maxim Dounin1-9/+32
Changed ngx_log_debugN() macros to verify the number of arguments when built with debugging.
2012-02-05Merge of r4384, r4385:Maxim Dounin1-8/+12
Fixes for limit_rate: *) Fixed throughput problems with large limit_rate. Previous attempt to fix this was in r1658 (0.6.18), though that one wasn't enough (it was a noop). *) Fixed interaction of limit_rate and sendfile_max_chunk. It's possible that configured limit_rate will permit more bytes per single operation than sendfile_max_chunk. To protect disk from takeover by a single client it is necessary to apply sendfile_max_chunk as a limit regardless of configured limit_rate. See here for report (in Russian): http://mailman.nginx.org/pipermail/nginx-ru/2010-March/032806.html
2012-02-05Merge of r4383, r4403:Maxim Dounin1-4/+6
MP4 fixes: *) Fixed mp4 if first entry in stsc was skipped (ticket #72). If first entry in stsc atom was skipped, and seek was to chunk boundary, than first_chunk in the generated stsc table wasn't set to 1. *) Fixed handling of mp4 above 2G and 32bit offsets (ticket #84).
2012-02-05Merge of r4381, r4400:Maxim Dounin2-2/+5
Fixed limit_conn_log_level/limit_req_log_level inheritance. The directives did not work if there were no limit_conn/limit_req specified on the same level. The code for limit_conn is different in 1.0.x, conflict resolved manually.
2012-02-05Merge of r4375, r4382:Maxim Dounin2-39/+158
SSI changes: *) The "if" command did not work inside the "block" command and produced parsing errors. *) Added regex captures support in the expression of the "if" command.
2012-02-05Merge of r4372, r4373, r4374:Maxim Dounin1-13/+3
SCGI fixes: *) Fixed incorrect use of r->http_version in scgi module. The r->http_version is a version of client's request, and modules must not set it unless they are really willing to downgrade protocol version used for a response (i.e. to HTTP/0.9 if no response headers are available). In neither case r->http_version may be upgraded. The former code downgraded response from HTTP/1.1 to HTTP/1.0 for no reason, causing various problems (see ticket #66). It was also possible that HTTP/0.9 requests were upgraded to HTTP/1.0. *) Removed duplicate function declaration. *) Removed error if there is no Status header. The SCGI specification doesn't specify format of the response, and assuming CGI specs should be used there is no reason to complain. RFC 3875 explicitly states that "A Status header field is optional, and status 200 'OK' is assumed if it is omitted".
2012-02-05Merge of r4339, r4340, r4341:Maxim Dounin1-69/+10
Cache fixes: *) Obsolete code removed. The ngx_http_cache() and ngx_http_no_cache_set_slot() functions were replaced in 0.8.46 and no longer used since then. *) Handling of cache files with long headers. There are two possible situations which can lead to this: response was cached with bigger proxy_buffer_size value (and nginx was restared since then, i.e. shared memory zone content was lost), or due to the race in the cache update code (see [1]) we've end up with fcn->body_start from a different response stored in shared memory zone. *) Only complain on long locked entries. There have been multiple reports of cases where a real locked entry was removed, resulting in a segmentation fault later in a worker which locked the entry. It looks like default inactive timeout isn't enough in real life. For now just ignore such locked entries, and move them to the top of the inactive queue to allow processing of other entries. [1] http://mailman.nginx.org/pipermail/nginx-devel/2011-September/001287.html
2012-02-05Merge of r4338:Maxim Dounin1-17/+14
Renamed some constants to improve readability, no functional changes.
2012-02-05Merge r4336:Maxim Dounin1-2/+7
Microoptimization of sendfile(2) usage under FreeBSD. FreeBSD kernel checks headers/trailers pointer against NULL, not corresponding count. Passing NULL if there are no headers/trailers helps to avoid unneeded work in kernel, as well as unexpected 0 bytes GIO in traces.
2012-02-05Merge of r4335:Maxim Dounin1-12/+29
Fixed: some of $sent_http_* variables might contain header entries which actually wasn't sent to a client. The ngx_http_variable_headers() and ngx_http_variable_unknown_header() functions did not ignore response header entries with zero "hash" field. Thanks to Yichun Zhang (agentzh).
2012-02-04Merge of r4327:Maxim Dounin1-17/+0
Removed unused function ngx_regex_capture_count(). The function has been unused since r3326 (0.8.25).
2012-02-04Merge of r4306, r4320:Maxim Dounin1-0/+12
Protection from stale write events in epoll. Stale write event may happen if epoll_wait() reported both read and write events, and processing of the read event closed descriptor.
2012-02-04Merge of r4326:Maxim Dounin1-0/+1
Fix for read_head with try_files and open_file_cache. The of.read_ahead wasn't set in try_files code path, causing read_ahead directive to be a nop if try_files and open_file_cache were used.
2012-02-04Version bump.Maxim Dounin2-3/+3
2011-12-14Merge of r4315:Maxim Dounin1-0/+1
Allowed add_header for proxied 206 replies. It was working for nginx's own 206 replies as they are seen as 200 in the headers filter module (range filter goes later in the headers filter chain), but not for proxied replies.
2011-12-14Merge of r4313:Maxim Dounin1-0/+9
Added escaping of double quotes in ngx_escape_html(). Patch by Zaur Abasmirzoev.
2011-12-14Merge of r4307:Maxim Dounin1-1/+1
Fix of mp4 module seeking.
2011-12-14Merge of r4305:Maxim Dounin1-12/+14
Fixed segfault on ssl servers without cert with SNI (ticket #54). Non-default servers may not have ssl context created if there are no certificate defined. Make sure to check if ssl context present before using it.
2011-12-14Merge of r4298:Maxim Dounin1-1/+1
Fixed flv header to match specification. Used "\x5" in 5th byte to claim presence of both audio and video. Used previous tag size 0 in the beginning of the flv body (bytes 10 .. 13) as required by specification (see http://www.adobe.com/devnet/f4v.html). Patch by Piotr Sikora.
2011-12-14Merge of r4295:Maxim Dounin1-1/+3
Fixed incorrect counting the length of headers in a SCGI request.
2011-12-14Merge of r4294:Maxim Dounin1-0/+4
Fixed handling of SIGWINCH/NOACCEPT signal. After first upgrade it was ignored since r4020 (1.1.1, 1.0.9) as ngx_daemonized wasn't set.
2011-12-14Merge of r4284:Maxim Dounin4-18/+38
Introduction of simple ngx_write_stderr() instead of ngx_log_stderr() for output of ./configure options, etc., since ngx_log_stderr() output length is limited by 2048 characters defined as NGX_MAX_ERROR_STR.
2011-12-14Merge of r4275, r4276, r4278, r4279:Maxim Dounin4-194/+323
Fixes for proxy_set_header, fastcgi/scgi/uwsgi_param inheritance: *) Fixed proxy_set_header inheritance with proxy_cache (ticket #45). Headers cleared with cache enabled (If-Modified-Since etc.) might be cleared in unrelated servers/locations without proxy_cache enabled if proxy_cache was used in some server/location. Example config which triggered the problem: proxy_set_header X-Test "test"; server { location /1 { proxy_cache name; proxy_pass ... } } server { location /2 { proxy_pass ... } } Another one: server { proxy_cache name; location /1 { proxy_pass ... } location /2 { proxy_cache off; proxy_pass ... } } In both cases If-Modified-Since header wasn't sent to backend in location /2. Fix is to not modify conf->headers_source, but instead merge user-supplied headers from conf->headers_source and default headers (either cache or not) into separate headers_merged array. *) Fixed proxy_set_header inheritance with proxy_set_body. *) Separate functions to merge fastcgi/scgi/uwsgi params. No functional changes. *) Fixed fastcgi/scgi/uwsgi_param inheritance. The following problems were fixed: 1. Directive fastcgi_cache affected headers sent to backends in unrelated servers / locations (see ticket #45). 2. If-Unmodified-Since, If-Match and If-Range headers were sent to backends if fastcgi_cache was used. 3. Cache-related headers were sent to backends if there were no fastcgi_param directives and fastcgi_cache was used at server level.
2011-12-14Merge of r4270, r4274:Maxim Dounin5-6/+6
Minor cleanup: *) Changed error message to be more appropriate in the imaginary "open_file_cache max=0" case. *) Fixed NGX_CONF_TAKE1/NGX_CONF_FLAG misuse.
2011-12-14Merge of r4267, r4301:Maxim Dounin1-7/+9
Fix of the "keepalive_disable" directive.
2011-12-14Merge of r4266, r4308, r4309:Maxim Dounin1-4/+78
Image filter changes: *) The "image_filter_sharpen" directive. *) Cosmetics. *) Fixed "rotate" to always work when combined with "resize/crop".
2011-12-14Merge of r4231, r4300, r4303, r4304:Maxim Dounin1-1/+1
Configure/build changes and fixes: *) Revamped "configure --help" text. *) FreeBSD 10-current has recently gotten POSIX_FADV_* macros. A fix for the broken build applied. *) AIX 7 defines sys_nerr in errno.h, therefore <errno.h> included in the sys_nerr test. When sys_nerr and _sys_nerr are missed on a particular platform and our euristic for a maximum errno detection applied always print the maximum errno number we reached instead of printing void. This makes possible to build nginx on AIX 7.1. *) Made it possible to build/install from the SVN checkout.