mirror of
https://github.com/openresty/openresty.git
synced 2024-10-13 00:29:41 +00:00
Compare commits
161 Commits
Author | SHA1 | Date | |
---|---|---|---|
02614af5ed | |||
163432a678 | |||
c338e4d0e2 | |||
374f575dfa | |||
b53c539f7e | |||
a16a33d417 | |||
e3e60a3a68 | |||
71a675f4fb | |||
adb00e91e7 | |||
c6aad4deba | |||
b8bf7bbb4c | |||
0528788543 | |||
378f94fb58 | |||
5be3b51678 | |||
2fb9ed5c1d | |||
1728ca8c66 | |||
157febe350 | |||
633abb71bf | |||
8b86c72ea2 | |||
97622943d2 | |||
383ed9a47d | |||
bd81be02ee | |||
fa917e6620 | |||
b694456ef3 | |||
95d727fd8f | |||
a860e4192c | |||
68d1241d12 | |||
73201a29f7 | |||
6522b3420c | |||
360aaab086 | |||
78cca18fef | |||
a06c2308e1 | |||
d919948850 | |||
cd3b7f3bfb | |||
d846011a3e | |||
e4ff7dbfac | |||
f35f66a487 | |||
aac5d5e49e | |||
8bc4bf391a | |||
1df484be52 | |||
4308a5ca45 | |||
274b1b6778 | |||
2d3ff6af97 | |||
5f7b64e17a | |||
4513cad926 | |||
a7c39891c6 | |||
35e053cb6c | |||
ae74836236 | |||
b0d3505b31 | |||
9d2ae2e217 | |||
6bb19476b4 | |||
f0a2f6543e | |||
937985fc03 | |||
457d0526ea | |||
f0243eb2aa | |||
76a803640a | |||
5fe07d1df5 | |||
2c23a0859e | |||
8012da1f61 | |||
e0d777bb5d | |||
37737082dd | |||
5c77ae9d4a | |||
2d2132d232 | |||
559f187c3c | |||
609e375e66 | |||
e84b9d0175 | |||
221130defc | |||
921fd6d675 | |||
c36f990f10 | |||
b3ed109998 | |||
3d547529fd | |||
d0834f8cd9 | |||
5f2ede4fd2 | |||
0222649b03 | |||
320c5008e4 | |||
a4006329a7 | |||
2890410b68 | |||
197399d1b6 | |||
54f86fd361 | |||
110c8fe4ce | |||
a825570875 | |||
2bfd01ed14 | |||
49599affe9 | |||
96abf202e4 | |||
6f31d3b261 | |||
cee1aca97f | |||
b9325c34d8 | |||
a169416e71 | |||
cef62e1aa8 | |||
bb367bc9e6 | |||
3a7529d7d0 | |||
4cdd11476b | |||
c312ba38b3 | |||
5328f0113f | |||
b9eb443da6 | |||
72da5ad7ba | |||
ac3b864532 | |||
6c14ea5c56 | |||
b68ec13a71 | |||
76f2f6c2f3 | |||
a5c4d85835 | |||
24d8c2265e | |||
d9a491a88c | |||
6ce2a28c23 | |||
07fbdad118 | |||
ca9f8d0622 | |||
090060c907 | |||
b156d2db62 | |||
dbb9c98bee | |||
4c300f618d | |||
62bbc5c4c5 | |||
529f4c854c | |||
3a873d7874 | |||
aadd93ff24 | |||
bae91cc5c4 | |||
ea1d378e84 | |||
ed2f8de61a | |||
1d096c047e | |||
1bfc510257 | |||
9f0143b14f | |||
05ae54a092 | |||
09598a3e19 | |||
977c5b1d51 | |||
6063956a1a | |||
e91766c012 | |||
a2ed0a0403 | |||
8e57e2541b | |||
f5f2d672e7 | |||
49d9d9b778 | |||
13efb24106 | |||
3be0b7f0e1 | |||
5fb8647d23 | |||
e7053c9ca9 | |||
042e2fd27b | |||
1d909539a8 | |||
d54e2dcc69 | |||
009db177df | |||
7e359ff049 | |||
9f52ad4a45 | |||
a925be09c9 | |||
d91993fc38 | |||
0a9a7012dc | |||
c9f5ca8566 | |||
7495a32ec2 | |||
9e944b8c53 | |||
b259f33198 | |||
db978031d2 | |||
1ca5fb8597 | |||
8496c99def | |||
f1083d82d4 | |||
dd4620afaf | |||
45c5114e9d | |||
a553009af0 | |||
ed74e3d767 | |||
c0208b8c40 | |||
2681361df1 | |||
0a2dcd7c50 | |||
3e5b0eeee3 | |||
42d640985e | |||
8e35463045 | |||
fc1929f37d |
83
README
83
README
@ -1,83 +0,0 @@
|
||||
ngx_openresty is a full-fledged web application server by bundling the standard nginx core,
|
||||
lots of 3rd-party nginx modules, as well as most of their external dependencies.
|
||||
|
||||
This bundle is maintained by us, agentzh and chaoslawful, and sponsored by
|
||||
Taobao.com, Alibaba Group.
|
||||
|
||||
Because most of the nginx modules are developed by the bundle maintainers, it can ensure
|
||||
that all these modules are played well together.
|
||||
|
||||
The bundled software components are copyrighted by the respective copyright holders.
|
||||
|
||||
The homepage for this project is http://openresty.org.
|
||||
|
||||
For users:
|
||||
Visit http://openresty.org/#Download to download the latest bundle tarball, and
|
||||
follow the installation instructions in the page http://openresty.org/#Installation.
|
||||
|
||||
For bundle maintainers:
|
||||
|
||||
The bundle's source is at the following git repository:
|
||||
|
||||
https://github.com/agentzh/ngx_openresty
|
||||
|
||||
To reproduce the bundle tarball, just do
|
||||
|
||||
make
|
||||
|
||||
at the top of the bundle source tree.
|
||||
|
||||
MAILING LIST
|
||||
You're very welcome to join the English OpenResty mailing list hosted on
|
||||
Google Groups:
|
||||
|
||||
https://groups.google.com/group/openresty-en
|
||||
|
||||
The Chinese mailing list is here:
|
||||
|
||||
https://groups.google.com/group/openresty
|
||||
|
||||
REPORT BUGS
|
||||
|
||||
You're very welcome to report issues on GitHub:
|
||||
|
||||
https://github.com/agentzh/ngx_openresty/issues
|
||||
|
||||
COPYRIGHT & LICENSE
|
||||
|
||||
The bundle itself is licensed under the 2-clause BSD license.
|
||||
|
||||
Copyright (c) 2011, Taobao Inc., Alibaba Group (
|
||||
http://www.taobao.com ).
|
||||
|
||||
Copyright (c) 2011, Yichun "agentzh" Zhang (章亦春)
|
||||
<agentzh@gmail.com>.
|
||||
|
||||
Copyright (c) 2011, Xiaozhe "chaoslawful" Wang (王晓哲)
|
||||
<chaoslawful@gmail.com>.
|
||||
|
||||
This module is licensed under the terms of the BSD license.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
* Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
85
README.markdown
Normal file
85
README.markdown
Normal file
@ -0,0 +1,85 @@
|
||||
Name
|
||||
====
|
||||
|
||||
ngx_openresty - Turning Nginx into a full-fledged Web App Server
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
ngx_openresty is a full-fledged web application server by bundling the standard nginx core,
|
||||
lots of 3rd-party nginx modules, as well as most of their external dependencies.
|
||||
|
||||
This bundle is maintained Yichun Zhang (agentzh).
|
||||
|
||||
Because most of the nginx modules are developed by the bundle maintainers, it can ensure
|
||||
that all these modules are played well together.
|
||||
|
||||
The bundled software components are copyrighted by the respective copyright holders.
|
||||
|
||||
The homepage for this project is http://openresty.org.
|
||||
|
||||
For Users
|
||||
---------
|
||||
|
||||
Visit http://openresty.org/#Download to download the latest bundle tarball, and
|
||||
follow the installation instructions in the page http://openresty.org/#Installation.
|
||||
|
||||
For Bundle Maintainers
|
||||
----------------------
|
||||
|
||||
The bundle's source is at the following git repository:
|
||||
|
||||
https://github.com/agentzh/ngx_openresty
|
||||
|
||||
To reproduce the bundle tarball, just do
|
||||
|
||||
make
|
||||
|
||||
at the top of the bundle source tree.
|
||||
|
||||
Mailing List
|
||||
============
|
||||
|
||||
You're very welcome to join the English OpenResty mailing list hosted on Google Groups:
|
||||
|
||||
https://groups.google.com/group/openresty-en
|
||||
|
||||
The Chinese mailing list is here:
|
||||
|
||||
https://groups.google.com/group/openresty
|
||||
|
||||
Report Bugs
|
||||
===========
|
||||
|
||||
You're very welcome to report issues on GitHub:
|
||||
|
||||
https://github.com/agentzh/ngx_openresty/issues
|
||||
|
||||
Copyright & License
|
||||
===================
|
||||
|
||||
The bundle itself is licensed under the 2-clause BSD license.
|
||||
|
||||
Copyright (c) 2011-2013, Yichun "agentzh" Zhang (章亦春) <agentzh@gmail.com>, CloudFlare Inc.
|
||||
|
||||
This module is licensed under the terms of the BSD license.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
11
patches/lua-5.1.5-enable_debug_info.patch
Normal file
11
patches/lua-5.1.5-enable_debug_info.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- lua-5.1.5/src/Makefile 2012-02-13 12:41:22.000000000 -0800
|
||||
+++ lua-5.1.5-patched/src/Makefile 2013-04-20 22:56:42.921286886 -0700
|
||||
@@ -8,7 +8,7 @@
|
||||
PLAT= none
|
||||
|
||||
CC= gcc
|
||||
-CFLAGS= -O2 -Wall $(MYCFLAGS)
|
||||
+CFLAGS= -g -O2 -Wall $(MYCFLAGS)
|
||||
AR= ar rcu
|
||||
RANLIB= ranlib
|
||||
RM= rm -f
|
@ -1,136 +0,0 @@
|
||||
diff -ur nginx-1.2.6/src/http/ngx_http_core_module.c nginx-1.2.6-patched/src/http/ngx_http_core_module.c
|
||||
--- nginx-1.2.6/src/http/ngx_http_core_module.c 2012-08-06 10:31:32.000000000 -0700
|
||||
+++ nginx-1.2.6-patched/src/http/ngx_http_core_module.c 2012-08-30 11:37:42.388213974 -0700
|
||||
@@ -2420,6 +2420,8 @@
|
||||
|
||||
sr->request_body = r->request_body;
|
||||
|
||||
+ sr->content_length_n = -1;
|
||||
+
|
||||
sr->method = NGX_HTTP_GET;
|
||||
sr->http_version = r->http_version;
|
||||
|
||||
diff -ur nginx-1.2.6/src/http/ngx_http_request_body.c nginx-1.2.6-patched/src/http/ngx_http_request_body.c
|
||||
--- nginx-1.2.6/src/http/ngx_http_request_body.c 2012-04-12 12:35:41.000000000 -0700
|
||||
+++ nginx-1.2.6-patched/src/http/ngx_http_request_body.c 2012-08-30 11:37:42.388213974 -0700
|
||||
@@ -39,7 +39,7 @@
|
||||
|
||||
r->main->count++;
|
||||
|
||||
- if (r->request_body || r->discard_body) {
|
||||
+ if (r->request_body || r->discard_body || r->content_length_n == 0) {
|
||||
post_handler(r);
|
||||
return NGX_OK;
|
||||
}
|
||||
@@ -441,7 +441,7 @@
|
||||
ssize_t size;
|
||||
ngx_event_t *rev;
|
||||
|
||||
- if (r != r->main || r->discard_body) {
|
||||
+ if (r != r->main || r->discard_body || r->content_length_n == 0) {
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
@@ -457,20 +457,22 @@
|
||||
ngx_del_timer(rev);
|
||||
}
|
||||
|
||||
- if (r->headers_in.content_length_n <= 0 || r->request_body) {
|
||||
+ r->content_length_n = r->headers_in.content_length_n;
|
||||
+
|
||||
+ if (r->content_length_n <= 0 || r->request_body) {
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
size = r->header_in->last - r->header_in->pos;
|
||||
|
||||
if (size) {
|
||||
- if (r->headers_in.content_length_n > size) {
|
||||
+ if (r->content_length_n > size) {
|
||||
r->header_in->pos += size;
|
||||
- r->headers_in.content_length_n -= size;
|
||||
+ r->content_length_n -= size;
|
||||
|
||||
} else {
|
||||
- r->header_in->pos += (size_t) r->headers_in.content_length_n;
|
||||
- r->headers_in.content_length_n = 0;
|
||||
+ r->header_in->pos += (size_t) r->content_length_n;
|
||||
+ r->content_length_n = 0;
|
||||
return NGX_OK;
|
||||
}
|
||||
}
|
||||
@@ -569,7 +571,7 @@
|
||||
"http read discarded body");
|
||||
|
||||
for ( ;; ) {
|
||||
- if (r->headers_in.content_length_n == 0) {
|
||||
+ if (r->content_length_n == 0) {
|
||||
r->read_event_handler = ngx_http_block_reading;
|
||||
return NGX_OK;
|
||||
}
|
||||
@@ -578,9 +580,9 @@
|
||||
return NGX_AGAIN;
|
||||
}
|
||||
|
||||
- size = (r->headers_in.content_length_n > NGX_HTTP_DISCARD_BUFFER_SIZE) ?
|
||||
+ size = (r->content_length_n > NGX_HTTP_DISCARD_BUFFER_SIZE) ?
|
||||
NGX_HTTP_DISCARD_BUFFER_SIZE:
|
||||
- (size_t) r->headers_in.content_length_n;
|
||||
+ (size_t) r->content_length_n;
|
||||
|
||||
n = r->connection->recv(r->connection, buffer, size);
|
||||
|
||||
@@ -597,7 +599,7 @@
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
- r->headers_in.content_length_n -= n;
|
||||
+ r->content_length_n -= n;
|
||||
}
|
||||
}
|
||||
|
||||
diff -ur nginx-1.2.6/src/http/ngx_http_request.c nginx-1.2.6-patched/src/http/ngx_http_request.c
|
||||
--- nginx-1.2.6/src/http/ngx_http_request.c 2012-08-06 10:36:30.000000000 -0700
|
||||
+++ nginx-1.2.6-patched/src/http/ngx_http_request.c 2012-08-30 11:37:42.395213999 -0700
|
||||
@@ -287,6 +287,8 @@
|
||||
|
||||
r->pipeline = hc->pipeline;
|
||||
|
||||
+ r->content_length_n = -1;
|
||||
+
|
||||
if (hc->nbusy) {
|
||||
r->header_in = hc->busy[0];
|
||||
}
|
||||
@@ -298,6 +300,8 @@
|
||||
return;
|
||||
}
|
||||
|
||||
+ r->content_length_n = -1;
|
||||
+
|
||||
hc->request = r;
|
||||
}
|
||||
|
||||
diff -ur nginx-1.2.6/src/http/ngx_http_request.h nginx-1.2.6-patched/src/http/ngx_http_request.h
|
||||
--- nginx-1.2.6/src/http/ngx_http_request.h 2012-07-02 10:41:52.000000000 -0700
|
||||
+++ nginx-1.2.6-patched/src/http/ngx_http_request.h 2012-08-30 11:39:37.085644830 -0700
|
||||
@@ -9,6 +9,9 @@
|
||||
#define _NGX_HTTP_REQUEST_H_INCLUDED_
|
||||
|
||||
|
||||
+#define HAVE_ALLOW_REQUEST_BODY_UPDATING_PATCH
|
||||
+
|
||||
+
|
||||
#define NGX_HTTP_MAX_URI_CHANGES 10
|
||||
#define NGX_HTTP_MAX_SUBREQUESTS 200
|
||||
|
||||
@@ -375,6 +378,9 @@
|
||||
ngx_pool_t *pool;
|
||||
ngx_buf_t *header_in;
|
||||
|
||||
+ off_t content_length_n;
|
||||
+ /* for discarding request body */
|
||||
+
|
||||
ngx_http_headers_in_t headers_in;
|
||||
ngx_http_headers_out_t headers_out;
|
||||
|
||||
Only in nginx-1.2.6-patched/src/http: ngx_http_request.h.orig
|
@ -454,10 +454,10 @@ index efbc244..8d81aab 100644
|
||||
|
||||
diff --git a/src/dtrace/nginx.stp b/src/dtrace/nginx.stp
|
||||
new file mode 100644
|
||||
index 0000000..5bae185
|
||||
index 0000000..8a5a54a
|
||||
--- /dev/null
|
||||
+++ b/src/dtrace/nginx.stp
|
||||
@@ -0,0 +1,269 @@
|
||||
@@ -0,0 +1,278 @@
|
||||
+/* tapset for nginx */
|
||||
+
|
||||
+
|
||||
@ -549,6 +549,10 @@ index 0000000..5bae185
|
||||
+ return @cast(cl, "ngx_chain_t", "NGX_SBIN_PATH")->next
|
||||
+}
|
||||
+
|
||||
+function ngx_buf_tag(b)
|
||||
+{
|
||||
+ return @cast(b, "ngx_buf_t", "NGX_SBIN_PATH")->tag
|
||||
+}
|
||||
+
|
||||
+function ngx_buf_in_memory(b)
|
||||
+{
|
||||
@ -658,9 +662,14 @@ index 0000000..5bae185
|
||||
+ out .= "<flush>"
|
||||
+ }
|
||||
+
|
||||
+ tag = ngx_buf_tag(buf)
|
||||
+ if (tag) {
|
||||
+ out .= sprintf("<tag:%p>", tag)
|
||||
+ }
|
||||
+
|
||||
+ cl = ngx_chain_next(cl)
|
||||
+ if (cl) {
|
||||
+ out .= sprintf(" ")
|
||||
+ out .= " "
|
||||
+ }
|
||||
+ }
|
||||
+ return out
|
||||
@ -891,7 +900,7 @@ index f1f8a48..91bdd64 100644
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
|
||||
index 18402df..1487fef 100644
|
||||
index e02a251..6371fbc 100644
|
||||
--- a/src/http/ngx_http_core_module.c
|
||||
+++ b/src/http/ngx_http_core_module.c
|
||||
@@ -8,6 +8,7 @@
|
||||
@ -911,7 +920,7 @@ index 18402df..1487fef 100644
|
||||
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
|
||||
"subrequests cycle while processing \"%V\"", uri);
|
||||
r->main->subrequests = 1;
|
||||
@@ -2491,6 +2494,8 @@ ngx_http_subrequest(ngx_http_request_t *r,
|
||||
@@ -2489,6 +2492,8 @@ ngx_http_subrequest(ngx_http_request_t *r,
|
||||
|
||||
*psr = sr;
|
||||
|
||||
@ -1002,7 +1011,7 @@ index 0000000..d7d2d45
|
||||
+
|
||||
+#endif /* _NGX_HTTP_PROBE_H_INCLUDED_ */
|
||||
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
|
||||
index c44a2cc..fa3bece 100644
|
||||
index ee00fd3..441b5cc 100644
|
||||
--- a/src/http/ngx_http_request.c
|
||||
+++ b/src/http/ngx_http_request.c
|
||||
@@ -8,6 +8,7 @@
|
||||
@ -1013,7 +1022,7 @@ index c44a2cc..fa3bece 100644
|
||||
|
||||
|
||||
static void ngx_http_init_request(ngx_event_t *ev);
|
||||
@@ -865,6 +866,8 @@ ngx_http_process_request_line(ngx_event_t *rev)
|
||||
@@ -861,6 +862,8 @@ ngx_http_process_request_line(ngx_event_t *rev)
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -1022,7 +1031,7 @@ index c44a2cc..fa3bece 100644
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
|
||||
"http request line: \"%V\"", &r->request_line);
|
||||
|
||||
@@ -1112,6 +1115,8 @@ ngx_http_process_request_headers(ngx_event_t *rev)
|
||||
@@ -1108,6 +1111,8 @@ ngx_http_process_request_headers(ngx_event_t *rev)
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1031,7 +1040,7 @@ index c44a2cc..fa3bece 100644
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"http header: \"%V: %V\"",
|
||||
&h->key, &h->value);
|
||||
@@ -1962,7 +1967,11 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
|
||||
@@ -1958,7 +1963,11 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
|
||||
}
|
||||
|
||||
if (r != r->main && r->post_subrequest) {
|
||||
@ -1043,7 +1052,7 @@ index c44a2cc..fa3bece 100644
|
||||
}
|
||||
|
||||
if (rc == NGX_ERROR
|
||||
@@ -2012,6 +2021,8 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
|
||||
@@ -2008,6 +2017,8 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
|
||||
|
||||
if (r->buffered || r->postponed) {
|
||||
|
||||
@ -1052,7 +1061,7 @@ index c44a2cc..fa3bece 100644
|
||||
if (ngx_http_set_write_handler(r) != NGX_OK) {
|
||||
ngx_http_terminate_request(r, 0);
|
||||
}
|
||||
@@ -2048,10 +2059,14 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
|
||||
@@ -2044,10 +2055,14 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
|
||||
pr->postponed = pr->postponed->next;
|
||||
}
|
||||
|
||||
@ -1067,7 +1076,7 @@ index c44a2cc..fa3bece 100644
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
|
||||
"http finalize non-active request: \"%V?%V\"",
|
||||
&r->uri, &r->args);
|
||||
@@ -2063,6 +2078,8 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
|
||||
@@ -2059,6 +2074,8 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1077,7 +1086,7 @@ index c44a2cc..fa3bece 100644
|
||||
r->main->count++;
|
||||
ngx_http_terminate_request(r, 0);
|
||||
diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c
|
||||
index d0a8ecc..40b2061 100644
|
||||
index 3c69d05..89858d0 100644
|
||||
--- a/src/http/ngx_http_request_body.c
|
||||
+++ b/src/http/ngx_http_request_body.c
|
||||
@@ -8,6 +8,7 @@
|
||||
@ -1091,7 +1100,7 @@ index d0a8ecc..40b2061 100644
|
||||
@@ -40,11 +41,15 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
|
||||
r->main->count++;
|
||||
|
||||
if (r->request_body || r->discard_body || r->content_length_n == 0) {
|
||||
if (r->request_body || r->discard_body) {
|
||||
+ ngx_http_probe_read_body_abort(r,
|
||||
+ r->request_body ? "body exists"
|
||||
+ : "body discarded");
|
||||
|
@ -0,0 +1,31 @@
|
||||
--- nginx-1.2.6/src/event/modules/ngx_poll_module.c 2012-01-18 07:07:43.000000000 -0800
|
||||
+++ nginx-1.2.6-patched/src/event/modules/ngx_poll_module.c 2013-01-23 12:34:13.990781456 -0800
|
||||
@@ -367,11 +367,18 @@ ngx_poll_process_events(ngx_cycle_t *cyc
|
||||
*/
|
||||
|
||||
revents |= POLLIN|POLLOUT;
|
||||
+ if (c->read->active) {
|
||||
+ revents |= POLLIN;
|
||||
+ }
|
||||
+
|
||||
+ if (c->write->active) {
|
||||
+ revents |= POLLOUT;
|
||||
+ }
|
||||
}
|
||||
|
||||
found = 0;
|
||||
|
||||
- if (revents & POLLIN) {
|
||||
+ if ((revents & POLLIN) && c->read->active) {
|
||||
found = 1;
|
||||
|
||||
ev = c->read;
|
||||
@@ -388,7 +395,7 @@ ngx_poll_process_events(ngx_cycle_t *cyc
|
||||
ngx_locked_post_event(ev, queue);
|
||||
}
|
||||
|
||||
- if (revents & POLLOUT) {
|
||||
+ if ((revents & POLLOUT) && c->write->active) {
|
||||
found = 1;
|
||||
ev = c->write;
|
||||
|
42
patches/nginx-1.2.7-channel-uninit-params.patch
Normal file
42
patches/nginx-1.2.7-channel-uninit-params.patch
Normal file
@ -0,0 +1,42 @@
|
||||
diff -urp nginx-1.2.7/src/os/unix/ngx_channel.c nginx-1.2.7-patched/src/os/unix/ngx_channel.c
|
||||
--- nginx-1.2.7/src/os/unix/ngx_channel.c 2012-01-18 07:07:43.000000000 -0800
|
||||
+++ nginx-1.2.7-patched/src/os/unix/ngx_channel.c 2012-09-17 11:33:09.215394217 -0700
|
||||
@@ -31,6 +31,8 @@ ngx_write_channel(ngx_socket_t s, ngx_ch
|
||||
msg.msg_controllen = 0;
|
||||
|
||||
} else {
|
||||
+ ngx_memzero(&cmsg, sizeof(cmsg));
|
||||
+
|
||||
msg.msg_control = (caddr_t) &cmsg;
|
||||
msg.msg_controllen = sizeof(cmsg);
|
||||
|
||||
diff -urp nginx-1.2.7/src/os/unix/ngx_process_cycle.c nginx-1.2.7-patched/src/os/unix/ngx_process_cycle.c
|
||||
--- nginx-1.2.7/src/os/unix/ngx_process_cycle.c 2012-07-02 09:23:14.000000000 -0700
|
||||
+++ nginx-1.2.7-patched/src/os/unix/ngx_process_cycle.c 2012-09-17 11:33:09.214394215 -0700
|
||||
@@ -356,6 +356,8 @@ ngx_start_worker_processes(ngx_cycle_t *
|
||||
|
||||
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start worker processes");
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_OPEN_CHANNEL;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
@@ -463,6 +465,8 @@ ngx_signal_worker_processes(ngx_cycle_t
|
||||
ngx_err_t err;
|
||||
ngx_channel_t ch;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
#if (NGX_BROKEN_SCM_RIGHTS)
|
||||
|
||||
ch.command = 0;
|
||||
@@ -564,6 +568,8 @@ ngx_reap_children(ngx_cycle_t *cycle)
|
||||
ngx_channel_t ch;
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_CLOSE_CHANNEL;
|
||||
ch.fd = -1;
|
||||
|
13
patches/nginx-1.2.7-cve-2013-2070.patch
Normal file
13
patches/nginx-1.2.7-cve-2013-2070.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- src/http/modules/ngx_http_proxy_module.c
|
||||
+++ src/http/modules/ngx_http_proxy_module.c
|
||||
@@ -1865,6 +1865,10 @@ data:
|
||||
|
||||
}
|
||||
|
||||
+ if (ctx->size < 0 || ctx->length < 0) {
|
||||
+ goto invalid;
|
||||
+ }
|
||||
+
|
||||
return rc;
|
||||
|
||||
done:
|
1206
patches/nginx-1.2.7-dtrace.patch
Normal file
1206
patches/nginx-1.2.7-dtrace.patch
Normal file
File diff suppressed because it is too large
Load Diff
15
patches/nginx-1.2.7-location_if_inherits_proxy.patch
Normal file
15
patches/nginx-1.2.7-location_if_inherits_proxy.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- nginx-1.2.7/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
|
||||
+++ nginx-1.2.7-patched/src/http/modules/ngx_http_proxy_module.c 2012-06-24 12:48:57.289834450 +0800
|
||||
@@ -3023,8 +3023,10 @@
|
||||
|
||||
if (conf->upstream.upstream || conf->proxy_lengths) {
|
||||
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
||||
- if (clcf->handler == NULL && clcf->lmt_excpt) {
|
||||
- clcf->handler = ngx_http_proxy_handler;
|
||||
+ if (clcf->handler == NULL) {
|
||||
+ if (clcf->lmt_excpt) {
|
||||
+ clcf->handler = ngx_http_proxy_handler;
|
||||
+ }
|
||||
conf->location = prev->location;
|
||||
}
|
||||
}
|
115
patches/nginx-1.2.7-log_escape_non_ascii.patch
Normal file
115
patches/nginx-1.2.7-log_escape_non_ascii.patch
Normal file
@ -0,0 +1,115 @@
|
||||
--- nginx-1.2.7/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
|
||||
+++ nginx-1.2.7-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
|
||||
@@ -61,6 +61,8 @@
|
||||
time_t open_file_cache_valid;
|
||||
ngx_uint_t open_file_cache_min_uses;
|
||||
|
||||
+ ngx_flag_t escape_non_ascii;
|
||||
+
|
||||
ngx_uint_t off; /* unsigned off:1 */
|
||||
} ngx_http_log_loc_conf_t;
|
||||
|
||||
@@ -104,7 +106,8 @@
|
||||
uintptr_t data);
|
||||
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
|
||||
ngx_http_log_op_t *op);
|
||||
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
|
||||
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
|
||||
+ u_char *src, size_t size);
|
||||
|
||||
|
||||
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
|
||||
@@ -146,6 +149,13 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("log_escape_non_ascii"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
||||
+ ngx_conf_set_flag_slot,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
|
||||
+ NULL },
|
||||
+
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
@@ -637,6 +647,7 @@
|
||||
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
|
||||
{
|
||||
uintptr_t len;
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, data);
|
||||
@@ -645,7 +656,9 @@
|
||||
return 1;
|
||||
}
|
||||
|
||||
- len = ngx_http_log_escape(NULL, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+
|
||||
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
|
||||
|
||||
value->escape = len ? 1 : 0;
|
||||
|
||||
@@ -656,6 +669,7 @@
|
||||
static u_char *
|
||||
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
|
||||
{
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, op->data);
|
||||
@@ -669,16 +683,18 @@
|
||||
return ngx_cpymem(buf, value->data, value->len);
|
||||
|
||||
} else {
|
||||
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uintptr_t
|
||||
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
|
||||
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
|
||||
+ size_t size)
|
||||
{
|
||||
- ngx_uint_t n;
|
||||
- static u_char hex[] = "0123456789ABCDEF";
|
||||
+ ngx_uint_t n;
|
||||
+ static u_char hex[] = "0123456789ABCDEF";
|
||||
|
||||
static uint32_t escape[] = {
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
@@ -698,6 +714,12 @@
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
};
|
||||
|
||||
+ if (lcf->escape_non_ascii) {
|
||||
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
|
||||
+
|
||||
+ } else {
|
||||
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
|
||||
+ }
|
||||
|
||||
if (dst == NULL) {
|
||||
|
||||
@@ -781,6 +803,7 @@
|
||||
}
|
||||
|
||||
conf->open_file_cache = NGX_CONF_UNSET_PTR;
|
||||
+ conf->escape_non_ascii = NGX_CONF_UNSET;
|
||||
|
||||
return conf;
|
||||
}
|
||||
@@ -796,6 +819,8 @@
|
||||
ngx_http_log_fmt_t *fmt;
|
||||
ngx_http_log_main_conf_t *lmcf;
|
||||
|
||||
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
|
||||
+
|
||||
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
|
||||
|
||||
conf->open_file_cache = prev->open_file_cache;
|
24
patches/nginx-1.2.7-no_Werror.patch
Normal file
24
patches/nginx-1.2.7-no_Werror.patch
Normal file
@ -0,0 +1,24 @@
|
||||
diff -ur nginx-1.2.7/auto/cc/gcc nginx-1.2.7-patched/auto/cc/gcc
|
||||
--- nginx-1.2.7/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
|
||||
+++ nginx-1.2.7-patched/auto/cc/gcc 2011-06-27 19:53:13.837741087 +0800
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
||||
diff -ur nginx-1.2.7/auto/cc/icc nginx-1.2.7-patched/auto/cc/icc
|
||||
--- nginx-1.2.7/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
|
||||
+++ nginx-1.2.7-patched/auto/cc/icc 2011-06-27 19:53:19.508916811 +0800
|
||||
@@ -139,7 +139,7 @@
|
||||
esac
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
90
patches/nginx-1.2.7-no_error_pages.patch
Normal file
90
patches/nginx-1.2.7-no_error_pages.patch
Normal file
@ -0,0 +1,90 @@
|
||||
--- nginx-1.2.7/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
|
||||
+++ nginx-1.2.7-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
|
||||
@@ -57,6 +57,8 @@
|
||||
void *conf);
|
||||
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
+ void *conf);
|
||||
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
@@ -614,6 +616,14 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("no_error_pages"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|
||||
+ |NGX_CONF_NOARGS,
|
||||
+ ngx_http_core_no_error_pages,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ 0,
|
||||
+ NULL },
|
||||
+
|
||||
{ ngx_string("try_files"),
|
||||
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
|
||||
ngx_http_core_try_files,
|
||||
@@ -3052,7 +3062,6 @@
|
||||
* clcf->types = NULL;
|
||||
* clcf->default_type = { 0, NULL };
|
||||
* clcf->error_log = NULL;
|
||||
- * clcf->error_pages = NULL;
|
||||
* clcf->try_files = NULL;
|
||||
* clcf->client_body_path = NULL;
|
||||
* clcf->regex = NULL;
|
||||
@@ -3062,6 +3071,7 @@
|
||||
* clcf->gzip_proxied = 0;
|
||||
*/
|
||||
|
||||
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
|
||||
clcf->client_max_body_size = NGX_CONF_UNSET;
|
||||
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
|
||||
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
|
||||
@@ -3250,9 +3260,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (conf->error_pages == NULL && prev->error_pages) {
|
||||
- conf->error_pages = prev->error_pages;
|
||||
- }
|
||||
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
|
||||
|
||||
ngx_conf_merge_str_value(conf->default_type,
|
||||
prev->default_type, "text/plain");
|
||||
@@ -3988,6 +3996,10 @@
|
||||
ngx_http_compile_complex_value_t ccv;
|
||||
|
||||
if (clcf->error_pages == NULL) {
|
||||
+ return "conflicts with \"no_error_pages\"";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
|
||||
clcf->error_pages = ngx_array_create(cf->pool, 4,
|
||||
sizeof(ngx_http_err_page_t));
|
||||
if (clcf->error_pages == NULL) {
|
||||
@@ -4095,6 +4107,25 @@
|
||||
|
||||
|
||||
static char *
|
||||
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
+{
|
||||
+ ngx_http_core_loc_conf_t *clcf = conf;
|
||||
+
|
||||
+ if (clcf->error_pages == NULL) {
|
||||
+ return "is duplicate";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
|
||||
+ return "conflicts with \"error_page\"";
|
||||
+ }
|
||||
+
|
||||
+ clcf->error_pages = NULL;
|
||||
+
|
||||
+ return NGX_CONF_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static char *
|
||||
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
ngx_http_core_loc_conf_t *clcf = conf;
|
609
patches/nginx-1.2.7-no_pool.patch
Normal file
609
patches/nginx-1.2.7-no_pool.patch
Normal file
@ -0,0 +1,609 @@
|
||||
diff -ur nginx-1.2.7/src/core/nginx.h nginx-1.2.7-patched/src/core/nginx.h
|
||||
--- nginx-1.2.7/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
|
||||
+++ nginx-1.2.7-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
#define nginx_version 1002007
|
||||
#define NGINX_VERSION "1.2.7"
|
||||
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
diff -urx '*~' -x '*.swp' nginx-1.2.7/src/core/ngx_array.c nginx-1.2.7-patched/src/core/ngx_array.c
|
||||
--- nginx-1.2.7/src/core/ngx_array.c 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.2.7-patched/src/core/ngx_array.c 2012-06-20 23:10:36.870722387 +0800
|
||||
@@ -28,6 +28,7 @@
|
||||
a->size = size;
|
||||
a->nalloc = n;
|
||||
a->pool = p;
|
||||
+ a->old_elts = NULL;
|
||||
|
||||
return a;
|
||||
}
|
||||
@@ -36,26 +37,30 @@
|
||||
void
|
||||
ngx_array_destroy(ngx_array_t *a)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
|
||||
- p->d.last -= a->size * a->nalloc;
|
||||
+ if (a->elts) {
|
||||
+ ngx_pfree(p, a->elts);
|
||||
}
|
||||
|
||||
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
|
||||
- p->d.last = (u_char *) a;
|
||||
+ for (link = a->old_elts; link; link = link->next) {
|
||||
+ ngx_pfree(p, link->elts);
|
||||
}
|
||||
+
|
||||
+ ngx_pfree(p, a);
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
ngx_array_push(ngx_array_t *a)
|
||||
{
|
||||
- void *elt, *new;
|
||||
- size_t size;
|
||||
- ngx_pool_t *p;
|
||||
+ void *elt, *new;
|
||||
+ size_t size;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts == a->nalloc) {
|
||||
|
||||
@@ -65,29 +70,27 @@
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + size == p->d.last
|
||||
- && p->d.last + a->size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += a->size;
|
||||
- a->nalloc++;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- new = ngx_palloc(p, 2 * size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, size);
|
||||
- a->elts = new;
|
||||
- a->nalloc *= 2;
|
||||
+ /* allocate a new array */
|
||||
+
|
||||
+ new = ngx_palloc(p, 2 * size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc *= 2;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
@@ -101,11 +104,10 @@
|
||||
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
|
||||
{
|
||||
void *elt, *new;
|
||||
- size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *p;
|
||||
|
||||
- size = n * a->size;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts + n > a->nalloc) {
|
||||
|
||||
@@ -113,31 +115,27 @@
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
|
||||
- && p->d.last + size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += size;
|
||||
- a->nalloc += n;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
-
|
||||
- new = ngx_palloc(p, nalloc * a->size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
- a->elts = new;
|
||||
- a->nalloc = nalloc;
|
||||
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
+
|
||||
+ new = ngx_palloc(p, nalloc * a->size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc = nalloc;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
diff -urx '*~' -x '*.swp' nginx-1.2.7/src/core/ngx_array.h nginx-1.2.7-patched/src/core/ngx_array.h
|
||||
--- nginx-1.2.7/src/core/ngx_array.h 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.2.7-patched/src/core/ngx_array.h 2012-06-20 23:25:38.800624960 +0800
|
||||
@@ -13,12 +13,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
+typedef struct ngx_array_link_s ngx_array_link_t;
|
||||
+
|
||||
+
|
||||
+struct ngx_array_link_s {
|
||||
+ void *elts;
|
||||
+ ngx_array_link_t *next;
|
||||
+};
|
||||
+
|
||||
+
|
||||
struct ngx_array_s {
|
||||
void *elts;
|
||||
ngx_uint_t nelts;
|
||||
size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *pool;
|
||||
+
|
||||
+ ngx_array_link_t *old_elts;
|
||||
};
|
||||
|
||||
|
||||
@@ -40,6 +51,7 @@
|
||||
array->size = size;
|
||||
array->nalloc = n;
|
||||
array->pool = pool;
|
||||
+ array->old_elts = NULL;
|
||||
|
||||
array->elts = ngx_palloc(pool, n * size);
|
||||
if (array->elts == NULL) {
|
||||
diff -urx '*~' -x '*.swp' nginx-1.2.7/src/core/ngx_palloc.c nginx-1.2.7-patched/src/core/ngx_palloc.c
|
||||
--- nginx-1.2.7/src/core/ngx_palloc.c 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.2.7-patched/src/core/ngx_palloc.c 2012-06-20 22:56:30.148073066 +0800
|
||||
@@ -9,32 +9,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
|
||||
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
|
||||
-
|
||||
-
|
||||
ngx_pool_t *
|
||||
ngx_create_pool(size_t size, ngx_log_t *log)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
|
||||
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
|
||||
+ size = sizeof(ngx_pool_t);
|
||||
+ p = ngx_alloc(size, log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- p->d.end = (u_char *) p + size;
|
||||
- p->d.next = NULL;
|
||||
- p->d.failed = 0;
|
||||
+ ngx_memzero(p, size);
|
||||
|
||||
size = size - sizeof(ngx_pool_t);
|
||||
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
|
||||
|
||||
p->current = p;
|
||||
- p->chain = NULL;
|
||||
- p->large = NULL;
|
||||
- p->cleanup = NULL;
|
||||
p->log = log;
|
||||
|
||||
return p;
|
||||
@@ -44,8 +35,7 @@
|
||||
void
|
||||
ngx_destroy_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- ngx_pool_t *p, *n;
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
ngx_pool_cleanup_t *c;
|
||||
|
||||
for (c = pool->cleanup; c; c = c->next) {
|
||||
@@ -56,13 +46,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
-
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
|
||||
-
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
+ if (pool->d == NULL) {
|
||||
+ ngx_free(pool);
|
||||
+ return;
|
||||
}
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
@@ -72,9 +58,9 @@
|
||||
* so we cannot use this log while free()ing the pool
|
||||
*/
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
|
||||
+ "free: %p, unused: %d", d, 0);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
@@ -83,172 +69,82 @@
|
||||
|
||||
#endif
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
- ngx_free(p);
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
-}
|
||||
|
||||
+ pool->d = NULL;
|
||||
|
||||
-void
|
||||
-ngx_reset_pool(ngx_pool_t *pool)
|
||||
-{
|
||||
- ngx_pool_t *p;
|
||||
- ngx_pool_large_t *l;
|
||||
-
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- pool->large = NULL;
|
||||
-
|
||||
- for (p = pool; p; p = p->d.next) {
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- }
|
||||
+ ngx_free(pool);
|
||||
}
|
||||
|
||||
|
||||
-void *
|
||||
-ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
+void
|
||||
+ngx_reset_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
+ ngx_pool_data_t *saved = NULL;
|
||||
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
-
|
||||
- return m;
|
||||
+ if (pool->d) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ if (d->alloc == pool->log) {
|
||||
+ saved = d;
|
||||
+ continue;
|
||||
}
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
- }
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
-}
|
||||
-
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
-void *
|
||||
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
-{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
-
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = p->d.last;
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
-
|
||||
- return m;
|
||||
+ if (n == NULL) {
|
||||
+ break;
|
||||
}
|
||||
+ }
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
+ pool->d = saved;
|
||||
}
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_malloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- u_char *m;
|
||||
- size_t psize;
|
||||
- ngx_pool_t *p, *new, *current;
|
||||
+ ngx_pool_data_t *d;
|
||||
+ void *p;
|
||||
|
||||
- psize = (size_t) (pool->d.end - (u_char *) pool);
|
||||
-
|
||||
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
|
||||
- if (m == NULL) {
|
||||
+ p = ngx_alloc(size, pool->log);
|
||||
+ if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- new = (ngx_pool_t *) m;
|
||||
-
|
||||
- new->d.end = m + psize;
|
||||
- new->d.next = NULL;
|
||||
- new->d.failed = 0;
|
||||
-
|
||||
- m += sizeof(ngx_pool_data_t);
|
||||
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
|
||||
- new->d.last = m + size;
|
||||
-
|
||||
- current = pool->current;
|
||||
-
|
||||
- for (p = current; p->d.next; p = p->d.next) {
|
||||
- if (p->d.failed++ > 4) {
|
||||
- current = p->d.next;
|
||||
- }
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
+ ngx_free(p);
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
- p->d.next = new;
|
||||
-
|
||||
- pool->current = current ? current : new;
|
||||
-
|
||||
- return m;
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
+ return p;
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- void *p;
|
||||
- ngx_uint_t n;
|
||||
- ngx_pool_large_t *large;
|
||||
-
|
||||
- p = ngx_alloc(size, pool->log);
|
||||
- if (p == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- n = 0;
|
||||
-
|
||||
- for (large = pool->large; large; large = large->next) {
|
||||
- if (large->alloc == NULL) {
|
||||
- large->alloc = p;
|
||||
- return p;
|
||||
- }
|
||||
-
|
||||
- if (n++ > 3) {
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
- ngx_free(p);
|
||||
- return NULL;
|
||||
- }
|
||||
+ return ngx_malloc(pool, size);
|
||||
+}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
|
||||
- return p;
|
||||
+void *
|
||||
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
+{
|
||||
+ return ngx_malloc(pool, size);
|
||||
}
|
||||
|
||||
|
||||
@@ -256,38 +152,48 @@
|
||||
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
|
||||
{
|
||||
void *p;
|
||||
- ngx_pool_large_t *large;
|
||||
+ ngx_pool_data_t *d;
|
||||
|
||||
p = ngx_memalign(alignment, size, pool->log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
ngx_free(p);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
-
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
-ngx_pfree(ngx_pool_t *pool, void *p)
|
||||
+ngx_pfree(ngx_pool_t *pool, void *data)
|
||||
{
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *p, *d;
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (p == l->alloc) {
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p", l->alloc);
|
||||
- ngx_free(l->alloc);
|
||||
- l->alloc = NULL;
|
||||
+ p = NULL;
|
||||
+ for (d = pool->d; d; p = d, d = d->next) {
|
||||
+ if (data == d->alloc) {
|
||||
+
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
|
||||
+
|
||||
+ ngx_free(d->alloc);
|
||||
+ d->alloc = NULL;
|
||||
+
|
||||
+ if (p) {
|
||||
+ p->next = d->next;
|
||||
+
|
||||
+ } else {
|
||||
+ pool->d = d->next;
|
||||
+ }
|
||||
+
|
||||
+ ngx_free(d);
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
diff -urx '*~' -x '*.swp' nginx-1.2.7/src/core/ngx_palloc.h nginx-1.2.7-patched/src/core/ngx_palloc.h
|
||||
--- nginx-1.2.7/src/core/ngx_palloc.h 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.2.7-patched/src/core/ngx_palloc.h 2012-06-21 10:35:47.463405863 +0800
|
||||
@@ -38,28 +38,21 @@
|
||||
};
|
||||
|
||||
|
||||
-typedef struct ngx_pool_large_s ngx_pool_large_t;
|
||||
-
|
||||
-struct ngx_pool_large_s {
|
||||
- ngx_pool_large_t *next;
|
||||
- void *alloc;
|
||||
-};
|
||||
+typedef struct ngx_pool_data_s ngx_pool_large_t;
|
||||
+typedef struct ngx_pool_data_s ngx_pool_data_t;
|
||||
|
||||
|
||||
-typedef struct {
|
||||
- u_char *last;
|
||||
- u_char *end;
|
||||
- ngx_pool_t *next;
|
||||
- ngx_uint_t failed;
|
||||
-} ngx_pool_data_t;
|
||||
+struct ngx_pool_data_s {
|
||||
+ ngx_pool_data_t *next;
|
||||
+ void *alloc;
|
||||
+};
|
||||
|
||||
|
||||
struct ngx_pool_s {
|
||||
- ngx_pool_data_t d;
|
||||
+ ngx_pool_data_t *d;
|
||||
size_t max;
|
||||
ngx_pool_t *current;
|
||||
ngx_chain_t *chain;
|
||||
- ngx_pool_large_t *large;
|
||||
ngx_pool_cleanup_t *cleanup;
|
||||
ngx_log_t *log;
|
||||
};
|
46
patches/nginx-1.2.7-run_posted_requests_in_resolver.patch
Normal file
46
patches/nginx-1.2.7-run_posted_requests_in_resolver.patch
Normal file
@ -0,0 +1,46 @@
|
||||
diff -ruNp nginx-1.2.7/src/http/ngx_http_upstream.c nginx-1.2.7_zls/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.2.7/src/http/ngx_http_upstream.c 2013-02-18 23:08:46.000000000 +0800
|
||||
+++ nginx-1.2.7_zls/src/http/ngx_http_upstream.c 2013-03-13 00:01:01.490582380 +0800
|
||||
@@ -878,11 +878,13 @@ ngx_http_upstream_cache_send(ngx_http_re
|
||||
static void
|
||||
ngx_http_upstream_resolve_handler(ngx_resolver_ctx_t *ctx)
|
||||
{
|
||||
+ ngx_connection_t *c;
|
||||
ngx_http_request_t *r;
|
||||
ngx_http_upstream_t *u;
|
||||
ngx_http_upstream_resolved_t *ur;
|
||||
|
||||
r = ctx->data;
|
||||
+ c = r->connection;
|
||||
|
||||
u = r->upstream;
|
||||
ur = u->resolved;
|
||||
@@ -894,7 +896,8 @@ ngx_http_upstream_resolve_handler(ngx_re
|
||||
ngx_resolver_strerror(ctx->state));
|
||||
|
||||
ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
- return;
|
||||
+
|
||||
+ goto posted_requests;
|
||||
}
|
||||
|
||||
ur->naddrs = ctx->naddrs;
|
||||
@@ -919,13 +922,17 @@ ngx_http_upstream_resolve_handler(ngx_re
|
||||
if (ngx_http_upstream_create_round_robin_peer(r, ur) != NGX_OK) {
|
||||
ngx_http_upstream_finalize_request(r, u,
|
||||
NGX_HTTP_INTERNAL_SERVER_ERROR);
|
||||
- return;
|
||||
+ goto posted_requests;
|
||||
}
|
||||
|
||||
ngx_resolve_name_done(ctx);
|
||||
ur->ctx = NULL;
|
||||
|
||||
ngx_http_upstream_connect(r, u);
|
||||
+
|
||||
+posted_requests:
|
||||
+
|
||||
+ ngx_http_run_posted_requests(c);
|
||||
}
|
||||
|
||||
|
26
patches/nginx-1.2.7-server_header.patch
Normal file
26
patches/nginx-1.2.7-server_header.patch
Normal file
@ -0,0 +1,26 @@
|
||||
diff -ur lz-nginx-1.2.7/nginx-1.2.7/src/core/nginx.h lz-nginx-1.2.7-patched/nginx-1.2.7/src/core/nginx.h
|
||||
--- lz-nginx-1.2.7/nginx-1.2.7/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
|
||||
+++ lz-nginx-1.2.7-patched/nginx-1.2.7/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#define nginx_version 1002007
|
||||
#define NGINX_VERSION "1.2.7"
|
||||
-#define NGINX_VER "nginx/" NGINX_VERSION
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#define NGX_OLDPID_EXT ".oldbin"
|
||||
Only in lz-nginx-1.2.7-patched/nginx-1.2.7/src/core: nginx.h.orig
|
||||
Only in lz-nginx-1.2.7-patched/nginx-1.2.7/src/core: nginx.h.rej
|
||||
diff -ur lz-nginx-1.2.7/nginx-1.2.7/src/http/ngx_http_header_filter_module.c lz-nginx-1.2.7-patched/nginx-1.2.7/src/http/ngx_http_header_filter_module.c
|
||||
--- lz-nginx-1.2.7/nginx-1.2.7/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
|
||||
+++ lz-nginx-1.2.7-patched/nginx-1.2.7/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
|
||||
@@ -45,7 +45,7 @@
|
||||
};
|
||||
|
||||
|
||||
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
|
||||
+static char ngx_http_server_string[] = "Server: ngx_openresty" CRLF;
|
||||
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
|
||||
|
||||
|
11
patches/nginx-1.2.7-slab_alloc_no_memory_as_info.patch
Normal file
11
patches/nginx-1.2.7-slab_alloc_no_memory_as_info.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.2.7/src/core/ngx_slab.c 2012-09-24 11:34:04.000000000 -0700
|
||||
+++ nginx-1.2.7-patched/src/core/ngx_slab.c 2012-12-05 20:47:07.296694952 -0800
|
||||
@@ -657,7 +657,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *po
|
||||
}
|
||||
}
|
||||
|
||||
- ngx_slab_error(pool, NGX_LOG_CRIT, "ngx_slab_alloc() failed: no memory");
|
||||
+ ngx_slab_error(pool, NGX_LOG_INFO, "ngx_slab_alloc() failed: no memory");
|
||||
|
||||
return NULL;
|
||||
}
|
40
patches/nginx-1.2.7-upstream_pipelining.patch
Normal file
40
patches/nginx-1.2.7-upstream_pipelining.patch
Normal file
@ -0,0 +1,40 @@
|
||||
diff -rudp nginx-1.2.7/src/http/ngx_http_upstream.c nginx-1.2.7-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.2.7/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
|
||||
+++ nginx-1.2.7-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
|
||||
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
|
||||
}
|
||||
|
||||
u->request_sent = 0;
|
||||
+ u->request_all_sent = 0;
|
||||
|
||||
if (rc == NGX_AGAIN) {
|
||||
ngx_add_timer(c->write, u->conf->connect_timeout);
|
||||
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
|
||||
|
||||
/* rc == NGX_OK */
|
||||
|
||||
+ u->request_all_sent = 1;
|
||||
+
|
||||
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
|
||||
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
|
||||
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
|
||||
|
||||
#endif
|
||||
|
||||
- if (u->header_sent) {
|
||||
+ if (u->request_all_sent) {
|
||||
u->write_event_handler = ngx_http_upstream_dummy_handler;
|
||||
|
||||
(void) ngx_handle_write_event(c->write, 0);
|
||||
diff -rudp nginx-1.2.7/src/http/ngx_http_upstream.h nginx-1.2.7-patched/src/http/ngx_http_upstream.h
|
||||
--- nginx-1.2.7/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
|
||||
+++ nginx-1.2.7-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
|
||||
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
|
||||
unsigned keepalive:1;
|
||||
|
||||
unsigned request_sent:1;
|
||||
+ unsigned request_all_sent:1;
|
||||
unsigned header_sent:1;
|
||||
};
|
||||
|
149
patches/nginx-1.2.7-upstream_truncation.patch
Normal file
149
patches/nginx-1.2.7-upstream_truncation.patch
Normal file
@ -0,0 +1,149 @@
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.2.7/src/http/modules/ngx_http_scgi_module.c nginx-1.2.7-patched/src/http/modules/ngx_http_scgi_module.c
|
||||
--- nginx-1.2.7/src/http/modules/ngx_http_scgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.2.7-patched/src/http/modules/ngx_http_scgi_module.c 2013-04-07 12:09:55.900492634 -0700
|
||||
@@ -39,6 +39,7 @@ static ngx_int_t ngx_http_scgi_process_s
|
||||
static ngx_int_t ngx_http_scgi_process_header(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_finalize_request(ngx_http_request_t *r, ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_scgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_scgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_scgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -446,6 +447,8 @@ ngx_http_scgi_handler(ngx_http_request_t
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_scgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1046,6 +1049,17 @@ ngx_http_scgi_finalize_request(ngx_http_
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_scgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_scgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.2.7/src/http/modules/ngx_http_uwsgi_module.c nginx-1.2.7-patched/src/http/modules/ngx_http_uwsgi_module.c
|
||||
--- nginx-1.2.7/src/http/modules/ngx_http_uwsgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.2.7-patched/src/http/modules/ngx_http_uwsgi_module.c 2013-04-07 11:58:24.546915778 -0700
|
||||
@@ -46,6 +46,7 @@ static ngx_int_t ngx_http_uwsgi_process_
|
||||
static void ngx_http_uwsgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_uwsgi_finalize_request(ngx_http_request_t *r,
|
||||
ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_uwsgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_uwsgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -479,6 +480,8 @@ ngx_http_uwsgi_handler(ngx_http_request_
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_uwsgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1086,6 +1089,17 @@ ngx_http_uwsgi_finalize_request(ngx_http
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_uwsgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.2.7/src/http/ngx_http_upstream.c nginx-1.2.7-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.2.7/src/http/ngx_http_upstream.c 2013-02-11 06:39:49.000000000 -0800
|
||||
+++ nginx-1.2.7-patched/src/http/ngx_http_upstream.c 2013-04-08 16:37:48.326752696 -0700
|
||||
@@ -2399,7 +2399,7 @@ ngx_http_upstream_process_non_buffered_u
|
||||
|
||||
if (c->read->timedout) {
|
||||
ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
|
||||
- ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_GATEWAY_TIME_OUT);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2446,13 +2446,20 @@ ngx_http_upstream_process_non_buffered_r
|
||||
if (u->busy_bufs == NULL) {
|
||||
|
||||
if (u->length == 0
|
||||
- || upstream->read->eof
|
||||
- || upstream->read->error)
|
||||
+ || (upstream->read->eof
|
||||
+ && u->length == -1
|
||||
+ && u->pipe
|
||||
+ && u->pipe->length <= 0))
|
||||
{
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (upstream->read->eof || upstream->read->error) {
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
b->pos = b->start;
|
||||
b->last = b->start;
|
||||
}
|
||||
@@ -2720,7 +2727,9 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
|
||||
#endif
|
||||
|
||||
- if (p->upstream_done || p->upstream_eof || p->upstream_error) {
|
||||
+ if (p->upstream_done
|
||||
+ || (p->upstream_eof && u->length == -1 && p->length <= 0))
|
||||
+ {
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"http upstream exit: %p", p->out);
|
||||
#if 0
|
||||
@@ -2729,6 +2738,14 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ if (p->upstream_eof || p->upstream_error) {
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
+ "http upstream exit: %p", p->out);
|
||||
+
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (p->downstream_error) {
|
||||
@@ -3087,9 +3104,9 @@ ngx_http_upstream_finalize_request(ngx_h
|
||||
|
||||
if (u->header_sent
|
||||
&& rc != NGX_HTTP_REQUEST_TIME_OUT
|
||||
- && (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
|
||||
+ && rc >= NGX_HTTP_SPECIAL_RESPONSE)
|
||||
{
|
||||
- rc = 0;
|
||||
+ rc = NGX_ERROR;
|
||||
}
|
||||
|
||||
if (rc == NGX_DECLINED) {
|
42
patches/nginx-1.2.8-channel-uninit-params.patch
Normal file
42
patches/nginx-1.2.8-channel-uninit-params.patch
Normal file
@ -0,0 +1,42 @@
|
||||
diff -urp nginx-1.2.8/src/os/unix/ngx_channel.c nginx-1.2.8-patched/src/os/unix/ngx_channel.c
|
||||
--- nginx-1.2.8/src/os/unix/ngx_channel.c 2012-01-18 07:07:43.000000000 -0800
|
||||
+++ nginx-1.2.8-patched/src/os/unix/ngx_channel.c 2012-09-17 11:33:09.215394217 -0700
|
||||
@@ -31,6 +31,8 @@ ngx_write_channel(ngx_socket_t s, ngx_ch
|
||||
msg.msg_controllen = 0;
|
||||
|
||||
} else {
|
||||
+ ngx_memzero(&cmsg, sizeof(cmsg));
|
||||
+
|
||||
msg.msg_control = (caddr_t) &cmsg;
|
||||
msg.msg_controllen = sizeof(cmsg);
|
||||
|
||||
diff -urp nginx-1.2.8/src/os/unix/ngx_process_cycle.c nginx-1.2.8-patched/src/os/unix/ngx_process_cycle.c
|
||||
--- nginx-1.2.8/src/os/unix/ngx_process_cycle.c 2012-07-02 09:23:14.000000000 -0700
|
||||
+++ nginx-1.2.8-patched/src/os/unix/ngx_process_cycle.c 2012-09-17 11:33:09.214394215 -0700
|
||||
@@ -356,6 +356,8 @@ ngx_start_worker_processes(ngx_cycle_t *
|
||||
|
||||
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start worker processes");
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_OPEN_CHANNEL;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
@@ -463,6 +465,8 @@ ngx_signal_worker_processes(ngx_cycle_t
|
||||
ngx_err_t err;
|
||||
ngx_channel_t ch;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
#if (NGX_BROKEN_SCM_RIGHTS)
|
||||
|
||||
ch.command = 0;
|
||||
@@ -564,6 +568,8 @@ ngx_reap_children(ngx_cycle_t *cycle)
|
||||
ngx_channel_t ch;
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_CLOSE_CHANNEL;
|
||||
ch.fd = -1;
|
||||
|
13
patches/nginx-1.2.8-cve-2013-2070.patch
Normal file
13
patches/nginx-1.2.8-cve-2013-2070.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- src/http/modules/ngx_http_proxy_module.c
|
||||
+++ src/http/modules/ngx_http_proxy_module.c
|
||||
@@ -1865,6 +1865,10 @@ data:
|
||||
|
||||
}
|
||||
|
||||
+ if (ctx->size < 0 || ctx->length < 0) {
|
||||
+ goto invalid;
|
||||
+ }
|
||||
+
|
||||
return rc;
|
||||
|
||||
done:
|
1215
patches/nginx-1.2.8-dtrace.patch
Normal file
1215
patches/nginx-1.2.8-dtrace.patch
Normal file
File diff suppressed because it is too large
Load Diff
12
patches/nginx-1.2.8-invalid_referer_hash.patch
Normal file
12
patches/nginx-1.2.8-invalid_referer_hash.patch
Normal file
@ -0,0 +1,12 @@
|
||||
--- nginx-1.2.8/src/http/modules/ngx_http_referer_module.c 2013-05-06 03:27:10.000000000 -0700
|
||||
+++ nginx-1.2.8-patched/src/http/modules/ngx_http_referer_module.c 2013-05-21 16:04:49.340286168 -0700
|
||||
@@ -396,8 +396,7 @@ ngx_http_valid_referers(ngx_conf_t *cf,
|
||||
|
||||
ngx_str_set(&name, "invalid_referer");
|
||||
|
||||
- var = ngx_http_add_variable(cf, &name,
|
||||
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOHASH);
|
||||
+ var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE);
|
||||
if (var == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
15
patches/nginx-1.2.8-location_if_inherits_proxy.patch
Normal file
15
patches/nginx-1.2.8-location_if_inherits_proxy.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- nginx-1.2.8/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
|
||||
+++ nginx-1.2.8-patched/src/http/modules/ngx_http_proxy_module.c 2012-06-24 12:48:57.289834450 +0800
|
||||
@@ -3023,8 +3023,10 @@
|
||||
|
||||
if (conf->upstream.upstream || conf->proxy_lengths) {
|
||||
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
||||
- if (clcf->handler == NULL && clcf->lmt_excpt) {
|
||||
- clcf->handler = ngx_http_proxy_handler;
|
||||
+ if (clcf->handler == NULL) {
|
||||
+ if (clcf->lmt_excpt) {
|
||||
+ clcf->handler = ngx_http_proxy_handler;
|
||||
+ }
|
||||
conf->location = prev->location;
|
||||
}
|
||||
}
|
115
patches/nginx-1.2.8-log_escape_non_ascii.patch
Normal file
115
patches/nginx-1.2.8-log_escape_non_ascii.patch
Normal file
@ -0,0 +1,115 @@
|
||||
--- nginx-1.2.8/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
|
||||
+++ nginx-1.2.8-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
|
||||
@@ -61,6 +61,8 @@
|
||||
time_t open_file_cache_valid;
|
||||
ngx_uint_t open_file_cache_min_uses;
|
||||
|
||||
+ ngx_flag_t escape_non_ascii;
|
||||
+
|
||||
ngx_uint_t off; /* unsigned off:1 */
|
||||
} ngx_http_log_loc_conf_t;
|
||||
|
||||
@@ -104,7 +106,8 @@
|
||||
uintptr_t data);
|
||||
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
|
||||
ngx_http_log_op_t *op);
|
||||
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
|
||||
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
|
||||
+ u_char *src, size_t size);
|
||||
|
||||
|
||||
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
|
||||
@@ -146,6 +149,13 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("log_escape_non_ascii"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
||||
+ ngx_conf_set_flag_slot,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
|
||||
+ NULL },
|
||||
+
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
@@ -637,6 +647,7 @@
|
||||
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
|
||||
{
|
||||
uintptr_t len;
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, data);
|
||||
@@ -645,7 +656,9 @@
|
||||
return 1;
|
||||
}
|
||||
|
||||
- len = ngx_http_log_escape(NULL, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+
|
||||
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
|
||||
|
||||
value->escape = len ? 1 : 0;
|
||||
|
||||
@@ -656,6 +669,7 @@
|
||||
static u_char *
|
||||
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
|
||||
{
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, op->data);
|
||||
@@ -669,16 +683,18 @@
|
||||
return ngx_cpymem(buf, value->data, value->len);
|
||||
|
||||
} else {
|
||||
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uintptr_t
|
||||
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
|
||||
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
|
||||
+ size_t size)
|
||||
{
|
||||
- ngx_uint_t n;
|
||||
- static u_char hex[] = "0123456789ABCDEF";
|
||||
+ ngx_uint_t n;
|
||||
+ static u_char hex[] = "0123456789ABCDEF";
|
||||
|
||||
static uint32_t escape[] = {
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
@@ -698,6 +714,12 @@
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
};
|
||||
|
||||
+ if (lcf->escape_non_ascii) {
|
||||
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
|
||||
+
|
||||
+ } else {
|
||||
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
|
||||
+ }
|
||||
|
||||
if (dst == NULL) {
|
||||
|
||||
@@ -781,6 +803,7 @@
|
||||
}
|
||||
|
||||
conf->open_file_cache = NGX_CONF_UNSET_PTR;
|
||||
+ conf->escape_non_ascii = NGX_CONF_UNSET;
|
||||
|
||||
return conf;
|
||||
}
|
||||
@@ -796,6 +819,8 @@
|
||||
ngx_http_log_fmt_t *fmt;
|
||||
ngx_http_log_main_conf_t *lmcf;
|
||||
|
||||
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
|
||||
+
|
||||
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
|
||||
|
||||
conf->open_file_cache = prev->open_file_cache;
|
24
patches/nginx-1.2.8-no_Werror.patch
Normal file
24
patches/nginx-1.2.8-no_Werror.patch
Normal file
@ -0,0 +1,24 @@
|
||||
diff -ur nginx-1.2.8/auto/cc/gcc nginx-1.2.8-patched/auto/cc/gcc
|
||||
--- nginx-1.2.8/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
|
||||
+++ nginx-1.2.8-patched/auto/cc/gcc 2011-06-27 19:53:13.837741087 +0800
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
||||
diff -ur nginx-1.2.8/auto/cc/icc nginx-1.2.8-patched/auto/cc/icc
|
||||
--- nginx-1.2.8/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
|
||||
+++ nginx-1.2.8-patched/auto/cc/icc 2011-06-27 19:53:19.508916811 +0800
|
||||
@@ -139,7 +139,7 @@
|
||||
esac
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
90
patches/nginx-1.2.8-no_error_pages.patch
Normal file
90
patches/nginx-1.2.8-no_error_pages.patch
Normal file
@ -0,0 +1,90 @@
|
||||
--- nginx-1.2.8/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
|
||||
+++ nginx-1.2.8-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
|
||||
@@ -57,6 +57,8 @@
|
||||
void *conf);
|
||||
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
+ void *conf);
|
||||
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
@@ -614,6 +616,14 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("no_error_pages"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|
||||
+ |NGX_CONF_NOARGS,
|
||||
+ ngx_http_core_no_error_pages,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ 0,
|
||||
+ NULL },
|
||||
+
|
||||
{ ngx_string("try_files"),
|
||||
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
|
||||
ngx_http_core_try_files,
|
||||
@@ -3052,7 +3062,6 @@
|
||||
* clcf->types = NULL;
|
||||
* clcf->default_type = { 0, NULL };
|
||||
* clcf->error_log = NULL;
|
||||
- * clcf->error_pages = NULL;
|
||||
* clcf->try_files = NULL;
|
||||
* clcf->client_body_path = NULL;
|
||||
* clcf->regex = NULL;
|
||||
@@ -3062,6 +3071,7 @@
|
||||
* clcf->gzip_proxied = 0;
|
||||
*/
|
||||
|
||||
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
|
||||
clcf->client_max_body_size = NGX_CONF_UNSET;
|
||||
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
|
||||
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
|
||||
@@ -3250,9 +3260,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (conf->error_pages == NULL && prev->error_pages) {
|
||||
- conf->error_pages = prev->error_pages;
|
||||
- }
|
||||
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
|
||||
|
||||
ngx_conf_merge_str_value(conf->default_type,
|
||||
prev->default_type, "text/plain");
|
||||
@@ -3988,6 +3996,10 @@
|
||||
ngx_http_compile_complex_value_t ccv;
|
||||
|
||||
if (clcf->error_pages == NULL) {
|
||||
+ return "conflicts with \"no_error_pages\"";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
|
||||
clcf->error_pages = ngx_array_create(cf->pool, 4,
|
||||
sizeof(ngx_http_err_page_t));
|
||||
if (clcf->error_pages == NULL) {
|
||||
@@ -4095,6 +4107,25 @@
|
||||
|
||||
|
||||
static char *
|
||||
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
+{
|
||||
+ ngx_http_core_loc_conf_t *clcf = conf;
|
||||
+
|
||||
+ if (clcf->error_pages == NULL) {
|
||||
+ return "is duplicate";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
|
||||
+ return "conflicts with \"error_page\"";
|
||||
+ }
|
||||
+
|
||||
+ clcf->error_pages = NULL;
|
||||
+
|
||||
+ return NGX_CONF_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static char *
|
||||
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
ngx_http_core_loc_conf_t *clcf = conf;
|
609
patches/nginx-1.2.8-no_pool.patch
Normal file
609
patches/nginx-1.2.8-no_pool.patch
Normal file
@ -0,0 +1,609 @@
|
||||
diff -ur nginx-1.2.8/src/core/nginx.h nginx-1.2.8-patched/src/core/nginx.h
|
||||
--- nginx-1.2.8/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
|
||||
+++ nginx-1.2.8-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
#define nginx_version 1002008
|
||||
#define NGINX_VERSION "1.2.8"
|
||||
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
diff -urx '*~' -x '*.swp' nginx-1.2.8/src/core/ngx_array.c nginx-1.2.8-patched/src/core/ngx_array.c
|
||||
--- nginx-1.2.8/src/core/ngx_array.c 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.2.8-patched/src/core/ngx_array.c 2012-06-20 23:10:36.870722387 +0800
|
||||
@@ -28,6 +28,7 @@
|
||||
a->size = size;
|
||||
a->nalloc = n;
|
||||
a->pool = p;
|
||||
+ a->old_elts = NULL;
|
||||
|
||||
return a;
|
||||
}
|
||||
@@ -36,26 +37,30 @@
|
||||
void
|
||||
ngx_array_destroy(ngx_array_t *a)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
|
||||
- p->d.last -= a->size * a->nalloc;
|
||||
+ if (a->elts) {
|
||||
+ ngx_pfree(p, a->elts);
|
||||
}
|
||||
|
||||
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
|
||||
- p->d.last = (u_char *) a;
|
||||
+ for (link = a->old_elts; link; link = link->next) {
|
||||
+ ngx_pfree(p, link->elts);
|
||||
}
|
||||
+
|
||||
+ ngx_pfree(p, a);
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
ngx_array_push(ngx_array_t *a)
|
||||
{
|
||||
- void *elt, *new;
|
||||
- size_t size;
|
||||
- ngx_pool_t *p;
|
||||
+ void *elt, *new;
|
||||
+ size_t size;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts == a->nalloc) {
|
||||
|
||||
@@ -65,29 +70,27 @@
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + size == p->d.last
|
||||
- && p->d.last + a->size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += a->size;
|
||||
- a->nalloc++;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- new = ngx_palloc(p, 2 * size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, size);
|
||||
- a->elts = new;
|
||||
- a->nalloc *= 2;
|
||||
+ /* allocate a new array */
|
||||
+
|
||||
+ new = ngx_palloc(p, 2 * size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc *= 2;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
@@ -101,11 +104,10 @@
|
||||
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
|
||||
{
|
||||
void *elt, *new;
|
||||
- size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *p;
|
||||
|
||||
- size = n * a->size;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts + n > a->nalloc) {
|
||||
|
||||
@@ -113,31 +115,27 @@
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
|
||||
- && p->d.last + size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += size;
|
||||
- a->nalloc += n;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
-
|
||||
- new = ngx_palloc(p, nalloc * a->size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
- a->elts = new;
|
||||
- a->nalloc = nalloc;
|
||||
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
+
|
||||
+ new = ngx_palloc(p, nalloc * a->size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc = nalloc;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
diff -urx '*~' -x '*.swp' nginx-1.2.8/src/core/ngx_array.h nginx-1.2.8-patched/src/core/ngx_array.h
|
||||
--- nginx-1.2.8/src/core/ngx_array.h 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.2.8-patched/src/core/ngx_array.h 2012-06-20 23:25:38.800624960 +0800
|
||||
@@ -13,12 +13,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
+typedef struct ngx_array_link_s ngx_array_link_t;
|
||||
+
|
||||
+
|
||||
+struct ngx_array_link_s {
|
||||
+ void *elts;
|
||||
+ ngx_array_link_t *next;
|
||||
+};
|
||||
+
|
||||
+
|
||||
struct ngx_array_s {
|
||||
void *elts;
|
||||
ngx_uint_t nelts;
|
||||
size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *pool;
|
||||
+
|
||||
+ ngx_array_link_t *old_elts;
|
||||
};
|
||||
|
||||
|
||||
@@ -40,6 +51,7 @@
|
||||
array->size = size;
|
||||
array->nalloc = n;
|
||||
array->pool = pool;
|
||||
+ array->old_elts = NULL;
|
||||
|
||||
array->elts = ngx_palloc(pool, n * size);
|
||||
if (array->elts == NULL) {
|
||||
diff -urx '*~' -x '*.swp' nginx-1.2.8/src/core/ngx_palloc.c nginx-1.2.8-patched/src/core/ngx_palloc.c
|
||||
--- nginx-1.2.8/src/core/ngx_palloc.c 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.2.8-patched/src/core/ngx_palloc.c 2012-06-20 22:56:30.148073066 +0800
|
||||
@@ -9,32 +9,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
|
||||
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
|
||||
-
|
||||
-
|
||||
ngx_pool_t *
|
||||
ngx_create_pool(size_t size, ngx_log_t *log)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
|
||||
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
|
||||
+ size = sizeof(ngx_pool_t);
|
||||
+ p = ngx_alloc(size, log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- p->d.end = (u_char *) p + size;
|
||||
- p->d.next = NULL;
|
||||
- p->d.failed = 0;
|
||||
+ ngx_memzero(p, size);
|
||||
|
||||
size = size - sizeof(ngx_pool_t);
|
||||
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
|
||||
|
||||
p->current = p;
|
||||
- p->chain = NULL;
|
||||
- p->large = NULL;
|
||||
- p->cleanup = NULL;
|
||||
p->log = log;
|
||||
|
||||
return p;
|
||||
@@ -44,8 +35,7 @@
|
||||
void
|
||||
ngx_destroy_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- ngx_pool_t *p, *n;
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
ngx_pool_cleanup_t *c;
|
||||
|
||||
for (c = pool->cleanup; c; c = c->next) {
|
||||
@@ -56,13 +46,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
-
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
|
||||
-
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
+ if (pool->d == NULL) {
|
||||
+ ngx_free(pool);
|
||||
+ return;
|
||||
}
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
@@ -72,9 +58,9 @@
|
||||
* so we cannot use this log while free()ing the pool
|
||||
*/
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
|
||||
+ "free: %p, unused: %d", d, 0);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
@@ -83,172 +69,82 @@
|
||||
|
||||
#endif
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
- ngx_free(p);
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
-}
|
||||
|
||||
+ pool->d = NULL;
|
||||
|
||||
-void
|
||||
-ngx_reset_pool(ngx_pool_t *pool)
|
||||
-{
|
||||
- ngx_pool_t *p;
|
||||
- ngx_pool_large_t *l;
|
||||
-
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- pool->large = NULL;
|
||||
-
|
||||
- for (p = pool; p; p = p->d.next) {
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- }
|
||||
+ ngx_free(pool);
|
||||
}
|
||||
|
||||
|
||||
-void *
|
||||
-ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
+void
|
||||
+ngx_reset_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
+ ngx_pool_data_t *saved = NULL;
|
||||
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
-
|
||||
- return m;
|
||||
+ if (pool->d) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ if (d->alloc == pool->log) {
|
||||
+ saved = d;
|
||||
+ continue;
|
||||
}
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
- }
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
-}
|
||||
-
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
-void *
|
||||
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
-{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
-
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = p->d.last;
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
-
|
||||
- return m;
|
||||
+ if (n == NULL) {
|
||||
+ break;
|
||||
}
|
||||
+ }
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
+ pool->d = saved;
|
||||
}
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_malloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- u_char *m;
|
||||
- size_t psize;
|
||||
- ngx_pool_t *p, *new, *current;
|
||||
+ ngx_pool_data_t *d;
|
||||
+ void *p;
|
||||
|
||||
- psize = (size_t) (pool->d.end - (u_char *) pool);
|
||||
-
|
||||
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
|
||||
- if (m == NULL) {
|
||||
+ p = ngx_alloc(size, pool->log);
|
||||
+ if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- new = (ngx_pool_t *) m;
|
||||
-
|
||||
- new->d.end = m + psize;
|
||||
- new->d.next = NULL;
|
||||
- new->d.failed = 0;
|
||||
-
|
||||
- m += sizeof(ngx_pool_data_t);
|
||||
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
|
||||
- new->d.last = m + size;
|
||||
-
|
||||
- current = pool->current;
|
||||
-
|
||||
- for (p = current; p->d.next; p = p->d.next) {
|
||||
- if (p->d.failed++ > 4) {
|
||||
- current = p->d.next;
|
||||
- }
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
+ ngx_free(p);
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
- p->d.next = new;
|
||||
-
|
||||
- pool->current = current ? current : new;
|
||||
-
|
||||
- return m;
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
+ return p;
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- void *p;
|
||||
- ngx_uint_t n;
|
||||
- ngx_pool_large_t *large;
|
||||
-
|
||||
- p = ngx_alloc(size, pool->log);
|
||||
- if (p == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- n = 0;
|
||||
-
|
||||
- for (large = pool->large; large; large = large->next) {
|
||||
- if (large->alloc == NULL) {
|
||||
- large->alloc = p;
|
||||
- return p;
|
||||
- }
|
||||
-
|
||||
- if (n++ > 3) {
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
- ngx_free(p);
|
||||
- return NULL;
|
||||
- }
|
||||
+ return ngx_malloc(pool, size);
|
||||
+}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
|
||||
- return p;
|
||||
+void *
|
||||
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
+{
|
||||
+ return ngx_malloc(pool, size);
|
||||
}
|
||||
|
||||
|
||||
@@ -256,38 +152,48 @@
|
||||
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
|
||||
{
|
||||
void *p;
|
||||
- ngx_pool_large_t *large;
|
||||
+ ngx_pool_data_t *d;
|
||||
|
||||
p = ngx_memalign(alignment, size, pool->log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
ngx_free(p);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
-
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
-ngx_pfree(ngx_pool_t *pool, void *p)
|
||||
+ngx_pfree(ngx_pool_t *pool, void *data)
|
||||
{
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *p, *d;
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (p == l->alloc) {
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p", l->alloc);
|
||||
- ngx_free(l->alloc);
|
||||
- l->alloc = NULL;
|
||||
+ p = NULL;
|
||||
+ for (d = pool->d; d; p = d, d = d->next) {
|
||||
+ if (data == d->alloc) {
|
||||
+
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
|
||||
+
|
||||
+ ngx_free(d->alloc);
|
||||
+ d->alloc = NULL;
|
||||
+
|
||||
+ if (p) {
|
||||
+ p->next = d->next;
|
||||
+
|
||||
+ } else {
|
||||
+ pool->d = d->next;
|
||||
+ }
|
||||
+
|
||||
+ ngx_free(d);
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
diff -urx '*~' -x '*.swp' nginx-1.2.8/src/core/ngx_palloc.h nginx-1.2.8-patched/src/core/ngx_palloc.h
|
||||
--- nginx-1.2.8/src/core/ngx_palloc.h 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.2.8-patched/src/core/ngx_palloc.h 2012-06-21 10:35:47.463405863 +0800
|
||||
@@ -38,28 +38,21 @@
|
||||
};
|
||||
|
||||
|
||||
-typedef struct ngx_pool_large_s ngx_pool_large_t;
|
||||
-
|
||||
-struct ngx_pool_large_s {
|
||||
- ngx_pool_large_t *next;
|
||||
- void *alloc;
|
||||
-};
|
||||
+typedef struct ngx_pool_data_s ngx_pool_large_t;
|
||||
+typedef struct ngx_pool_data_s ngx_pool_data_t;
|
||||
|
||||
|
||||
-typedef struct {
|
||||
- u_char *last;
|
||||
- u_char *end;
|
||||
- ngx_pool_t *next;
|
||||
- ngx_uint_t failed;
|
||||
-} ngx_pool_data_t;
|
||||
+struct ngx_pool_data_s {
|
||||
+ ngx_pool_data_t *next;
|
||||
+ void *alloc;
|
||||
+};
|
||||
|
||||
|
||||
struct ngx_pool_s {
|
||||
- ngx_pool_data_t d;
|
||||
+ ngx_pool_data_t *d;
|
||||
size_t max;
|
||||
ngx_pool_t *current;
|
||||
ngx_chain_t *chain;
|
||||
- ngx_pool_large_t *large;
|
||||
ngx_pool_cleanup_t *cleanup;
|
||||
ngx_log_t *log;
|
||||
};
|
26
patches/nginx-1.2.8-server_header.patch
Normal file
26
patches/nginx-1.2.8-server_header.patch
Normal file
@ -0,0 +1,26 @@
|
||||
diff -ur lz-nginx-1.2.8/nginx-1.2.8/src/core/nginx.h lz-nginx-1.2.8-patched/nginx-1.2.8/src/core/nginx.h
|
||||
--- lz-nginx-1.2.8/nginx-1.2.8/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
|
||||
+++ lz-nginx-1.2.8-patched/nginx-1.2.8/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#define nginx_version 1002008
|
||||
#define NGINX_VERSION "1.2.8"
|
||||
-#define NGINX_VER "nginx/" NGINX_VERSION
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#define NGX_OLDPID_EXT ".oldbin"
|
||||
Only in lz-nginx-1.2.8-patched/nginx-1.2.8/src/core: nginx.h.orig
|
||||
Only in lz-nginx-1.2.8-patched/nginx-1.2.8/src/core: nginx.h.rej
|
||||
diff -ur lz-nginx-1.2.8/nginx-1.2.8/src/http/ngx_http_header_filter_module.c lz-nginx-1.2.8-patched/nginx-1.2.8/src/http/ngx_http_header_filter_module.c
|
||||
--- lz-nginx-1.2.8/nginx-1.2.8/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
|
||||
+++ lz-nginx-1.2.8-patched/nginx-1.2.8/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
|
||||
@@ -45,7 +45,7 @@
|
||||
};
|
||||
|
||||
|
||||
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
|
||||
+static char ngx_http_server_string[] = "Server: ngx_openresty" CRLF;
|
||||
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
|
||||
|
||||
|
11
patches/nginx-1.2.8-slab_alloc_no_memory_as_info.patch
Normal file
11
patches/nginx-1.2.8-slab_alloc_no_memory_as_info.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.2.8/src/core/ngx_slab.c 2012-09-24 11:34:04.000000000 -0700
|
||||
+++ nginx-1.2.8-patched/src/core/ngx_slab.c 2012-12-05 20:47:07.296694952 -0800
|
||||
@@ -657,7 +657,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *po
|
||||
}
|
||||
}
|
||||
|
||||
- ngx_slab_error(pool, NGX_LOG_CRIT, "ngx_slab_alloc() failed: no memory");
|
||||
+ ngx_slab_error(pool, NGX_LOG_INFO, "ngx_slab_alloc() failed: no memory");
|
||||
|
||||
return NULL;
|
||||
}
|
40
patches/nginx-1.2.8-upstream_pipelining.patch
Normal file
40
patches/nginx-1.2.8-upstream_pipelining.patch
Normal file
@ -0,0 +1,40 @@
|
||||
diff -rudp nginx-1.2.8/src/http/ngx_http_upstream.c nginx-1.2.8-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.2.8/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
|
||||
+++ nginx-1.2.8-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
|
||||
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
|
||||
}
|
||||
|
||||
u->request_sent = 0;
|
||||
+ u->request_all_sent = 0;
|
||||
|
||||
if (rc == NGX_AGAIN) {
|
||||
ngx_add_timer(c->write, u->conf->connect_timeout);
|
||||
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
|
||||
|
||||
/* rc == NGX_OK */
|
||||
|
||||
+ u->request_all_sent = 1;
|
||||
+
|
||||
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
|
||||
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
|
||||
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
|
||||
|
||||
#endif
|
||||
|
||||
- if (u->header_sent) {
|
||||
+ if (u->request_all_sent) {
|
||||
u->write_event_handler = ngx_http_upstream_dummy_handler;
|
||||
|
||||
(void) ngx_handle_write_event(c->write, 0);
|
||||
diff -rudp nginx-1.2.8/src/http/ngx_http_upstream.h nginx-1.2.8-patched/src/http/ngx_http_upstream.h
|
||||
--- nginx-1.2.8/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
|
||||
+++ nginx-1.2.8-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
|
||||
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
|
||||
unsigned keepalive:1;
|
||||
|
||||
unsigned request_sent:1;
|
||||
+ unsigned request_all_sent:1;
|
||||
unsigned header_sent:1;
|
||||
};
|
||||
|
149
patches/nginx-1.2.8-upstream_truncation.patch
Normal file
149
patches/nginx-1.2.8-upstream_truncation.patch
Normal file
@ -0,0 +1,149 @@
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.2.8/src/http/modules/ngx_http_scgi_module.c nginx-1.2.8-patched/src/http/modules/ngx_http_scgi_module.c
|
||||
--- nginx-1.2.8/src/http/modules/ngx_http_scgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.2.8-patched/src/http/modules/ngx_http_scgi_module.c 2013-04-07 12:09:55.900492634 -0700
|
||||
@@ -39,6 +39,7 @@ static ngx_int_t ngx_http_scgi_process_s
|
||||
static ngx_int_t ngx_http_scgi_process_header(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_finalize_request(ngx_http_request_t *r, ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_scgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_scgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_scgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -446,6 +447,8 @@ ngx_http_scgi_handler(ngx_http_request_t
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_scgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1046,6 +1049,17 @@ ngx_http_scgi_finalize_request(ngx_http_
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_scgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_scgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.2.8/src/http/modules/ngx_http_uwsgi_module.c nginx-1.2.8-patched/src/http/modules/ngx_http_uwsgi_module.c
|
||||
--- nginx-1.2.8/src/http/modules/ngx_http_uwsgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.2.8-patched/src/http/modules/ngx_http_uwsgi_module.c 2013-04-07 11:58:24.546915778 -0700
|
||||
@@ -46,6 +46,7 @@ static ngx_int_t ngx_http_uwsgi_process_
|
||||
static void ngx_http_uwsgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_uwsgi_finalize_request(ngx_http_request_t *r,
|
||||
ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_uwsgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_uwsgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -479,6 +480,8 @@ ngx_http_uwsgi_handler(ngx_http_request_
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_uwsgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1086,6 +1089,17 @@ ngx_http_uwsgi_finalize_request(ngx_http
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_uwsgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.2.8/src/http/ngx_http_upstream.c nginx-1.2.8-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.2.8/src/http/ngx_http_upstream.c 2013-02-11 06:39:49.000000000 -0800
|
||||
+++ nginx-1.2.8-patched/src/http/ngx_http_upstream.c 2013-04-08 16:37:48.326752696 -0700
|
||||
@@ -2399,7 +2399,7 @@ ngx_http_upstream_process_non_buffered_u
|
||||
|
||||
if (c->read->timedout) {
|
||||
ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
|
||||
- ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_GATEWAY_TIME_OUT);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2446,13 +2446,20 @@ ngx_http_upstream_process_non_buffered_r
|
||||
if (u->busy_bufs == NULL) {
|
||||
|
||||
if (u->length == 0
|
||||
- || upstream->read->eof
|
||||
- || upstream->read->error)
|
||||
+ || (upstream->read->eof
|
||||
+ && u->length == -1
|
||||
+ && u->pipe
|
||||
+ && u->pipe->length <= 0))
|
||||
{
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (upstream->read->eof || upstream->read->error) {
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
b->pos = b->start;
|
||||
b->last = b->start;
|
||||
}
|
||||
@@ -2720,7 +2727,9 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
|
||||
#endif
|
||||
|
||||
- if (p->upstream_done || p->upstream_eof || p->upstream_error) {
|
||||
+ if (p->upstream_done
|
||||
+ || (p->upstream_eof && u->length == -1 && p->length <= 0))
|
||||
+ {
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"http upstream exit: %p", p->out);
|
||||
#if 0
|
||||
@@ -2729,6 +2738,14 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ if (p->upstream_eof || p->upstream_error) {
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
+ "http upstream exit: %p", p->out);
|
||||
+
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (p->downstream_error) {
|
||||
@@ -3087,9 +3104,9 @@ ngx_http_upstream_finalize_request(ngx_h
|
||||
|
||||
if (u->header_sent
|
||||
&& rc != NGX_HTTP_REQUEST_TIME_OUT
|
||||
- && (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
|
||||
+ && rc >= NGX_HTTP_SPECIAL_RESPONSE)
|
||||
{
|
||||
- rc = 0;
|
||||
+ rc = NGX_ERROR;
|
||||
}
|
||||
|
||||
if (rc == NGX_DECLINED) {
|
42
patches/nginx-1.3.11-channel-uninit-params.patch
Normal file
42
patches/nginx-1.3.11-channel-uninit-params.patch
Normal file
@ -0,0 +1,42 @@
|
||||
diff -urp nginx-1.3.11/src/os/unix/ngx_channel.c nginx-1.3.11-patched/src/os/unix/ngx_channel.c
|
||||
--- nginx-1.3.11/src/os/unix/ngx_channel.c 2012-01-18 07:07:43.000000000 -0800
|
||||
+++ nginx-1.3.11-patched/src/os/unix/ngx_channel.c 2012-09-17 11:33:09.215394217 -0700
|
||||
@@ -31,6 +31,8 @@ ngx_write_channel(ngx_socket_t s, ngx_ch
|
||||
msg.msg_controllen = 0;
|
||||
|
||||
} else {
|
||||
+ ngx_memzero(&cmsg, sizeof(cmsg));
|
||||
+
|
||||
msg.msg_control = (caddr_t) &cmsg;
|
||||
msg.msg_controllen = sizeof(cmsg);
|
||||
|
||||
diff -urp nginx-1.3.11/src/os/unix/ngx_process_cycle.c nginx-1.3.11-patched/src/os/unix/ngx_process_cycle.c
|
||||
--- nginx-1.3.11/src/os/unix/ngx_process_cycle.c 2012-07-02 09:23:14.000000000 -0700
|
||||
+++ nginx-1.3.11-patched/src/os/unix/ngx_process_cycle.c 2012-09-17 11:33:09.214394215 -0700
|
||||
@@ -356,6 +356,8 @@ ngx_start_worker_processes(ngx_cycle_t *
|
||||
|
||||
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start worker processes");
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_OPEN_CHANNEL;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
@@ -463,6 +465,8 @@ ngx_signal_worker_processes(ngx_cycle_t
|
||||
ngx_err_t err;
|
||||
ngx_channel_t ch;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
#if (NGX_BROKEN_SCM_RIGHTS)
|
||||
|
||||
ch.command = 0;
|
||||
@@ -564,6 +568,8 @@ ngx_reap_children(ngx_cycle_t *cycle)
|
||||
ngx_channel_t ch;
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_CLOSE_CHANNEL;
|
||||
ch.fd = -1;
|
||||
|
1142
patches/nginx-1.3.11-dtrace.patch
Normal file
1142
patches/nginx-1.3.11-dtrace.patch
Normal file
File diff suppressed because it is too large
Load Diff
15
patches/nginx-1.3.11-location_if_inherits_proxy.patch
Normal file
15
patches/nginx-1.3.11-location_if_inherits_proxy.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- nginx-1.3.11/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
|
||||
+++ nginx-1.3.11-patched/src/http/modules/ngx_http_proxy_module.c 2012-06-24 12:48:57.289834450 +0800
|
||||
@@ -3023,8 +3023,10 @@
|
||||
|
||||
if (conf->upstream.upstream || conf->proxy_lengths) {
|
||||
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
||||
- if (clcf->handler == NULL && clcf->lmt_excpt) {
|
||||
- clcf->handler = ngx_http_proxy_handler;
|
||||
+ if (clcf->handler == NULL) {
|
||||
+ if (clcf->lmt_excpt) {
|
||||
+ clcf->handler = ngx_http_proxy_handler;
|
||||
+ }
|
||||
conf->location = prev->location;
|
||||
}
|
||||
}
|
115
patches/nginx-1.3.11-log_escape_non_ascii.patch
Normal file
115
patches/nginx-1.3.11-log_escape_non_ascii.patch
Normal file
@ -0,0 +1,115 @@
|
||||
--- nginx-1.3.11/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
|
||||
+++ nginx-1.3.11-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
|
||||
@@ -61,6 +61,8 @@
|
||||
time_t open_file_cache_valid;
|
||||
ngx_uint_t open_file_cache_min_uses;
|
||||
|
||||
+ ngx_flag_t escape_non_ascii;
|
||||
+
|
||||
ngx_uint_t off; /* unsigned off:1 */
|
||||
} ngx_http_log_loc_conf_t;
|
||||
|
||||
@@ -104,7 +106,8 @@
|
||||
uintptr_t data);
|
||||
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
|
||||
ngx_http_log_op_t *op);
|
||||
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
|
||||
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
|
||||
+ u_char *src, size_t size);
|
||||
|
||||
|
||||
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
|
||||
@@ -146,6 +149,13 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("log_escape_non_ascii"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
||||
+ ngx_conf_set_flag_slot,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
|
||||
+ NULL },
|
||||
+
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
@@ -637,6 +647,7 @@
|
||||
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
|
||||
{
|
||||
uintptr_t len;
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, data);
|
||||
@@ -645,7 +656,9 @@
|
||||
return 1;
|
||||
}
|
||||
|
||||
- len = ngx_http_log_escape(NULL, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+
|
||||
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
|
||||
|
||||
value->escape = len ? 1 : 0;
|
||||
|
||||
@@ -656,6 +669,7 @@
|
||||
static u_char *
|
||||
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
|
||||
{
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, op->data);
|
||||
@@ -669,16 +683,18 @@
|
||||
return ngx_cpymem(buf, value->data, value->len);
|
||||
|
||||
} else {
|
||||
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uintptr_t
|
||||
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
|
||||
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
|
||||
+ size_t size)
|
||||
{
|
||||
- ngx_uint_t n;
|
||||
- static u_char hex[] = "0123456789ABCDEF";
|
||||
+ ngx_uint_t n;
|
||||
+ static u_char hex[] = "0123456789ABCDEF";
|
||||
|
||||
static uint32_t escape[] = {
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
@@ -698,6 +714,12 @@
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
};
|
||||
|
||||
+ if (lcf->escape_non_ascii) {
|
||||
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
|
||||
+
|
||||
+ } else {
|
||||
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
|
||||
+ }
|
||||
|
||||
if (dst == NULL) {
|
||||
|
||||
@@ -781,6 +803,7 @@
|
||||
}
|
||||
|
||||
conf->open_file_cache = NGX_CONF_UNSET_PTR;
|
||||
+ conf->escape_non_ascii = NGX_CONF_UNSET;
|
||||
|
||||
return conf;
|
||||
}
|
||||
@@ -796,6 +819,8 @@
|
||||
ngx_http_log_fmt_t *fmt;
|
||||
ngx_http_log_main_conf_t *lmcf;
|
||||
|
||||
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
|
||||
+
|
||||
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
|
||||
|
||||
conf->open_file_cache = prev->open_file_cache;
|
24
patches/nginx-1.3.11-no_Werror.patch
Normal file
24
patches/nginx-1.3.11-no_Werror.patch
Normal file
@ -0,0 +1,24 @@
|
||||
diff -ur nginx-1.3.11/auto/cc/gcc nginx-1.3.11-patched/auto/cc/gcc
|
||||
--- nginx-1.3.11/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
|
||||
+++ nginx-1.3.11-patched/auto/cc/gcc 2011-06-27 19:53:13.837741087 +0800
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
||||
diff -ur nginx-1.3.11/auto/cc/icc nginx-1.3.11-patched/auto/cc/icc
|
||||
--- nginx-1.3.11/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
|
||||
+++ nginx-1.3.11-patched/auto/cc/icc 2011-06-27 19:53:19.508916811 +0800
|
||||
@@ -139,7 +139,7 @@
|
||||
esac
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
90
patches/nginx-1.3.11-no_error_pages.patch
Normal file
90
patches/nginx-1.3.11-no_error_pages.patch
Normal file
@ -0,0 +1,90 @@
|
||||
--- nginx-1.3.11/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
|
||||
+++ nginx-1.3.11-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
|
||||
@@ -57,6 +57,8 @@
|
||||
void *conf);
|
||||
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
+ void *conf);
|
||||
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
@@ -614,6 +616,14 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("no_error_pages"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|
||||
+ |NGX_CONF_NOARGS,
|
||||
+ ngx_http_core_no_error_pages,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ 0,
|
||||
+ NULL },
|
||||
+
|
||||
{ ngx_string("try_files"),
|
||||
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
|
||||
ngx_http_core_try_files,
|
||||
@@ -3052,7 +3062,6 @@
|
||||
* clcf->types = NULL;
|
||||
* clcf->default_type = { 0, NULL };
|
||||
* clcf->error_log = NULL;
|
||||
- * clcf->error_pages = NULL;
|
||||
* clcf->try_files = NULL;
|
||||
* clcf->client_body_path = NULL;
|
||||
* clcf->regex = NULL;
|
||||
@@ -3062,6 +3071,7 @@
|
||||
* clcf->gzip_proxied = 0;
|
||||
*/
|
||||
|
||||
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
|
||||
clcf->client_max_body_size = NGX_CONF_UNSET;
|
||||
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
|
||||
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
|
||||
@@ -3250,9 +3260,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (conf->error_pages == NULL && prev->error_pages) {
|
||||
- conf->error_pages = prev->error_pages;
|
||||
- }
|
||||
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
|
||||
|
||||
ngx_conf_merge_str_value(conf->default_type,
|
||||
prev->default_type, "text/plain");
|
||||
@@ -3988,6 +3996,10 @@
|
||||
ngx_http_compile_complex_value_t ccv;
|
||||
|
||||
if (clcf->error_pages == NULL) {
|
||||
+ return "conflicts with \"no_error_pages\"";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
|
||||
clcf->error_pages = ngx_array_create(cf->pool, 4,
|
||||
sizeof(ngx_http_err_page_t));
|
||||
if (clcf->error_pages == NULL) {
|
||||
@@ -4095,6 +4107,25 @@
|
||||
|
||||
|
||||
static char *
|
||||
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
+{
|
||||
+ ngx_http_core_loc_conf_t *clcf = conf;
|
||||
+
|
||||
+ if (clcf->error_pages == NULL) {
|
||||
+ return "is duplicate";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
|
||||
+ return "conflicts with \"error_page\"";
|
||||
+ }
|
||||
+
|
||||
+ clcf->error_pages = NULL;
|
||||
+
|
||||
+ return NGX_CONF_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static char *
|
||||
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
ngx_http_core_loc_conf_t *clcf = conf;
|
609
patches/nginx-1.3.11-no_pool.patch
Normal file
609
patches/nginx-1.3.11-no_pool.patch
Normal file
@ -0,0 +1,609 @@
|
||||
diff -ur nginx-1.3.11/src/core/nginx.h nginx-1.3.11-patched/src/core/nginx.h
|
||||
--- nginx-1.3.11/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
|
||||
+++ nginx-1.3.11-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
#define nginx_version 1003011
|
||||
#define NGINX_VERSION "1.3.11"
|
||||
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
diff -urx '*~' -x '*.swp' nginx-1.3.11/src/core/ngx_array.c nginx-1.3.11-patched/src/core/ngx_array.c
|
||||
--- nginx-1.3.11/src/core/ngx_array.c 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.3.11-patched/src/core/ngx_array.c 2012-06-20 23:10:36.870722387 +0800
|
||||
@@ -28,6 +28,7 @@
|
||||
a->size = size;
|
||||
a->nalloc = n;
|
||||
a->pool = p;
|
||||
+ a->old_elts = NULL;
|
||||
|
||||
return a;
|
||||
}
|
||||
@@ -36,26 +37,30 @@
|
||||
void
|
||||
ngx_array_destroy(ngx_array_t *a)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
|
||||
- p->d.last -= a->size * a->nalloc;
|
||||
+ if (a->elts) {
|
||||
+ ngx_pfree(p, a->elts);
|
||||
}
|
||||
|
||||
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
|
||||
- p->d.last = (u_char *) a;
|
||||
+ for (link = a->old_elts; link; link = link->next) {
|
||||
+ ngx_pfree(p, link->elts);
|
||||
}
|
||||
+
|
||||
+ ngx_pfree(p, a);
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
ngx_array_push(ngx_array_t *a)
|
||||
{
|
||||
- void *elt, *new;
|
||||
- size_t size;
|
||||
- ngx_pool_t *p;
|
||||
+ void *elt, *new;
|
||||
+ size_t size;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts == a->nalloc) {
|
||||
|
||||
@@ -65,29 +70,27 @@
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + size == p->d.last
|
||||
- && p->d.last + a->size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += a->size;
|
||||
- a->nalloc++;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- new = ngx_palloc(p, 2 * size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, size);
|
||||
- a->elts = new;
|
||||
- a->nalloc *= 2;
|
||||
+ /* allocate a new array */
|
||||
+
|
||||
+ new = ngx_palloc(p, 2 * size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc *= 2;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
@@ -101,11 +104,10 @@
|
||||
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
|
||||
{
|
||||
void *elt, *new;
|
||||
- size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *p;
|
||||
|
||||
- size = n * a->size;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts + n > a->nalloc) {
|
||||
|
||||
@@ -113,31 +115,27 @@
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
|
||||
- && p->d.last + size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += size;
|
||||
- a->nalloc += n;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
-
|
||||
- new = ngx_palloc(p, nalloc * a->size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
- a->elts = new;
|
||||
- a->nalloc = nalloc;
|
||||
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
+
|
||||
+ new = ngx_palloc(p, nalloc * a->size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc = nalloc;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
diff -urx '*~' -x '*.swp' nginx-1.3.11/src/core/ngx_array.h nginx-1.3.11-patched/src/core/ngx_array.h
|
||||
--- nginx-1.3.11/src/core/ngx_array.h 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.3.11-patched/src/core/ngx_array.h 2012-06-20 23:25:38.800624960 +0800
|
||||
@@ -13,12 +13,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
+typedef struct ngx_array_link_s ngx_array_link_t;
|
||||
+
|
||||
+
|
||||
+struct ngx_array_link_s {
|
||||
+ void *elts;
|
||||
+ ngx_array_link_t *next;
|
||||
+};
|
||||
+
|
||||
+
|
||||
struct ngx_array_s {
|
||||
void *elts;
|
||||
ngx_uint_t nelts;
|
||||
size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *pool;
|
||||
+
|
||||
+ ngx_array_link_t *old_elts;
|
||||
};
|
||||
|
||||
|
||||
@@ -40,6 +51,7 @@
|
||||
array->size = size;
|
||||
array->nalloc = n;
|
||||
array->pool = pool;
|
||||
+ array->old_elts = NULL;
|
||||
|
||||
array->elts = ngx_palloc(pool, n * size);
|
||||
if (array->elts == NULL) {
|
||||
diff -urx '*~' -x '*.swp' nginx-1.3.11/src/core/ngx_palloc.c nginx-1.3.11-patched/src/core/ngx_palloc.c
|
||||
--- nginx-1.3.11/src/core/ngx_palloc.c 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.3.11-patched/src/core/ngx_palloc.c 2012-06-20 22:56:30.148073066 +0800
|
||||
@@ -9,32 +9,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
|
||||
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
|
||||
-
|
||||
-
|
||||
ngx_pool_t *
|
||||
ngx_create_pool(size_t size, ngx_log_t *log)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
|
||||
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
|
||||
+ size = sizeof(ngx_pool_t);
|
||||
+ p = ngx_alloc(size, log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- p->d.end = (u_char *) p + size;
|
||||
- p->d.next = NULL;
|
||||
- p->d.failed = 0;
|
||||
+ ngx_memzero(p, size);
|
||||
|
||||
size = size - sizeof(ngx_pool_t);
|
||||
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
|
||||
|
||||
p->current = p;
|
||||
- p->chain = NULL;
|
||||
- p->large = NULL;
|
||||
- p->cleanup = NULL;
|
||||
p->log = log;
|
||||
|
||||
return p;
|
||||
@@ -44,8 +35,7 @@
|
||||
void
|
||||
ngx_destroy_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- ngx_pool_t *p, *n;
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
ngx_pool_cleanup_t *c;
|
||||
|
||||
for (c = pool->cleanup; c; c = c->next) {
|
||||
@@ -56,13 +46,9 @@
|
||||
}
|
||||
}
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
-
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
|
||||
-
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
+ if (pool->d == NULL) {
|
||||
+ ngx_free(pool);
|
||||
+ return;
|
||||
}
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
@@ -72,9 +58,9 @@
|
||||
* so we cannot use this log while free()ing the pool
|
||||
*/
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
|
||||
+ "free: %p, unused: %d", d, 0);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
@@ -83,172 +69,82 @@
|
||||
|
||||
#endif
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
- ngx_free(p);
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
-}
|
||||
|
||||
+ pool->d = NULL;
|
||||
|
||||
-void
|
||||
-ngx_reset_pool(ngx_pool_t *pool)
|
||||
-{
|
||||
- ngx_pool_t *p;
|
||||
- ngx_pool_large_t *l;
|
||||
-
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- pool->large = NULL;
|
||||
-
|
||||
- for (p = pool; p; p = p->d.next) {
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- }
|
||||
+ ngx_free(pool);
|
||||
}
|
||||
|
||||
|
||||
-void *
|
||||
-ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
+void
|
||||
+ngx_reset_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
+ ngx_pool_data_t *saved = NULL;
|
||||
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
-
|
||||
- return m;
|
||||
+ if (pool->d) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ if (d->alloc == pool->log) {
|
||||
+ saved = d;
|
||||
+ continue;
|
||||
}
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
- }
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
-}
|
||||
-
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
-void *
|
||||
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
-{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
-
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = p->d.last;
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
-
|
||||
- return m;
|
||||
+ if (n == NULL) {
|
||||
+ break;
|
||||
}
|
||||
+ }
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
+ pool->d = saved;
|
||||
}
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_malloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- u_char *m;
|
||||
- size_t psize;
|
||||
- ngx_pool_t *p, *new, *current;
|
||||
+ ngx_pool_data_t *d;
|
||||
+ void *p;
|
||||
|
||||
- psize = (size_t) (pool->d.end - (u_char *) pool);
|
||||
-
|
||||
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
|
||||
- if (m == NULL) {
|
||||
+ p = ngx_alloc(size, pool->log);
|
||||
+ if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- new = (ngx_pool_t *) m;
|
||||
-
|
||||
- new->d.end = m + psize;
|
||||
- new->d.next = NULL;
|
||||
- new->d.failed = 0;
|
||||
-
|
||||
- m += sizeof(ngx_pool_data_t);
|
||||
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
|
||||
- new->d.last = m + size;
|
||||
-
|
||||
- current = pool->current;
|
||||
-
|
||||
- for (p = current; p->d.next; p = p->d.next) {
|
||||
- if (p->d.failed++ > 4) {
|
||||
- current = p->d.next;
|
||||
- }
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
+ ngx_free(p);
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
- p->d.next = new;
|
||||
-
|
||||
- pool->current = current ? current : new;
|
||||
-
|
||||
- return m;
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
+ return p;
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- void *p;
|
||||
- ngx_uint_t n;
|
||||
- ngx_pool_large_t *large;
|
||||
-
|
||||
- p = ngx_alloc(size, pool->log);
|
||||
- if (p == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- n = 0;
|
||||
-
|
||||
- for (large = pool->large; large; large = large->next) {
|
||||
- if (large->alloc == NULL) {
|
||||
- large->alloc = p;
|
||||
- return p;
|
||||
- }
|
||||
-
|
||||
- if (n++ > 3) {
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
- ngx_free(p);
|
||||
- return NULL;
|
||||
- }
|
||||
+ return ngx_malloc(pool, size);
|
||||
+}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
|
||||
- return p;
|
||||
+void *
|
||||
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
+{
|
||||
+ return ngx_malloc(pool, size);
|
||||
}
|
||||
|
||||
|
||||
@@ -256,38 +152,48 @@
|
||||
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
|
||||
{
|
||||
void *p;
|
||||
- ngx_pool_large_t *large;
|
||||
+ ngx_pool_data_t *d;
|
||||
|
||||
p = ngx_memalign(alignment, size, pool->log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
ngx_free(p);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
-
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
-ngx_pfree(ngx_pool_t *pool, void *p)
|
||||
+ngx_pfree(ngx_pool_t *pool, void *data)
|
||||
{
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *p, *d;
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (p == l->alloc) {
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p", l->alloc);
|
||||
- ngx_free(l->alloc);
|
||||
- l->alloc = NULL;
|
||||
+ p = NULL;
|
||||
+ for (d = pool->d; d; p = d, d = d->next) {
|
||||
+ if (data == d->alloc) {
|
||||
+
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
|
||||
+
|
||||
+ ngx_free(d->alloc);
|
||||
+ d->alloc = NULL;
|
||||
+
|
||||
+ if (p) {
|
||||
+ p->next = d->next;
|
||||
+
|
||||
+ } else {
|
||||
+ pool->d = d->next;
|
||||
+ }
|
||||
+
|
||||
+ ngx_free(d);
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
diff -urx '*~' -x '*.swp' nginx-1.3.11/src/core/ngx_palloc.h nginx-1.3.11-patched/src/core/ngx_palloc.h
|
||||
--- nginx-1.3.11/src/core/ngx_palloc.h 2012-02-06 04:02:59.000000000 +0800
|
||||
+++ nginx-1.3.11-patched/src/core/ngx_palloc.h 2012-06-21 10:35:47.463405863 +0800
|
||||
@@ -38,28 +38,21 @@
|
||||
};
|
||||
|
||||
|
||||
-typedef struct ngx_pool_large_s ngx_pool_large_t;
|
||||
-
|
||||
-struct ngx_pool_large_s {
|
||||
- ngx_pool_large_t *next;
|
||||
- void *alloc;
|
||||
-};
|
||||
+typedef struct ngx_pool_data_s ngx_pool_large_t;
|
||||
+typedef struct ngx_pool_data_s ngx_pool_data_t;
|
||||
|
||||
|
||||
-typedef struct {
|
||||
- u_char *last;
|
||||
- u_char *end;
|
||||
- ngx_pool_t *next;
|
||||
- ngx_uint_t failed;
|
||||
-} ngx_pool_data_t;
|
||||
+struct ngx_pool_data_s {
|
||||
+ ngx_pool_data_t *next;
|
||||
+ void *alloc;
|
||||
+};
|
||||
|
||||
|
||||
struct ngx_pool_s {
|
||||
- ngx_pool_data_t d;
|
||||
+ ngx_pool_data_t *d;
|
||||
size_t max;
|
||||
ngx_pool_t *current;
|
||||
ngx_chain_t *chain;
|
||||
- ngx_pool_large_t *large;
|
||||
ngx_pool_cleanup_t *cleanup;
|
||||
ngx_log_t *log;
|
||||
};
|
63
patches/nginx-1.3.11-nonbuffered-upstream-truncation.patch
Normal file
63
patches/nginx-1.3.11-nonbuffered-upstream-truncation.patch
Normal file
@ -0,0 +1,63 @@
|
||||
--- nginx-1.3.11/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
|
||||
+++ nginx-1.3.11-patched/src/http/ngx_http_upstream.c 2012-09-09 21:58:04.727761891 -0700
|
||||
@@ -2383,7 +2383,7 @@
|
||||
|
||||
if (c->read->timedout) {
|
||||
ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
|
||||
- ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_GATEWAY_TIME_OUT);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2430,13 +2430,17 @@
|
||||
if (u->busy_bufs == NULL) {
|
||||
|
||||
if (u->length == 0
|
||||
- || upstream->read->eof
|
||||
- || upstream->read->error)
|
||||
+ || (upstream->read->eof && u->headers_in.content_length_n == -1))
|
||||
{
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (upstream->read->eof || upstream->read->error) {
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
b->pos = b->start;
|
||||
b->last = b->start;
|
||||
}
|
||||
@@ -2710,7 +2714,16 @@
|
||||
#if 0
|
||||
ngx_http_busy_unlock(u->conf->busy_lock, &u->busy_lock);
|
||||
#endif
|
||||
- ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+
|
||||
+ if (p->upstream_done
|
||||
+ || (p->upstream_eof && u->headers_in.content_length_n == -1))
|
||||
+ {
|
||||
+ ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+
|
||||
+ } else {
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ }
|
||||
+
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -3073,6 +3086,13 @@
|
||||
&& rc != NGX_HTTP_REQUEST_TIME_OUT
|
||||
&& (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
|
||||
{
|
||||
+ if (rc == NGX_ERROR) {
|
||||
+ r->headers_out.status = NGX_HTTP_INTERNAL_SERVER_ERROR;
|
||||
+
|
||||
+ } else {
|
||||
+ r->headers_out.status = rc;
|
||||
+ }
|
||||
+
|
||||
rc = 0;
|
||||
}
|
||||
|
@ -0,0 +1,31 @@
|
||||
--- nginx-1.3.11/src/event/modules/ngx_poll_module.c 2012-01-18 07:07:43.000000000 -0800
|
||||
+++ nginx-1.3.11-patched/src/event/modules/ngx_poll_module.c 2013-01-23 12:34:13.990781456 -0800
|
||||
@@ -367,11 +367,18 @@ ngx_poll_process_events(ngx_cycle_t *cyc
|
||||
*/
|
||||
|
||||
revents |= POLLIN|POLLOUT;
|
||||
+ if (c->read->active) {
|
||||
+ revents |= POLLIN;
|
||||
+ }
|
||||
+
|
||||
+ if (c->write->active) {
|
||||
+ revents |= POLLOUT;
|
||||
+ }
|
||||
}
|
||||
|
||||
found = 0;
|
||||
|
||||
- if (revents & POLLIN) {
|
||||
+ if ((revents & POLLIN) && c->read->active) {
|
||||
found = 1;
|
||||
|
||||
ev = c->read;
|
||||
@@ -388,7 +395,7 @@ ngx_poll_process_events(ngx_cycle_t *cyc
|
||||
ngx_locked_post_event(ev, queue);
|
||||
}
|
||||
|
||||
- if (revents & POLLOUT) {
|
||||
+ if ((revents & POLLOUT) && c->write->active) {
|
||||
found = 1;
|
||||
ev = c->write;
|
||||
|
26
patches/nginx-1.3.11-server_header.patch
Normal file
26
patches/nginx-1.3.11-server_header.patch
Normal file
@ -0,0 +1,26 @@
|
||||
diff -ur lz-nginx-1.3.11/nginx-1.3.11/src/core/nginx.h lz-nginx-1.3.11-patched/nginx-1.3.11/src/core/nginx.h
|
||||
--- lz-nginx-1.3.11/nginx-1.3.11/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
|
||||
+++ lz-nginx-1.3.11-patched/nginx-1.3.11/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#define nginx_version 1003011
|
||||
#define NGINX_VERSION "1.3.11"
|
||||
-#define NGINX_VER "nginx/" NGINX_VERSION
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#define NGX_OLDPID_EXT ".oldbin"
|
||||
Only in lz-nginx-1.3.11-patched/nginx-1.3.11/src/core: nginx.h.orig
|
||||
Only in lz-nginx-1.3.11-patched/nginx-1.3.11/src/core: nginx.h.rej
|
||||
diff -ur lz-nginx-1.3.11/nginx-1.3.11/src/http/ngx_http_header_filter_module.c lz-nginx-1.3.11-patched/nginx-1.3.11/src/http/ngx_http_header_filter_module.c
|
||||
--- lz-nginx-1.3.11/nginx-1.3.11/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
|
||||
+++ lz-nginx-1.3.11-patched/nginx-1.3.11/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
|
||||
@@ -45,7 +45,7 @@
|
||||
};
|
||||
|
||||
|
||||
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
|
||||
+static char ngx_http_server_string[] = "Server: ngx_openresty" CRLF;
|
||||
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
|
||||
|
||||
|
11
patches/nginx-1.3.11-slab_alloc_no_memory_as_info.patch
Normal file
11
patches/nginx-1.3.11-slab_alloc_no_memory_as_info.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.3.11/src/core/ngx_slab.c 2012-09-24 11:34:04.000000000 -0700
|
||||
+++ nginx-1.3.11-patched/src/core/ngx_slab.c 2012-12-05 20:47:07.296694952 -0800
|
||||
@@ -657,7 +657,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *po
|
||||
}
|
||||
}
|
||||
|
||||
- ngx_slab_error(pool, NGX_LOG_CRIT, "ngx_slab_alloc() failed: no memory");
|
||||
+ ngx_slab_error(pool, NGX_LOG_INFO, "ngx_slab_alloc() failed: no memory");
|
||||
|
||||
return NULL;
|
||||
}
|
40
patches/nginx-1.3.11-upstream_pipelining.patch
Normal file
40
patches/nginx-1.3.11-upstream_pipelining.patch
Normal file
@ -0,0 +1,40 @@
|
||||
diff -rudp nginx-1.3.11/src/http/ngx_http_upstream.c nginx-1.3.11-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.3.11/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
|
||||
+++ nginx-1.3.11-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
|
||||
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
|
||||
}
|
||||
|
||||
u->request_sent = 0;
|
||||
+ u->request_all_sent = 0;
|
||||
|
||||
if (rc == NGX_AGAIN) {
|
||||
ngx_add_timer(c->write, u->conf->connect_timeout);
|
||||
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
|
||||
|
||||
/* rc == NGX_OK */
|
||||
|
||||
+ u->request_all_sent = 1;
|
||||
+
|
||||
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
|
||||
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
|
||||
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
|
||||
|
||||
#endif
|
||||
|
||||
- if (u->header_sent) {
|
||||
+ if (u->request_all_sent) {
|
||||
u->write_event_handler = ngx_http_upstream_dummy_handler;
|
||||
|
||||
(void) ngx_handle_write_event(c->write, 0);
|
||||
diff -rudp nginx-1.3.11/src/http/ngx_http_upstream.h nginx-1.3.11-patched/src/http/ngx_http_upstream.h
|
||||
--- nginx-1.3.11/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
|
||||
+++ nginx-1.3.11-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
|
||||
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
|
||||
unsigned keepalive:1;
|
||||
|
||||
unsigned request_sent:1;
|
||||
+ unsigned request_all_sent:1;
|
||||
unsigned header_sent:1;
|
||||
};
|
||||
|
26
patches/nginx-1.3.11-upstream_test_connect_kqueue.patch
Normal file
26
patches/nginx-1.3.11-upstream_test_connect_kqueue.patch
Normal file
@ -0,0 +1,26 @@
|
||||
--- nginx-1.3.11/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
|
||||
+++ nginx-1.3.11-patched/src/http/ngx_http_upstream.c 2012-11-05 21:17:38.000000000 -0800
|
||||
@@ -1808,10 +1808,22 @@ ngx_http_upstream_test_connect(ngx_conne
|
||||
|
||||
#if (NGX_HAVE_KQUEUE)
|
||||
|
||||
+ ngx_event_t *ev;
|
||||
+
|
||||
if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) {
|
||||
if (c->write->pending_eof) {
|
||||
+ ev = c->write;
|
||||
+
|
||||
+ } else if (c->read->pending_eof) {
|
||||
+ ev = c->read;
|
||||
+
|
||||
+ } else {
|
||||
+ ev = NULL;
|
||||
+ }
|
||||
+
|
||||
+ if (ev) {
|
||||
c->log->action = "connecting to upstream";
|
||||
- (void) ngx_connection_error(c, c->write->kq_errno,
|
||||
+ (void) ngx_connection_error(c, ev->kq_errno,
|
||||
"kevent() reported that connect() failed");
|
||||
return NGX_ERROR;
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
--- nginx-1.3.7/src/event/modules/ngx_poll_module.c 2012-01-18 07:07:43.000000000 -0800
|
||||
+++ nginx-1.3.7-patched/src/event/modules/ngx_poll_module.c 2013-01-23 12:34:13.990781456 -0800
|
||||
@@ -367,11 +367,18 @@ ngx_poll_process_events(ngx_cycle_t *cyc
|
||||
*/
|
||||
|
||||
revents |= POLLIN|POLLOUT;
|
||||
+ if (c->read->active) {
|
||||
+ revents |= POLLIN;
|
||||
+ }
|
||||
+
|
||||
+ if (c->write->active) {
|
||||
+ revents |= POLLOUT;
|
||||
+ }
|
||||
}
|
||||
|
||||
found = 0;
|
||||
|
||||
- if (revents & POLLIN) {
|
||||
+ if ((revents & POLLIN) && c->read->active) {
|
||||
found = 1;
|
||||
|
||||
ev = c->read;
|
||||
@@ -388,7 +395,7 @@ ngx_poll_process_events(ngx_cycle_t *cyc
|
||||
ngx_locked_post_event(ev, queue);
|
||||
}
|
||||
|
||||
- if (revents & POLLOUT) {
|
||||
+ if ((revents & POLLOUT) && c->write->active) {
|
||||
found = 1;
|
||||
ev = c->write;
|
||||
|
42
patches/nginx-1.4.1-channel-uninit-params.patch
Normal file
42
patches/nginx-1.4.1-channel-uninit-params.patch
Normal file
@ -0,0 +1,42 @@
|
||||
diff -urp nginx-1.4.1/src/os/unix/ngx_channel.c nginx-1.4.1-patched/src/os/unix/ngx_channel.c
|
||||
--- nginx-1.4.1/src/os/unix/ngx_channel.c 2012-01-18 07:07:43.000000000 -0800
|
||||
+++ nginx-1.4.1-patched/src/os/unix/ngx_channel.c 2012-09-17 11:33:09.215394217 -0700
|
||||
@@ -31,6 +31,8 @@ ngx_write_channel(ngx_socket_t s, ngx_ch
|
||||
msg.msg_controllen = 0;
|
||||
|
||||
} else {
|
||||
+ ngx_memzero(&cmsg, sizeof(cmsg));
|
||||
+
|
||||
msg.msg_control = (caddr_t) &cmsg;
|
||||
msg.msg_controllen = sizeof(cmsg);
|
||||
|
||||
diff -urp nginx-1.4.1/src/os/unix/ngx_process_cycle.c nginx-1.4.1-patched/src/os/unix/ngx_process_cycle.c
|
||||
--- nginx-1.4.1/src/os/unix/ngx_process_cycle.c 2012-07-02 09:23:14.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/os/unix/ngx_process_cycle.c 2012-09-17 11:33:09.214394215 -0700
|
||||
@@ -356,6 +356,8 @@ ngx_start_worker_processes(ngx_cycle_t *
|
||||
|
||||
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start worker processes");
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_OPEN_CHANNEL;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
@@ -463,6 +465,8 @@ ngx_signal_worker_processes(ngx_cycle_t
|
||||
ngx_err_t err;
|
||||
ngx_channel_t ch;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
#if (NGX_BROKEN_SCM_RIGHTS)
|
||||
|
||||
ch.command = 0;
|
||||
@@ -564,6 +568,8 @@ ngx_reap_children(ngx_cycle_t *cycle)
|
||||
ngx_channel_t ch;
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_CLOSE_CHANNEL;
|
||||
ch.fd = -1;
|
||||
|
13
patches/nginx-1.4.1-cve-2013-2070.patch
Normal file
13
patches/nginx-1.4.1-cve-2013-2070.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- src/http/modules/ngx_http_proxy_module.c
|
||||
+++ src/http/modules/ngx_http_proxy_module.c
|
||||
@@ -1865,6 +1865,10 @@ data:
|
||||
|
||||
}
|
||||
|
||||
+ if (ctx->size < 0 || ctx->length < 0) {
|
||||
+ goto invalid;
|
||||
+ }
|
||||
+
|
||||
return rc;
|
||||
|
||||
done:
|
1126
patches/nginx-1.4.1-dtrace.patch
Normal file
1126
patches/nginx-1.4.1-dtrace.patch
Normal file
File diff suppressed because it is too large
Load Diff
11
patches/nginx-1.4.1-gcc-maybe-uninitialized-warning.patch
Normal file
11
patches/nginx-1.4.1-gcc-maybe-uninitialized-warning.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.4.1/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
|
||||
@@ -1951,7 +1951,7 @@
|
||||
ngx_int_t rc;
|
||||
ngx_http_connection_t *hc;
|
||||
ngx_http_core_loc_conf_t *clcf;
|
||||
- ngx_http_core_srv_conf_t *cscf;
|
||||
+ ngx_http_core_srv_conf_t *cscf = NULL;
|
||||
|
||||
hc = r->http_connection;
|
||||
|
12
patches/nginx-1.4.1-invalid_referer_hash.patch
Normal file
12
patches/nginx-1.4.1-invalid_referer_hash.patch
Normal file
@ -0,0 +1,12 @@
|
||||
--- nginx-1.4.1/src/http/modules/ngx_http_referer_module.c 2013-05-06 03:27:10.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/http/modules/ngx_http_referer_module.c 2013-05-21 16:04:49.340286168 -0700
|
||||
@@ -396,8 +396,7 @@ ngx_http_valid_referers(ngx_conf_t *cf,
|
||||
|
||||
ngx_str_set(&name, "invalid_referer");
|
||||
|
||||
- var = ngx_http_add_variable(cf, &name,
|
||||
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOHASH);
|
||||
+ var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE);
|
||||
if (var == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
15
patches/nginx-1.4.1-location_if_inherits_proxy.patch
Normal file
15
patches/nginx-1.4.1-location_if_inherits_proxy.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- nginx-1.4.1/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
|
||||
+++ nginx-1.4.1-patched/src/http/modules/ngx_http_proxy_module.c 2012-06-24 12:48:57.289834450 +0800
|
||||
@@ -3023,8 +3023,10 @@
|
||||
|
||||
if (conf->upstream.upstream || conf->proxy_lengths) {
|
||||
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
||||
- if (clcf->handler == NULL && clcf->lmt_excpt) {
|
||||
- clcf->handler = ngx_http_proxy_handler;
|
||||
+ if (clcf->handler == NULL) {
|
||||
+ if (clcf->lmt_excpt) {
|
||||
+ clcf->handler = ngx_http_proxy_handler;
|
||||
+ }
|
||||
conf->location = prev->location;
|
||||
}
|
||||
}
|
115
patches/nginx-1.4.1-log_escape_non_ascii.patch
Normal file
115
patches/nginx-1.4.1-log_escape_non_ascii.patch
Normal file
@ -0,0 +1,115 @@
|
||||
--- nginx-1.4.1/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
|
||||
+++ nginx-1.4.1-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
|
||||
@@ -61,6 +61,8 @@
|
||||
time_t open_file_cache_valid;
|
||||
ngx_uint_t open_file_cache_min_uses;
|
||||
|
||||
+ ngx_flag_t escape_non_ascii;
|
||||
+
|
||||
ngx_uint_t off; /* unsigned off:1 */
|
||||
} ngx_http_log_loc_conf_t;
|
||||
|
||||
@@ -104,7 +106,8 @@
|
||||
uintptr_t data);
|
||||
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
|
||||
ngx_http_log_op_t *op);
|
||||
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
|
||||
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
|
||||
+ u_char *src, size_t size);
|
||||
|
||||
|
||||
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
|
||||
@@ -146,6 +149,13 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("log_escape_non_ascii"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
||||
+ ngx_conf_set_flag_slot,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
|
||||
+ NULL },
|
||||
+
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
@@ -637,6 +647,7 @@
|
||||
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
|
||||
{
|
||||
uintptr_t len;
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, data);
|
||||
@@ -645,7 +656,9 @@
|
||||
return 1;
|
||||
}
|
||||
|
||||
- len = ngx_http_log_escape(NULL, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+
|
||||
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
|
||||
|
||||
value->escape = len ? 1 : 0;
|
||||
|
||||
@@ -656,6 +669,7 @@
|
||||
static u_char *
|
||||
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
|
||||
{
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, op->data);
|
||||
@@ -669,16 +683,18 @@
|
||||
return ngx_cpymem(buf, value->data, value->len);
|
||||
|
||||
} else {
|
||||
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uintptr_t
|
||||
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
|
||||
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
|
||||
+ size_t size)
|
||||
{
|
||||
- ngx_uint_t n;
|
||||
- static u_char hex[] = "0123456789ABCDEF";
|
||||
+ ngx_uint_t n;
|
||||
+ static u_char hex[] = "0123456789ABCDEF";
|
||||
|
||||
static uint32_t escape[] = {
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
@@ -698,6 +714,12 @@
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
};
|
||||
|
||||
+ if (lcf->escape_non_ascii) {
|
||||
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
|
||||
+
|
||||
+ } else {
|
||||
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
|
||||
+ }
|
||||
|
||||
if (dst == NULL) {
|
||||
|
||||
@@ -781,6 +803,7 @@
|
||||
}
|
||||
|
||||
conf->open_file_cache = NGX_CONF_UNSET_PTR;
|
||||
+ conf->escape_non_ascii = NGX_CONF_UNSET;
|
||||
|
||||
return conf;
|
||||
}
|
||||
@@ -796,6 +819,8 @@
|
||||
ngx_http_log_fmt_t *fmt;
|
||||
ngx_http_log_main_conf_t *lmcf;
|
||||
|
||||
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
|
||||
+
|
||||
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
|
||||
|
||||
conf->open_file_cache = prev->open_file_cache;
|
24
patches/nginx-1.4.1-no_Werror.patch
Normal file
24
patches/nginx-1.4.1-no_Werror.patch
Normal file
@ -0,0 +1,24 @@
|
||||
diff -ur nginx-1.4.1/auto/cc/gcc nginx-1.4.1-patched/auto/cc/gcc
|
||||
--- nginx-1.4.1/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
|
||||
+++ nginx-1.4.1-patched/auto/cc/gcc 2011-06-27 19:53:13.837741087 +0800
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
||||
diff -ur nginx-1.4.1/auto/cc/icc nginx-1.4.1-patched/auto/cc/icc
|
||||
--- nginx-1.4.1/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
|
||||
+++ nginx-1.4.1-patched/auto/cc/icc 2011-06-27 19:53:19.508916811 +0800
|
||||
@@ -139,7 +139,7 @@
|
||||
esac
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
90
patches/nginx-1.4.1-no_error_pages.patch
Normal file
90
patches/nginx-1.4.1-no_error_pages.patch
Normal file
@ -0,0 +1,90 @@
|
||||
--- nginx-1.4.1/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
|
||||
+++ nginx-1.4.1-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
|
||||
@@ -57,6 +57,8 @@
|
||||
void *conf);
|
||||
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
+ void *conf);
|
||||
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
@@ -614,6 +616,14 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("no_error_pages"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|
||||
+ |NGX_CONF_NOARGS,
|
||||
+ ngx_http_core_no_error_pages,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ 0,
|
||||
+ NULL },
|
||||
+
|
||||
{ ngx_string("try_files"),
|
||||
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
|
||||
ngx_http_core_try_files,
|
||||
@@ -3052,7 +3062,6 @@
|
||||
* clcf->types = NULL;
|
||||
* clcf->default_type = { 0, NULL };
|
||||
* clcf->error_log = NULL;
|
||||
- * clcf->error_pages = NULL;
|
||||
* clcf->try_files = NULL;
|
||||
* clcf->client_body_path = NULL;
|
||||
* clcf->regex = NULL;
|
||||
@@ -3062,6 +3071,7 @@
|
||||
* clcf->gzip_proxied = 0;
|
||||
*/
|
||||
|
||||
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
|
||||
clcf->client_max_body_size = NGX_CONF_UNSET;
|
||||
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
|
||||
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
|
||||
@@ -3250,9 +3260,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (conf->error_pages == NULL && prev->error_pages) {
|
||||
- conf->error_pages = prev->error_pages;
|
||||
- }
|
||||
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
|
||||
|
||||
ngx_conf_merge_str_value(conf->default_type,
|
||||
prev->default_type, "text/plain");
|
||||
@@ -3988,6 +3996,10 @@
|
||||
ngx_http_compile_complex_value_t ccv;
|
||||
|
||||
if (clcf->error_pages == NULL) {
|
||||
+ return "conflicts with \"no_error_pages\"";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
|
||||
clcf->error_pages = ngx_array_create(cf->pool, 4,
|
||||
sizeof(ngx_http_err_page_t));
|
||||
if (clcf->error_pages == NULL) {
|
||||
@@ -4095,6 +4107,25 @@
|
||||
|
||||
|
||||
static char *
|
||||
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
+{
|
||||
+ ngx_http_core_loc_conf_t *clcf = conf;
|
||||
+
|
||||
+ if (clcf->error_pages == NULL) {
|
||||
+ return "is duplicate";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
|
||||
+ return "conflicts with \"error_page\"";
|
||||
+ }
|
||||
+
|
||||
+ clcf->error_pages = NULL;
|
||||
+
|
||||
+ return NGX_CONF_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static char *
|
||||
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
ngx_http_core_loc_conf_t *clcf = conf;
|
607
patches/nginx-1.4.1-no_pool.patch
Normal file
607
patches/nginx-1.4.1-no_pool.patch
Normal file
@ -0,0 +1,607 @@
|
||||
diff -upr nginx-1.4.1/src/core/nginx.h nginx-1.4.1-patched/src/core/nginx.h
|
||||
--- nginx-1.4.1/src/core/nginx.h 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/core/nginx.h 2013-06-10 16:12:23.691136795 -0700
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
#define nginx_version 1004001
|
||||
#define NGINX_VERSION "1.4.1"
|
||||
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
Only in nginx-1.4.1-patched/src/core: nginx.h.orig
|
||||
Only in nginx-1.4.1-patched/src/core: nginx.h.rej
|
||||
diff -upr nginx-1.4.1/src/core/ngx_array.c nginx-1.4.1-patched/src/core/ngx_array.c
|
||||
--- nginx-1.4.1/src/core/ngx_array.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/core/ngx_array.c 2013-06-10 16:12:23.692136802 -0700
|
||||
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
|
||||
void
|
||||
ngx_array_destroy(ngx_array_t *a)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
|
||||
- p->d.last -= a->size * a->nalloc;
|
||||
+ if (a->elts) {
|
||||
+ ngx_pfree(p, a->elts);
|
||||
}
|
||||
|
||||
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
|
||||
- p->d.last = (u_char *) a;
|
||||
+ for (link = a->old_elts; link; link = link->next) {
|
||||
+ ngx_pfree(p, link->elts);
|
||||
}
|
||||
+
|
||||
+ ngx_pfree(p, a);
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
ngx_array_push(ngx_array_t *a)
|
||||
{
|
||||
- void *elt, *new;
|
||||
- size_t size;
|
||||
- ngx_pool_t *p;
|
||||
+ void *elt, *new;
|
||||
+ size_t size;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts == a->nalloc) {
|
||||
|
||||
@@ -59,29 +63,27 @@ ngx_array_push(ngx_array_t *a)
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + size == p->d.last
|
||||
- && p->d.last + a->size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += a->size;
|
||||
- a->nalloc++;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- new = ngx_palloc(p, 2 * size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, size);
|
||||
- a->elts = new;
|
||||
- a->nalloc *= 2;
|
||||
+ /* allocate a new array */
|
||||
+
|
||||
+ new = ngx_palloc(p, 2 * size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc *= 2;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
@@ -95,11 +97,10 @@ void *
|
||||
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
|
||||
{
|
||||
void *elt, *new;
|
||||
- size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *p;
|
||||
|
||||
- size = n * a->size;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts + n > a->nalloc) {
|
||||
|
||||
@@ -107,31 +108,27 @@ ngx_array_push_n(ngx_array_t *a, ngx_uin
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
|
||||
- && p->d.last + size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += size;
|
||||
- a->nalloc += n;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
-
|
||||
- new = ngx_palloc(p, nalloc * a->size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
- a->elts = new;
|
||||
- a->nalloc = nalloc;
|
||||
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
+
|
||||
+ new = ngx_palloc(p, nalloc * a->size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc = nalloc;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
Only in nginx-1.4.1-patched/src/core: ngx_array.c.orig
|
||||
Only in nginx-1.4.1-patched/src/core: ngx_array.c.rej
|
||||
diff -upr nginx-1.4.1/src/core/ngx_array.h nginx-1.4.1-patched/src/core/ngx_array.h
|
||||
--- nginx-1.4.1/src/core/ngx_array.h 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/core/ngx_array.h 2013-06-10 16:15:08.314275482 -0700
|
||||
@@ -13,12 +13,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
+typedef struct ngx_array_link_s ngx_array_link_t;
|
||||
+
|
||||
+
|
||||
+struct ngx_array_link_s {
|
||||
+ void *elts;
|
||||
+ ngx_array_link_t *next;
|
||||
+};
|
||||
+
|
||||
+
|
||||
typedef struct {
|
||||
void *elts;
|
||||
ngx_uint_t nelts;
|
||||
size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *pool;
|
||||
+
|
||||
+ ngx_array_link_t *old_elts;
|
||||
} ngx_array_t;
|
||||
|
||||
|
||||
@@ -40,6 +51,7 @@ ngx_array_init(ngx_array_t *array, ngx_p
|
||||
array->size = size;
|
||||
array->nalloc = n;
|
||||
array->pool = pool;
|
||||
+ array->old_elts = NULL;
|
||||
|
||||
array->elts = ngx_palloc(pool, n * size);
|
||||
if (array->elts == NULL) {
|
||||
Only in nginx-1.4.1-patched/src/core: ngx_array.h.orig
|
||||
Only in nginx-1.4.1-patched/src/core: ngx_array.h.rej
|
||||
diff -upr nginx-1.4.1/src/core/ngx_palloc.c nginx-1.4.1-patched/src/core/ngx_palloc.c
|
||||
--- nginx-1.4.1/src/core/ngx_palloc.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/core/ngx_palloc.c 2013-06-10 16:12:23.718136984 -0700
|
||||
@@ -9,32 +9,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
|
||||
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
|
||||
-
|
||||
-
|
||||
ngx_pool_t *
|
||||
ngx_create_pool(size_t size, ngx_log_t *log)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
|
||||
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
|
||||
+ size = sizeof(ngx_pool_t);
|
||||
+ p = ngx_alloc(size, log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- p->d.end = (u_char *) p + size;
|
||||
- p->d.next = NULL;
|
||||
- p->d.failed = 0;
|
||||
+ ngx_memzero(p, size);
|
||||
|
||||
size = size - sizeof(ngx_pool_t);
|
||||
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
|
||||
|
||||
p->current = p;
|
||||
- p->chain = NULL;
|
||||
- p->large = NULL;
|
||||
- p->cleanup = NULL;
|
||||
p->log = log;
|
||||
|
||||
return p;
|
||||
@@ -44,8 +35,7 @@ ngx_create_pool(size_t size, ngx_log_t *
|
||||
void
|
||||
ngx_destroy_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- ngx_pool_t *p, *n;
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
ngx_pool_cleanup_t *c;
|
||||
|
||||
for (c = pool->cleanup; c; c = c->next) {
|
||||
@@ -56,13 +46,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
|
||||
}
|
||||
}
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
-
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
|
||||
-
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
+ if (pool->d == NULL) {
|
||||
+ ngx_free(pool);
|
||||
+ return;
|
||||
}
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
@@ -72,9 +58,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
|
||||
* so we cannot use this log while free()ing the pool
|
||||
*/
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
|
||||
+ "free: %p, unused: %d", d, 0);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
@@ -83,172 +69,82 @@ ngx_destroy_pool(ngx_pool_t *pool)
|
||||
|
||||
#endif
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
- ngx_free(p);
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
-}
|
||||
|
||||
+ pool->d = NULL;
|
||||
|
||||
-void
|
||||
-ngx_reset_pool(ngx_pool_t *pool)
|
||||
-{
|
||||
- ngx_pool_t *p;
|
||||
- ngx_pool_large_t *l;
|
||||
-
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- pool->large = NULL;
|
||||
-
|
||||
- for (p = pool; p; p = p->d.next) {
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- }
|
||||
+ ngx_free(pool);
|
||||
}
|
||||
|
||||
|
||||
-void *
|
||||
-ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
+void
|
||||
+ngx_reset_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
+ ngx_pool_data_t *saved = NULL;
|
||||
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
-
|
||||
- return m;
|
||||
+ if (pool->d) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ if (d->alloc == pool->log) {
|
||||
+ saved = d;
|
||||
+ continue;
|
||||
}
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
- }
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-void *
|
||||
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
-{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
-
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = p->d.last;
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
- return m;
|
||||
+ if (n == NULL) {
|
||||
+ break;
|
||||
}
|
||||
+ }
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
+ pool->d = saved;
|
||||
}
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_malloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- u_char *m;
|
||||
- size_t psize;
|
||||
- ngx_pool_t *p, *new, *current;
|
||||
+ ngx_pool_data_t *d;
|
||||
+ void *p;
|
||||
|
||||
- psize = (size_t) (pool->d.end - (u_char *) pool);
|
||||
-
|
||||
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
|
||||
- if (m == NULL) {
|
||||
+ p = ngx_alloc(size, pool->log);
|
||||
+ if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- new = (ngx_pool_t *) m;
|
||||
-
|
||||
- new->d.end = m + psize;
|
||||
- new->d.next = NULL;
|
||||
- new->d.failed = 0;
|
||||
-
|
||||
- m += sizeof(ngx_pool_data_t);
|
||||
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
|
||||
- new->d.last = m + size;
|
||||
-
|
||||
- current = pool->current;
|
||||
-
|
||||
- for (p = current; p->d.next; p = p->d.next) {
|
||||
- if (p->d.failed++ > 4) {
|
||||
- current = p->d.next;
|
||||
- }
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
+ ngx_free(p);
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
- p->d.next = new;
|
||||
-
|
||||
- pool->current = current ? current : new;
|
||||
-
|
||||
- return m;
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
+ return p;
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- void *p;
|
||||
- ngx_uint_t n;
|
||||
- ngx_pool_large_t *large;
|
||||
-
|
||||
- p = ngx_alloc(size, pool->log);
|
||||
- if (p == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- n = 0;
|
||||
-
|
||||
- for (large = pool->large; large; large = large->next) {
|
||||
- if (large->alloc == NULL) {
|
||||
- large->alloc = p;
|
||||
- return p;
|
||||
- }
|
||||
-
|
||||
- if (n++ > 3) {
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
- ngx_free(p);
|
||||
- return NULL;
|
||||
- }
|
||||
+ return ngx_malloc(pool, size);
|
||||
+}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
|
||||
- return p;
|
||||
+void *
|
||||
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
+{
|
||||
+ return ngx_malloc(pool, size);
|
||||
}
|
||||
|
||||
|
||||
@@ -256,38 +152,48 @@ void *
|
||||
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
|
||||
{
|
||||
void *p;
|
||||
- ngx_pool_large_t *large;
|
||||
+ ngx_pool_data_t *d;
|
||||
|
||||
p = ngx_memalign(alignment, size, pool->log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
ngx_free(p);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
-
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
-ngx_pfree(ngx_pool_t *pool, void *p)
|
||||
+ngx_pfree(ngx_pool_t *pool, void *data)
|
||||
{
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *p, *d;
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (p == l->alloc) {
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p", l->alloc);
|
||||
- ngx_free(l->alloc);
|
||||
- l->alloc = NULL;
|
||||
+ p = NULL;
|
||||
+ for (d = pool->d; d; p = d, d = d->next) {
|
||||
+ if (data == d->alloc) {
|
||||
+
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
|
||||
+
|
||||
+ ngx_free(d->alloc);
|
||||
+ d->alloc = NULL;
|
||||
+
|
||||
+ if (p) {
|
||||
+ p->next = d->next;
|
||||
+
|
||||
+ } else {
|
||||
+ pool->d = d->next;
|
||||
+ }
|
||||
+
|
||||
+ ngx_free(d);
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
diff -upr nginx-1.4.1/src/core/ngx_palloc.h nginx-1.4.1-patched/src/core/ngx_palloc.h
|
||||
--- nginx-1.4.1/src/core/ngx_palloc.h 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/core/ngx_palloc.h 2013-06-10 16:12:23.720136999 -0700
|
||||
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
|
||||
};
|
||||
|
||||
|
||||
-typedef struct ngx_pool_large_s ngx_pool_large_t;
|
||||
-
|
||||
-struct ngx_pool_large_s {
|
||||
- ngx_pool_large_t *next;
|
||||
- void *alloc;
|
||||
-};
|
||||
+typedef struct ngx_pool_data_s ngx_pool_large_t;
|
||||
+typedef struct ngx_pool_data_s ngx_pool_data_t;
|
||||
|
||||
|
||||
-typedef struct {
|
||||
- u_char *last;
|
||||
- u_char *end;
|
||||
- ngx_pool_t *next;
|
||||
- ngx_uint_t failed;
|
||||
-} ngx_pool_data_t;
|
||||
+struct ngx_pool_data_s {
|
||||
+ ngx_pool_data_t *next;
|
||||
+ void *alloc;
|
||||
+};
|
||||
|
||||
|
||||
struct ngx_pool_s {
|
||||
- ngx_pool_data_t d;
|
||||
+ ngx_pool_data_t *d;
|
||||
size_t max;
|
||||
ngx_pool_t *current;
|
||||
ngx_chain_t *chain;
|
||||
- ngx_pool_large_t *large;
|
||||
ngx_pool_cleanup_t *cleanup;
|
||||
ngx_log_t *log;
|
||||
};
|
26
patches/nginx-1.4.1-server_header.patch
Normal file
26
patches/nginx-1.4.1-server_header.patch
Normal file
@ -0,0 +1,26 @@
|
||||
diff -ur lz-nginx-1.4.1/nginx-1.4.1/src/core/nginx.h lz-nginx-1.4.1-patched/nginx-1.4.1/src/core/nginx.h
|
||||
--- lz-nginx-1.4.1/nginx-1.4.1/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
|
||||
+++ lz-nginx-1.4.1-patched/nginx-1.4.1/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#define nginx_version 1004001
|
||||
#define NGINX_VERSION "1.4.1"
|
||||
-#define NGINX_VER "nginx/" NGINX_VERSION
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#define NGX_OLDPID_EXT ".oldbin"
|
||||
Only in lz-nginx-1.4.1-patched/nginx-1.4.1/src/core: nginx.h.orig
|
||||
Only in lz-nginx-1.4.1-patched/nginx-1.4.1/src/core: nginx.h.rej
|
||||
diff -ur lz-nginx-1.4.1/nginx-1.4.1/src/http/ngx_http_header_filter_module.c lz-nginx-1.4.1-patched/nginx-1.4.1/src/http/ngx_http_header_filter_module.c
|
||||
--- lz-nginx-1.4.1/nginx-1.4.1/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
|
||||
+++ lz-nginx-1.4.1-patched/nginx-1.4.1/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
|
||||
@@ -45,7 +45,7 @@
|
||||
};
|
||||
|
||||
|
||||
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
|
||||
+static char ngx_http_server_string[] = "Server: ngx_openresty" CRLF;
|
||||
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
|
||||
|
||||
|
11
patches/nginx-1.4.1-slab_alloc_no_memory_as_info.patch
Normal file
11
patches/nginx-1.4.1-slab_alloc_no_memory_as_info.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.4.1/src/core/ngx_slab.c 2012-09-24 11:34:04.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/core/ngx_slab.c 2012-12-05 20:47:07.296694952 -0800
|
||||
@@ -657,7 +657,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *po
|
||||
}
|
||||
}
|
||||
|
||||
- ngx_slab_error(pool, NGX_LOG_CRIT, "ngx_slab_alloc() failed: no memory");
|
||||
+ ngx_slab_error(pool, NGX_LOG_INFO, "ngx_slab_alloc() failed: no memory");
|
||||
|
||||
return NULL;
|
||||
}
|
41
patches/nginx-1.4.1-unix_socket_accept_over_read.patch
Normal file
41
patches/nginx-1.4.1-unix_socket_accept_over_read.patch
Normal file
@ -0,0 +1,41 @@
|
||||
--- nginx-1.4.1/src/event/ngx_event_accept.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/event/ngx_event_accept.c 2013-07-10 13:05:02.001249099 -0700
|
||||
@@ -269,17 +269,28 @@ ngx_event_accept(ngx_event_t *ev)
|
||||
#endif
|
||||
|
||||
if (ls->addr_ntop) {
|
||||
- c->addr_text.data = ngx_pnalloc(c->pool, ls->addr_text_max_len);
|
||||
- if (c->addr_text.data == NULL) {
|
||||
- ngx_close_accepted_connection(c);
|
||||
- return;
|
||||
- }
|
||||
+ if (socklen > sizeof(c->sockaddr->sa_family)) {
|
||||
+ c->addr_text.data = ngx_pnalloc(c->pool, ls->addr_text_max_len);
|
||||
+ if (c->addr_text.data == NULL) {
|
||||
+ ngx_close_accepted_connection(c);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ c->addr_text.len = ngx_sock_ntop(c->sockaddr, c->addr_text.data,
|
||||
+ ls->addr_text_max_len, 0);
|
||||
+ if (c->addr_text.len == 0) {
|
||||
+ ngx_close_accepted_connection(c);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * Linux accept/accept4 syscalls, for example, do not return
|
||||
+ * address data upon unix domain sockets
|
||||
+ */
|
||||
|
||||
- c->addr_text.len = ngx_sock_ntop(c->sockaddr, c->addr_text.data,
|
||||
- ls->addr_text_max_len, 0);
|
||||
- if (c->addr_text.len == 0) {
|
||||
- ngx_close_accepted_connection(c);
|
||||
- return;
|
||||
+ c->addr_text.data = NULL;
|
||||
+ c->addr_text.len = 0;
|
||||
}
|
||||
}
|
||||
|
40
patches/nginx-1.4.1-upstream_pipelining.patch
Normal file
40
patches/nginx-1.4.1-upstream_pipelining.patch
Normal file
@ -0,0 +1,40 @@
|
||||
diff -rudp nginx-1.4.1/src/http/ngx_http_upstream.c nginx-1.4.1-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.4.1/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
|
||||
+++ nginx-1.4.1-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
|
||||
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
|
||||
}
|
||||
|
||||
u->request_sent = 0;
|
||||
+ u->request_all_sent = 0;
|
||||
|
||||
if (rc == NGX_AGAIN) {
|
||||
ngx_add_timer(c->write, u->conf->connect_timeout);
|
||||
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
|
||||
|
||||
/* rc == NGX_OK */
|
||||
|
||||
+ u->request_all_sent = 1;
|
||||
+
|
||||
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
|
||||
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
|
||||
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
|
||||
|
||||
#endif
|
||||
|
||||
- if (u->header_sent) {
|
||||
+ if (u->request_all_sent) {
|
||||
u->write_event_handler = ngx_http_upstream_dummy_handler;
|
||||
|
||||
(void) ngx_handle_write_event(c->write, 0);
|
||||
diff -rudp nginx-1.4.1/src/http/ngx_http_upstream.h nginx-1.4.1-patched/src/http/ngx_http_upstream.h
|
||||
--- nginx-1.4.1/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
|
||||
+++ nginx-1.4.1-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
|
||||
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
|
||||
unsigned keepalive:1;
|
||||
|
||||
unsigned request_sent:1;
|
||||
+ unsigned request_all_sent:1;
|
||||
unsigned header_sent:1;
|
||||
};
|
||||
|
149
patches/nginx-1.4.1-upstream_truncation.patch
Normal file
149
patches/nginx-1.4.1-upstream_truncation.patch
Normal file
@ -0,0 +1,149 @@
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.1/src/http/modules/ngx_http_scgi_module.c nginx-1.4.1-patched/src/http/modules/ngx_http_scgi_module.c
|
||||
--- nginx-1.4.1/src/http/modules/ngx_http_scgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.4.1-patched/src/http/modules/ngx_http_scgi_module.c 2013-04-07 12:09:55.900492634 -0700
|
||||
@@ -39,6 +39,7 @@ static ngx_int_t ngx_http_scgi_process_s
|
||||
static ngx_int_t ngx_http_scgi_process_header(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_finalize_request(ngx_http_request_t *r, ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_scgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_scgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_scgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -446,6 +447,8 @@ ngx_http_scgi_handler(ngx_http_request_t
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_scgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1046,6 +1049,17 @@ ngx_http_scgi_finalize_request(ngx_http_
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_scgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_scgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.1/src/http/modules/ngx_http_uwsgi_module.c nginx-1.4.1-patched/src/http/modules/ngx_http_uwsgi_module.c
|
||||
--- nginx-1.4.1/src/http/modules/ngx_http_uwsgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.4.1-patched/src/http/modules/ngx_http_uwsgi_module.c 2013-04-07 11:58:24.546915778 -0700
|
||||
@@ -46,6 +46,7 @@ static ngx_int_t ngx_http_uwsgi_process_
|
||||
static void ngx_http_uwsgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_uwsgi_finalize_request(ngx_http_request_t *r,
|
||||
ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_uwsgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_uwsgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -479,6 +480,8 @@ ngx_http_uwsgi_handler(ngx_http_request_
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_uwsgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1086,6 +1089,17 @@ ngx_http_uwsgi_finalize_request(ngx_http
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_uwsgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.1/src/http/ngx_http_upstream.c nginx-1.4.1-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.4.1/src/http/ngx_http_upstream.c 2013-02-11 06:39:49.000000000 -0800
|
||||
+++ nginx-1.4.1-patched/src/http/ngx_http_upstream.c 2013-04-08 16:37:48.326752696 -0700
|
||||
@@ -2399,7 +2399,7 @@ ngx_http_upstream_process_non_buffered_u
|
||||
|
||||
if (c->read->timedout) {
|
||||
ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
|
||||
- ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_GATEWAY_TIME_OUT);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2446,13 +2446,20 @@ ngx_http_upstream_process_non_buffered_r
|
||||
if (u->busy_bufs == NULL) {
|
||||
|
||||
if (u->length == 0
|
||||
- || upstream->read->eof
|
||||
- || upstream->read->error)
|
||||
+ || (upstream->read->eof
|
||||
+ && u->length == -1
|
||||
+ && u->pipe
|
||||
+ && u->pipe->length <= 0))
|
||||
{
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (upstream->read->eof || upstream->read->error) {
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
b->pos = b->start;
|
||||
b->last = b->start;
|
||||
}
|
||||
@@ -2720,7 +2727,9 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
|
||||
#endif
|
||||
|
||||
- if (p->upstream_done || p->upstream_eof || p->upstream_error) {
|
||||
+ if (p->upstream_done
|
||||
+ || (p->upstream_eof && u->length == -1 && p->length <= 0))
|
||||
+ {
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"http upstream exit: %p", p->out);
|
||||
#if 0
|
||||
@@ -2729,6 +2738,14 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ if (p->upstream_eof || p->upstream_error) {
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
+ "http upstream exit: %p", p->out);
|
||||
+
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (p->downstream_error) {
|
||||
@@ -3087,9 +3104,9 @@ ngx_http_upstream_finalize_request(ngx_h
|
||||
|
||||
if (u->header_sent
|
||||
&& rc != NGX_HTTP_REQUEST_TIME_OUT
|
||||
- && (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
|
||||
+ && rc >= NGX_HTTP_SPECIAL_RESPONSE)
|
||||
{
|
||||
- rc = 0;
|
||||
+ rc = NGX_ERROR;
|
||||
}
|
||||
|
||||
if (rc == NGX_DECLINED) {
|
42
patches/nginx-1.4.2-channel-uninit-params.patch
Normal file
42
patches/nginx-1.4.2-channel-uninit-params.patch
Normal file
@ -0,0 +1,42 @@
|
||||
diff -urp nginx-1.4.2/src/os/unix/ngx_channel.c nginx-1.4.2-patched/src/os/unix/ngx_channel.c
|
||||
--- nginx-1.4.2/src/os/unix/ngx_channel.c 2012-01-18 07:07:43.000000000 -0800
|
||||
+++ nginx-1.4.2-patched/src/os/unix/ngx_channel.c 2012-09-17 11:33:09.215394217 -0700
|
||||
@@ -31,6 +31,8 @@ ngx_write_channel(ngx_socket_t s, ngx_ch
|
||||
msg.msg_controllen = 0;
|
||||
|
||||
} else {
|
||||
+ ngx_memzero(&cmsg, sizeof(cmsg));
|
||||
+
|
||||
msg.msg_control = (caddr_t) &cmsg;
|
||||
msg.msg_controllen = sizeof(cmsg);
|
||||
|
||||
diff -urp nginx-1.4.2/src/os/unix/ngx_process_cycle.c nginx-1.4.2-patched/src/os/unix/ngx_process_cycle.c
|
||||
--- nginx-1.4.2/src/os/unix/ngx_process_cycle.c 2012-07-02 09:23:14.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/os/unix/ngx_process_cycle.c 2012-09-17 11:33:09.214394215 -0700
|
||||
@@ -356,6 +356,8 @@ ngx_start_worker_processes(ngx_cycle_t *
|
||||
|
||||
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start worker processes");
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_OPEN_CHANNEL;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
@@ -463,6 +465,8 @@ ngx_signal_worker_processes(ngx_cycle_t
|
||||
ngx_err_t err;
|
||||
ngx_channel_t ch;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
#if (NGX_BROKEN_SCM_RIGHTS)
|
||||
|
||||
ch.command = 0;
|
||||
@@ -564,6 +568,8 @@ ngx_reap_children(ngx_cycle_t *cycle)
|
||||
ngx_channel_t ch;
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_CLOSE_CHANNEL;
|
||||
ch.fd = -1;
|
||||
|
13
patches/nginx-1.4.2-cve-2013-2070.patch
Normal file
13
patches/nginx-1.4.2-cve-2013-2070.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- src/http/modules/ngx_http_proxy_module.c
|
||||
+++ src/http/modules/ngx_http_proxy_module.c
|
||||
@@ -1865,6 +1865,10 @@ data:
|
||||
|
||||
}
|
||||
|
||||
+ if (ctx->size < 0 || ctx->length < 0) {
|
||||
+ goto invalid;
|
||||
+ }
|
||||
+
|
||||
return rc;
|
||||
|
||||
done:
|
1126
patches/nginx-1.4.2-dtrace.patch
Normal file
1126
patches/nginx-1.4.2-dtrace.patch
Normal file
File diff suppressed because it is too large
Load Diff
11
patches/nginx-1.4.2-gcc-maybe-uninitialized-warning.patch
Normal file
11
patches/nginx-1.4.2-gcc-maybe-uninitialized-warning.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.4.2/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
|
||||
@@ -1951,7 +1951,7 @@
|
||||
ngx_int_t rc;
|
||||
ngx_http_connection_t *hc;
|
||||
ngx_http_core_loc_conf_t *clcf;
|
||||
- ngx_http_core_srv_conf_t *cscf;
|
||||
+ ngx_http_core_srv_conf_t *cscf = NULL;
|
||||
|
||||
hc = r->http_connection;
|
||||
|
12
patches/nginx-1.4.2-invalid_referer_hash.patch
Normal file
12
patches/nginx-1.4.2-invalid_referer_hash.patch
Normal file
@ -0,0 +1,12 @@
|
||||
--- nginx-1.4.2/src/http/modules/ngx_http_referer_module.c 2013-05-06 03:27:10.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/http/modules/ngx_http_referer_module.c 2013-05-21 16:04:49.340286168 -0700
|
||||
@@ -396,8 +396,7 @@ ngx_http_valid_referers(ngx_conf_t *cf,
|
||||
|
||||
ngx_str_set(&name, "invalid_referer");
|
||||
|
||||
- var = ngx_http_add_variable(cf, &name,
|
||||
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOHASH);
|
||||
+ var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE);
|
||||
if (var == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
15
patches/nginx-1.4.2-location_if_inherits_proxy.patch
Normal file
15
patches/nginx-1.4.2-location_if_inherits_proxy.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- nginx-1.4.2/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
|
||||
+++ nginx-1.4.2-patched/src/http/modules/ngx_http_proxy_module.c 2012-06-24 12:48:57.289834450 +0800
|
||||
@@ -3023,8 +3023,10 @@
|
||||
|
||||
if (conf->upstream.upstream || conf->proxy_lengths) {
|
||||
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
||||
- if (clcf->handler == NULL && clcf->lmt_excpt) {
|
||||
- clcf->handler = ngx_http_proxy_handler;
|
||||
+ if (clcf->handler == NULL) {
|
||||
+ if (clcf->lmt_excpt) {
|
||||
+ clcf->handler = ngx_http_proxy_handler;
|
||||
+ }
|
||||
conf->location = prev->location;
|
||||
}
|
||||
}
|
115
patches/nginx-1.4.2-log_escape_non_ascii.patch
Normal file
115
patches/nginx-1.4.2-log_escape_non_ascii.patch
Normal file
@ -0,0 +1,115 @@
|
||||
--- nginx-1.4.2/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
|
||||
+++ nginx-1.4.2-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
|
||||
@@ -61,6 +61,8 @@
|
||||
time_t open_file_cache_valid;
|
||||
ngx_uint_t open_file_cache_min_uses;
|
||||
|
||||
+ ngx_flag_t escape_non_ascii;
|
||||
+
|
||||
ngx_uint_t off; /* unsigned off:1 */
|
||||
} ngx_http_log_loc_conf_t;
|
||||
|
||||
@@ -104,7 +106,8 @@
|
||||
uintptr_t data);
|
||||
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
|
||||
ngx_http_log_op_t *op);
|
||||
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
|
||||
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
|
||||
+ u_char *src, size_t size);
|
||||
|
||||
|
||||
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
|
||||
@@ -146,6 +149,13 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("log_escape_non_ascii"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
||||
+ ngx_conf_set_flag_slot,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
|
||||
+ NULL },
|
||||
+
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
@@ -637,6 +647,7 @@
|
||||
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
|
||||
{
|
||||
uintptr_t len;
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, data);
|
||||
@@ -645,7 +656,9 @@
|
||||
return 1;
|
||||
}
|
||||
|
||||
- len = ngx_http_log_escape(NULL, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+
|
||||
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
|
||||
|
||||
value->escape = len ? 1 : 0;
|
||||
|
||||
@@ -656,6 +669,7 @@
|
||||
static u_char *
|
||||
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
|
||||
{
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, op->data);
|
||||
@@ -669,16 +683,18 @@
|
||||
return ngx_cpymem(buf, value->data, value->len);
|
||||
|
||||
} else {
|
||||
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uintptr_t
|
||||
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
|
||||
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
|
||||
+ size_t size)
|
||||
{
|
||||
- ngx_uint_t n;
|
||||
- static u_char hex[] = "0123456789ABCDEF";
|
||||
+ ngx_uint_t n;
|
||||
+ static u_char hex[] = "0123456789ABCDEF";
|
||||
|
||||
static uint32_t escape[] = {
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
@@ -698,6 +714,12 @@
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
};
|
||||
|
||||
+ if (lcf->escape_non_ascii) {
|
||||
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
|
||||
+
|
||||
+ } else {
|
||||
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
|
||||
+ }
|
||||
|
||||
if (dst == NULL) {
|
||||
|
||||
@@ -781,6 +803,7 @@
|
||||
}
|
||||
|
||||
conf->open_file_cache = NGX_CONF_UNSET_PTR;
|
||||
+ conf->escape_non_ascii = NGX_CONF_UNSET;
|
||||
|
||||
return conf;
|
||||
}
|
||||
@@ -796,6 +819,8 @@
|
||||
ngx_http_log_fmt_t *fmt;
|
||||
ngx_http_log_main_conf_t *lmcf;
|
||||
|
||||
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
|
||||
+
|
||||
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
|
||||
|
||||
conf->open_file_cache = prev->open_file_cache;
|
24
patches/nginx-1.4.2-no_Werror.patch
Normal file
24
patches/nginx-1.4.2-no_Werror.patch
Normal file
@ -0,0 +1,24 @@
|
||||
diff -ur nginx-1.4.2/auto/cc/gcc nginx-1.4.2-patched/auto/cc/gcc
|
||||
--- nginx-1.4.2/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
|
||||
+++ nginx-1.4.2-patched/auto/cc/gcc 2011-06-27 19:53:13.837741087 +0800
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
||||
diff -ur nginx-1.4.2/auto/cc/icc nginx-1.4.2-patched/auto/cc/icc
|
||||
--- nginx-1.4.2/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
|
||||
+++ nginx-1.4.2-patched/auto/cc/icc 2011-06-27 19:53:19.508916811 +0800
|
||||
@@ -139,7 +139,7 @@
|
||||
esac
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
90
patches/nginx-1.4.2-no_error_pages.patch
Normal file
90
patches/nginx-1.4.2-no_error_pages.patch
Normal file
@ -0,0 +1,90 @@
|
||||
--- nginx-1.4.2/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
|
||||
+++ nginx-1.4.2-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
|
||||
@@ -57,6 +57,8 @@
|
||||
void *conf);
|
||||
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
+ void *conf);
|
||||
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
@@ -614,6 +616,14 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("no_error_pages"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|
||||
+ |NGX_CONF_NOARGS,
|
||||
+ ngx_http_core_no_error_pages,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ 0,
|
||||
+ NULL },
|
||||
+
|
||||
{ ngx_string("try_files"),
|
||||
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
|
||||
ngx_http_core_try_files,
|
||||
@@ -3052,7 +3062,6 @@
|
||||
* clcf->types = NULL;
|
||||
* clcf->default_type = { 0, NULL };
|
||||
* clcf->error_log = NULL;
|
||||
- * clcf->error_pages = NULL;
|
||||
* clcf->try_files = NULL;
|
||||
* clcf->client_body_path = NULL;
|
||||
* clcf->regex = NULL;
|
||||
@@ -3062,6 +3071,7 @@
|
||||
* clcf->gzip_proxied = 0;
|
||||
*/
|
||||
|
||||
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
|
||||
clcf->client_max_body_size = NGX_CONF_UNSET;
|
||||
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
|
||||
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
|
||||
@@ -3250,9 +3260,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (conf->error_pages == NULL && prev->error_pages) {
|
||||
- conf->error_pages = prev->error_pages;
|
||||
- }
|
||||
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
|
||||
|
||||
ngx_conf_merge_str_value(conf->default_type,
|
||||
prev->default_type, "text/plain");
|
||||
@@ -3988,6 +3996,10 @@
|
||||
ngx_http_compile_complex_value_t ccv;
|
||||
|
||||
if (clcf->error_pages == NULL) {
|
||||
+ return "conflicts with \"no_error_pages\"";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
|
||||
clcf->error_pages = ngx_array_create(cf->pool, 4,
|
||||
sizeof(ngx_http_err_page_t));
|
||||
if (clcf->error_pages == NULL) {
|
||||
@@ -4095,6 +4107,25 @@
|
||||
|
||||
|
||||
static char *
|
||||
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
+{
|
||||
+ ngx_http_core_loc_conf_t *clcf = conf;
|
||||
+
|
||||
+ if (clcf->error_pages == NULL) {
|
||||
+ return "is duplicate";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
|
||||
+ return "conflicts with \"error_page\"";
|
||||
+ }
|
||||
+
|
||||
+ clcf->error_pages = NULL;
|
||||
+
|
||||
+ return NGX_CONF_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static char *
|
||||
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
ngx_http_core_loc_conf_t *clcf = conf;
|
607
patches/nginx-1.4.2-no_pool.patch
Normal file
607
patches/nginx-1.4.2-no_pool.patch
Normal file
@ -0,0 +1,607 @@
|
||||
diff -upr nginx-1.4.2/src/core/nginx.h nginx-1.4.2-patched/src/core/nginx.h
|
||||
--- nginx-1.4.2/src/core/nginx.h 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/core/nginx.h 2013-06-10 16:12:23.691136795 -0700
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
#define nginx_version 1004002
|
||||
#define NGINX_VERSION "1.4.2"
|
||||
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
Only in nginx-1.4.2-patched/src/core: nginx.h.orig
|
||||
Only in nginx-1.4.2-patched/src/core: nginx.h.rej
|
||||
diff -upr nginx-1.4.2/src/core/ngx_array.c nginx-1.4.2-patched/src/core/ngx_array.c
|
||||
--- nginx-1.4.2/src/core/ngx_array.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/core/ngx_array.c 2013-06-10 16:12:23.692136802 -0700
|
||||
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
|
||||
void
|
||||
ngx_array_destroy(ngx_array_t *a)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
|
||||
- p->d.last -= a->size * a->nalloc;
|
||||
+ if (a->elts) {
|
||||
+ ngx_pfree(p, a->elts);
|
||||
}
|
||||
|
||||
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
|
||||
- p->d.last = (u_char *) a;
|
||||
+ for (link = a->old_elts; link; link = link->next) {
|
||||
+ ngx_pfree(p, link->elts);
|
||||
}
|
||||
+
|
||||
+ ngx_pfree(p, a);
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
ngx_array_push(ngx_array_t *a)
|
||||
{
|
||||
- void *elt, *new;
|
||||
- size_t size;
|
||||
- ngx_pool_t *p;
|
||||
+ void *elt, *new;
|
||||
+ size_t size;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts == a->nalloc) {
|
||||
|
||||
@@ -59,29 +63,27 @@ ngx_array_push(ngx_array_t *a)
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + size == p->d.last
|
||||
- && p->d.last + a->size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += a->size;
|
||||
- a->nalloc++;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- new = ngx_palloc(p, 2 * size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, size);
|
||||
- a->elts = new;
|
||||
- a->nalloc *= 2;
|
||||
+ /* allocate a new array */
|
||||
+
|
||||
+ new = ngx_palloc(p, 2 * size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc *= 2;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
@@ -95,11 +97,10 @@ void *
|
||||
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
|
||||
{
|
||||
void *elt, *new;
|
||||
- size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *p;
|
||||
|
||||
- size = n * a->size;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts + n > a->nalloc) {
|
||||
|
||||
@@ -107,31 +108,27 @@ ngx_array_push_n(ngx_array_t *a, ngx_uin
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
|
||||
- && p->d.last + size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += size;
|
||||
- a->nalloc += n;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
-
|
||||
- new = ngx_palloc(p, nalloc * a->size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
- a->elts = new;
|
||||
- a->nalloc = nalloc;
|
||||
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
+
|
||||
+ new = ngx_palloc(p, nalloc * a->size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc = nalloc;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
Only in nginx-1.4.2-patched/src/core: ngx_array.c.orig
|
||||
Only in nginx-1.4.2-patched/src/core: ngx_array.c.rej
|
||||
diff -upr nginx-1.4.2/src/core/ngx_array.h nginx-1.4.2-patched/src/core/ngx_array.h
|
||||
--- nginx-1.4.2/src/core/ngx_array.h 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/core/ngx_array.h 2013-06-10 16:15:08.314275482 -0700
|
||||
@@ -13,12 +13,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
+typedef struct ngx_array_link_s ngx_array_link_t;
|
||||
+
|
||||
+
|
||||
+struct ngx_array_link_s {
|
||||
+ void *elts;
|
||||
+ ngx_array_link_t *next;
|
||||
+};
|
||||
+
|
||||
+
|
||||
typedef struct {
|
||||
void *elts;
|
||||
ngx_uint_t nelts;
|
||||
size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *pool;
|
||||
+
|
||||
+ ngx_array_link_t *old_elts;
|
||||
} ngx_array_t;
|
||||
|
||||
|
||||
@@ -40,6 +51,7 @@ ngx_array_init(ngx_array_t *array, ngx_p
|
||||
array->size = size;
|
||||
array->nalloc = n;
|
||||
array->pool = pool;
|
||||
+ array->old_elts = NULL;
|
||||
|
||||
array->elts = ngx_palloc(pool, n * size);
|
||||
if (array->elts == NULL) {
|
||||
Only in nginx-1.4.2-patched/src/core: ngx_array.h.orig
|
||||
Only in nginx-1.4.2-patched/src/core: ngx_array.h.rej
|
||||
diff -upr nginx-1.4.2/src/core/ngx_palloc.c nginx-1.4.2-patched/src/core/ngx_palloc.c
|
||||
--- nginx-1.4.2/src/core/ngx_palloc.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/core/ngx_palloc.c 2013-06-10 16:12:23.718136984 -0700
|
||||
@@ -9,32 +9,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
|
||||
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
|
||||
-
|
||||
-
|
||||
ngx_pool_t *
|
||||
ngx_create_pool(size_t size, ngx_log_t *log)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
|
||||
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
|
||||
+ size = sizeof(ngx_pool_t);
|
||||
+ p = ngx_alloc(size, log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- p->d.end = (u_char *) p + size;
|
||||
- p->d.next = NULL;
|
||||
- p->d.failed = 0;
|
||||
+ ngx_memzero(p, size);
|
||||
|
||||
size = size - sizeof(ngx_pool_t);
|
||||
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
|
||||
|
||||
p->current = p;
|
||||
- p->chain = NULL;
|
||||
- p->large = NULL;
|
||||
- p->cleanup = NULL;
|
||||
p->log = log;
|
||||
|
||||
return p;
|
||||
@@ -44,8 +35,7 @@ ngx_create_pool(size_t size, ngx_log_t *
|
||||
void
|
||||
ngx_destroy_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- ngx_pool_t *p, *n;
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
ngx_pool_cleanup_t *c;
|
||||
|
||||
for (c = pool->cleanup; c; c = c->next) {
|
||||
@@ -56,13 +46,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
|
||||
}
|
||||
}
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
-
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
|
||||
-
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
+ if (pool->d == NULL) {
|
||||
+ ngx_free(pool);
|
||||
+ return;
|
||||
}
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
@@ -72,9 +58,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
|
||||
* so we cannot use this log while free()ing the pool
|
||||
*/
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
|
||||
+ "free: %p, unused: %d", d, 0);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
@@ -83,172 +69,82 @@ ngx_destroy_pool(ngx_pool_t *pool)
|
||||
|
||||
#endif
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
- ngx_free(p);
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
-}
|
||||
|
||||
+ pool->d = NULL;
|
||||
|
||||
-void
|
||||
-ngx_reset_pool(ngx_pool_t *pool)
|
||||
-{
|
||||
- ngx_pool_t *p;
|
||||
- ngx_pool_large_t *l;
|
||||
-
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- pool->large = NULL;
|
||||
-
|
||||
- for (p = pool; p; p = p->d.next) {
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- }
|
||||
+ ngx_free(pool);
|
||||
}
|
||||
|
||||
|
||||
-void *
|
||||
-ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
+void
|
||||
+ngx_reset_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
+ ngx_pool_data_t *saved = NULL;
|
||||
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
-
|
||||
- return m;
|
||||
+ if (pool->d) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ if (d->alloc == pool->log) {
|
||||
+ saved = d;
|
||||
+ continue;
|
||||
}
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
- }
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-void *
|
||||
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
-{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
-
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = p->d.last;
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
- return m;
|
||||
+ if (n == NULL) {
|
||||
+ break;
|
||||
}
|
||||
+ }
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
+ pool->d = saved;
|
||||
}
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_malloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- u_char *m;
|
||||
- size_t psize;
|
||||
- ngx_pool_t *p, *new, *current;
|
||||
+ ngx_pool_data_t *d;
|
||||
+ void *p;
|
||||
|
||||
- psize = (size_t) (pool->d.end - (u_char *) pool);
|
||||
-
|
||||
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
|
||||
- if (m == NULL) {
|
||||
+ p = ngx_alloc(size, pool->log);
|
||||
+ if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- new = (ngx_pool_t *) m;
|
||||
-
|
||||
- new->d.end = m + psize;
|
||||
- new->d.next = NULL;
|
||||
- new->d.failed = 0;
|
||||
-
|
||||
- m += sizeof(ngx_pool_data_t);
|
||||
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
|
||||
- new->d.last = m + size;
|
||||
-
|
||||
- current = pool->current;
|
||||
-
|
||||
- for (p = current; p->d.next; p = p->d.next) {
|
||||
- if (p->d.failed++ > 4) {
|
||||
- current = p->d.next;
|
||||
- }
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
+ ngx_free(p);
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
- p->d.next = new;
|
||||
-
|
||||
- pool->current = current ? current : new;
|
||||
-
|
||||
- return m;
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
+ return p;
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- void *p;
|
||||
- ngx_uint_t n;
|
||||
- ngx_pool_large_t *large;
|
||||
-
|
||||
- p = ngx_alloc(size, pool->log);
|
||||
- if (p == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- n = 0;
|
||||
-
|
||||
- for (large = pool->large; large; large = large->next) {
|
||||
- if (large->alloc == NULL) {
|
||||
- large->alloc = p;
|
||||
- return p;
|
||||
- }
|
||||
-
|
||||
- if (n++ > 3) {
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
- ngx_free(p);
|
||||
- return NULL;
|
||||
- }
|
||||
+ return ngx_malloc(pool, size);
|
||||
+}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
|
||||
- return p;
|
||||
+void *
|
||||
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
+{
|
||||
+ return ngx_malloc(pool, size);
|
||||
}
|
||||
|
||||
|
||||
@@ -256,38 +152,48 @@ void *
|
||||
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
|
||||
{
|
||||
void *p;
|
||||
- ngx_pool_large_t *large;
|
||||
+ ngx_pool_data_t *d;
|
||||
|
||||
p = ngx_memalign(alignment, size, pool->log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
ngx_free(p);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
-
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
-ngx_pfree(ngx_pool_t *pool, void *p)
|
||||
+ngx_pfree(ngx_pool_t *pool, void *data)
|
||||
{
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *p, *d;
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (p == l->alloc) {
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p", l->alloc);
|
||||
- ngx_free(l->alloc);
|
||||
- l->alloc = NULL;
|
||||
+ p = NULL;
|
||||
+ for (d = pool->d; d; p = d, d = d->next) {
|
||||
+ if (data == d->alloc) {
|
||||
+
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
|
||||
+
|
||||
+ ngx_free(d->alloc);
|
||||
+ d->alloc = NULL;
|
||||
+
|
||||
+ if (p) {
|
||||
+ p->next = d->next;
|
||||
+
|
||||
+ } else {
|
||||
+ pool->d = d->next;
|
||||
+ }
|
||||
+
|
||||
+ ngx_free(d);
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
diff -upr nginx-1.4.2/src/core/ngx_palloc.h nginx-1.4.2-patched/src/core/ngx_palloc.h
|
||||
--- nginx-1.4.2/src/core/ngx_palloc.h 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/core/ngx_palloc.h 2013-06-10 16:12:23.720136999 -0700
|
||||
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
|
||||
};
|
||||
|
||||
|
||||
-typedef struct ngx_pool_large_s ngx_pool_large_t;
|
||||
-
|
||||
-struct ngx_pool_large_s {
|
||||
- ngx_pool_large_t *next;
|
||||
- void *alloc;
|
||||
-};
|
||||
+typedef struct ngx_pool_data_s ngx_pool_large_t;
|
||||
+typedef struct ngx_pool_data_s ngx_pool_data_t;
|
||||
|
||||
|
||||
-typedef struct {
|
||||
- u_char *last;
|
||||
- u_char *end;
|
||||
- ngx_pool_t *next;
|
||||
- ngx_uint_t failed;
|
||||
-} ngx_pool_data_t;
|
||||
+struct ngx_pool_data_s {
|
||||
+ ngx_pool_data_t *next;
|
||||
+ void *alloc;
|
||||
+};
|
||||
|
||||
|
||||
struct ngx_pool_s {
|
||||
- ngx_pool_data_t d;
|
||||
+ ngx_pool_data_t *d;
|
||||
size_t max;
|
||||
ngx_pool_t *current;
|
||||
ngx_chain_t *chain;
|
||||
- ngx_pool_large_t *large;
|
||||
ngx_pool_cleanup_t *cleanup;
|
||||
ngx_log_t *log;
|
||||
};
|
26
patches/nginx-1.4.2-server_header.patch
Normal file
26
patches/nginx-1.4.2-server_header.patch
Normal file
@ -0,0 +1,26 @@
|
||||
diff -ur lz-nginx-1.4.2/nginx-1.4.2/src/core/nginx.h lz-nginx-1.4.2-patched/nginx-1.4.2/src/core/nginx.h
|
||||
--- lz-nginx-1.4.2/nginx-1.4.2/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
|
||||
+++ lz-nginx-1.4.2-patched/nginx-1.4.2/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#define nginx_version 1004002
|
||||
#define NGINX_VERSION "1.4.2"
|
||||
-#define NGINX_VER "nginx/" NGINX_VERSION
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#define NGX_OLDPID_EXT ".oldbin"
|
||||
Only in lz-nginx-1.4.2-patched/nginx-1.4.2/src/core: nginx.h.orig
|
||||
Only in lz-nginx-1.4.2-patched/nginx-1.4.2/src/core: nginx.h.rej
|
||||
diff -ur lz-nginx-1.4.2/nginx-1.4.2/src/http/ngx_http_header_filter_module.c lz-nginx-1.4.2-patched/nginx-1.4.2/src/http/ngx_http_header_filter_module.c
|
||||
--- lz-nginx-1.4.2/nginx-1.4.2/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
|
||||
+++ lz-nginx-1.4.2-patched/nginx-1.4.2/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
|
||||
@@ -45,7 +45,7 @@
|
||||
};
|
||||
|
||||
|
||||
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
|
||||
+static char ngx_http_server_string[] = "Server: ngx_openresty" CRLF;
|
||||
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
|
||||
|
||||
|
11
patches/nginx-1.4.2-slab_alloc_no_memory_as_info.patch
Normal file
11
patches/nginx-1.4.2-slab_alloc_no_memory_as_info.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.4.2/src/core/ngx_slab.c 2012-09-24 11:34:04.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/core/ngx_slab.c 2012-12-05 20:47:07.296694952 -0800
|
||||
@@ -657,7 +657,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *po
|
||||
}
|
||||
}
|
||||
|
||||
- ngx_slab_error(pool, NGX_LOG_CRIT, "ngx_slab_alloc() failed: no memory");
|
||||
+ ngx_slab_error(pool, NGX_LOG_INFO, "ngx_slab_alloc() failed: no memory");
|
||||
|
||||
return NULL;
|
||||
}
|
41
patches/nginx-1.4.2-unix_socket_accept_over_read.patch
Normal file
41
patches/nginx-1.4.2-unix_socket_accept_over_read.patch
Normal file
@ -0,0 +1,41 @@
|
||||
--- nginx-1.4.2/src/event/ngx_event_accept.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/event/ngx_event_accept.c 2013-07-10 13:05:02.001249099 -0700
|
||||
@@ -269,17 +269,28 @@ ngx_event_accept(ngx_event_t *ev)
|
||||
#endif
|
||||
|
||||
if (ls->addr_ntop) {
|
||||
- c->addr_text.data = ngx_pnalloc(c->pool, ls->addr_text_max_len);
|
||||
- if (c->addr_text.data == NULL) {
|
||||
- ngx_close_accepted_connection(c);
|
||||
- return;
|
||||
- }
|
||||
+ if (socklen > sizeof(c->sockaddr->sa_family)) {
|
||||
+ c->addr_text.data = ngx_pnalloc(c->pool, ls->addr_text_max_len);
|
||||
+ if (c->addr_text.data == NULL) {
|
||||
+ ngx_close_accepted_connection(c);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ c->addr_text.len = ngx_sock_ntop(c->sockaddr, c->addr_text.data,
|
||||
+ ls->addr_text_max_len, 0);
|
||||
+ if (c->addr_text.len == 0) {
|
||||
+ ngx_close_accepted_connection(c);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * Linux accept/accept4 syscalls, for example, do not return
|
||||
+ * address data upon unix domain sockets
|
||||
+ */
|
||||
|
||||
- c->addr_text.len = ngx_sock_ntop(c->sockaddr, c->addr_text.data,
|
||||
- ls->addr_text_max_len, 0);
|
||||
- if (c->addr_text.len == 0) {
|
||||
- ngx_close_accepted_connection(c);
|
||||
- return;
|
||||
+ c->addr_text.data = NULL;
|
||||
+ c->addr_text.len = 0;
|
||||
}
|
||||
}
|
||||
|
40
patches/nginx-1.4.2-upstream_pipelining.patch
Normal file
40
patches/nginx-1.4.2-upstream_pipelining.patch
Normal file
@ -0,0 +1,40 @@
|
||||
diff -rudp nginx-1.4.2/src/http/ngx_http_upstream.c nginx-1.4.2-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.4.2/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
|
||||
+++ nginx-1.4.2-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
|
||||
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
|
||||
}
|
||||
|
||||
u->request_sent = 0;
|
||||
+ u->request_all_sent = 0;
|
||||
|
||||
if (rc == NGX_AGAIN) {
|
||||
ngx_add_timer(c->write, u->conf->connect_timeout);
|
||||
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
|
||||
|
||||
/* rc == NGX_OK */
|
||||
|
||||
+ u->request_all_sent = 1;
|
||||
+
|
||||
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
|
||||
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
|
||||
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
|
||||
|
||||
#endif
|
||||
|
||||
- if (u->header_sent) {
|
||||
+ if (u->request_all_sent) {
|
||||
u->write_event_handler = ngx_http_upstream_dummy_handler;
|
||||
|
||||
(void) ngx_handle_write_event(c->write, 0);
|
||||
diff -rudp nginx-1.4.2/src/http/ngx_http_upstream.h nginx-1.4.2-patched/src/http/ngx_http_upstream.h
|
||||
--- nginx-1.4.2/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
|
||||
+++ nginx-1.4.2-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
|
||||
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
|
||||
unsigned keepalive:1;
|
||||
|
||||
unsigned request_sent:1;
|
||||
+ unsigned request_all_sent:1;
|
||||
unsigned header_sent:1;
|
||||
};
|
||||
|
149
patches/nginx-1.4.2-upstream_truncation.patch
Normal file
149
patches/nginx-1.4.2-upstream_truncation.patch
Normal file
@ -0,0 +1,149 @@
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.2/src/http/modules/ngx_http_scgi_module.c nginx-1.4.2-patched/src/http/modules/ngx_http_scgi_module.c
|
||||
--- nginx-1.4.2/src/http/modules/ngx_http_scgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.4.2-patched/src/http/modules/ngx_http_scgi_module.c 2013-04-07 12:09:55.900492634 -0700
|
||||
@@ -39,6 +39,7 @@ static ngx_int_t ngx_http_scgi_process_s
|
||||
static ngx_int_t ngx_http_scgi_process_header(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_finalize_request(ngx_http_request_t *r, ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_scgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_scgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_scgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -446,6 +447,8 @@ ngx_http_scgi_handler(ngx_http_request_t
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_scgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1046,6 +1049,17 @@ ngx_http_scgi_finalize_request(ngx_http_
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_scgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_scgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.2/src/http/modules/ngx_http_uwsgi_module.c nginx-1.4.2-patched/src/http/modules/ngx_http_uwsgi_module.c
|
||||
--- nginx-1.4.2/src/http/modules/ngx_http_uwsgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.4.2-patched/src/http/modules/ngx_http_uwsgi_module.c 2013-04-07 11:58:24.546915778 -0700
|
||||
@@ -46,6 +46,7 @@ static ngx_int_t ngx_http_uwsgi_process_
|
||||
static void ngx_http_uwsgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_uwsgi_finalize_request(ngx_http_request_t *r,
|
||||
ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_uwsgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_uwsgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -479,6 +480,8 @@ ngx_http_uwsgi_handler(ngx_http_request_
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_uwsgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1086,6 +1089,17 @@ ngx_http_uwsgi_finalize_request(ngx_http
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_uwsgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.2/src/http/ngx_http_upstream.c nginx-1.4.2-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.4.2/src/http/ngx_http_upstream.c 2013-02-11 06:39:49.000000000 -0800
|
||||
+++ nginx-1.4.2-patched/src/http/ngx_http_upstream.c 2013-04-08 16:37:48.326752696 -0700
|
||||
@@ -2399,7 +2399,7 @@ ngx_http_upstream_process_non_buffered_u
|
||||
|
||||
if (c->read->timedout) {
|
||||
ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
|
||||
- ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_GATEWAY_TIME_OUT);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2446,13 +2446,20 @@ ngx_http_upstream_process_non_buffered_r
|
||||
if (u->busy_bufs == NULL) {
|
||||
|
||||
if (u->length == 0
|
||||
- || upstream->read->eof
|
||||
- || upstream->read->error)
|
||||
+ || (upstream->read->eof
|
||||
+ && u->length == -1
|
||||
+ && u->pipe
|
||||
+ && u->pipe->length <= 0))
|
||||
{
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (upstream->read->eof || upstream->read->error) {
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
b->pos = b->start;
|
||||
b->last = b->start;
|
||||
}
|
||||
@@ -2720,7 +2727,9 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
|
||||
#endif
|
||||
|
||||
- if (p->upstream_done || p->upstream_eof || p->upstream_error) {
|
||||
+ if (p->upstream_done
|
||||
+ || (p->upstream_eof && u->length == -1 && p->length <= 0))
|
||||
+ {
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"http upstream exit: %p", p->out);
|
||||
#if 0
|
||||
@@ -2729,6 +2738,14 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ if (p->upstream_eof || p->upstream_error) {
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
+ "http upstream exit: %p", p->out);
|
||||
+
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (p->downstream_error) {
|
||||
@@ -3087,9 +3104,9 @@ ngx_http_upstream_finalize_request(ngx_h
|
||||
|
||||
if (u->header_sent
|
||||
&& rc != NGX_HTTP_REQUEST_TIME_OUT
|
||||
- && (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
|
||||
+ && rc >= NGX_HTTP_SPECIAL_RESPONSE)
|
||||
{
|
||||
- rc = 0;
|
||||
+ rc = NGX_ERROR;
|
||||
}
|
||||
|
||||
if (rc == NGX_DECLINED) {
|
22
patches/nginx-1.4.3-cache_lock_hang_in_subreq.patch
Normal file
22
patches/nginx-1.4.3-cache_lock_hang_in_subreq.patch
Normal file
@ -0,0 +1,22 @@
|
||||
--- nginx-1.4.3/src/http/ngx_http_file_cache.c 2013-10-08 05:07:14.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/http/ngx_http_file_cache.c 2013-10-26 14:47:56.184041728 -0700
|
||||
@@ -432,6 +432,7 @@ ngx_http_file_cache_lock_wait_handler(ng
|
||||
ngx_uint_t wait;
|
||||
ngx_msec_t timer;
|
||||
ngx_http_cache_t *c;
|
||||
+ ngx_connection_t *conn;
|
||||
ngx_http_request_t *r;
|
||||
ngx_http_file_cache_t *cache;
|
||||
|
||||
@@ -471,7 +472,10 @@ wakeup:
|
||||
|
||||
c->waiting = 0;
|
||||
r->main->blocked--;
|
||||
- r->connection->write->handler(r->connection->write);
|
||||
+
|
||||
+ conn = r->connection;
|
||||
+ r->write_event_handler(r);
|
||||
+ ngx_http_run_posted_requests(conn);
|
||||
}
|
||||
|
||||
|
19
patches/nginx-1.4.3-cache_manager_exit.patch
Normal file
19
patches/nginx-1.4.3-cache_manager_exit.patch
Normal file
@ -0,0 +1,19 @@
|
||||
# HG changeset patch
|
||||
# User Yichun Zhang <agentzh@gmail.com>
|
||||
# Date 1383598130 28800
|
||||
# Node ID f64218e1ac963337d84092536f588b8e0d99bbaa
|
||||
# Parent dea321e5c0216efccbb23e84bbce7cf3e28f130c
|
||||
Cache: gracefully exit the cache manager process.
|
||||
|
||||
diff -r dea321e5c021 -r f64218e1ac96 src/os/unix/ngx_process_cycle.c
|
||||
--- a/src/os/unix/ngx_process_cycle.c Thu Oct 31 18:23:49 2013 +0400
|
||||
+++ b/src/os/unix/ngx_process_cycle.c Mon Nov 04 12:48:50 2013 -0800
|
||||
@@ -1335,7 +1335,7 @@
|
||||
|
||||
if (ngx_terminate || ngx_quit) {
|
||||
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "exiting");
|
||||
- exit(0);
|
||||
+ ngx_worker_process_exit(cycle);
|
||||
}
|
||||
|
||||
if (ngx_reopen) {
|
42
patches/nginx-1.4.3-channel-uninit-params.patch
Normal file
42
patches/nginx-1.4.3-channel-uninit-params.patch
Normal file
@ -0,0 +1,42 @@
|
||||
diff -urp nginx-1.4.3/src/os/unix/ngx_channel.c nginx-1.4.3-patched/src/os/unix/ngx_channel.c
|
||||
--- nginx-1.4.3/src/os/unix/ngx_channel.c 2012-01-18 07:07:43.000000000 -0800
|
||||
+++ nginx-1.4.3-patched/src/os/unix/ngx_channel.c 2012-09-17 11:33:09.215394217 -0700
|
||||
@@ -31,6 +31,8 @@ ngx_write_channel(ngx_socket_t s, ngx_ch
|
||||
msg.msg_controllen = 0;
|
||||
|
||||
} else {
|
||||
+ ngx_memzero(&cmsg, sizeof(cmsg));
|
||||
+
|
||||
msg.msg_control = (caddr_t) &cmsg;
|
||||
msg.msg_controllen = sizeof(cmsg);
|
||||
|
||||
diff -urp nginx-1.4.3/src/os/unix/ngx_process_cycle.c nginx-1.4.3-patched/src/os/unix/ngx_process_cycle.c
|
||||
--- nginx-1.4.3/src/os/unix/ngx_process_cycle.c 2012-07-02 09:23:14.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/os/unix/ngx_process_cycle.c 2012-09-17 11:33:09.214394215 -0700
|
||||
@@ -356,6 +356,8 @@ ngx_start_worker_processes(ngx_cycle_t *
|
||||
|
||||
ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start worker processes");
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_OPEN_CHANNEL;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
@@ -463,6 +465,8 @@ ngx_signal_worker_processes(ngx_cycle_t
|
||||
ngx_err_t err;
|
||||
ngx_channel_t ch;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
#if (NGX_BROKEN_SCM_RIGHTS)
|
||||
|
||||
ch.command = 0;
|
||||
@@ -564,6 +568,8 @@ ngx_reap_children(ngx_cycle_t *cycle)
|
||||
ngx_channel_t ch;
|
||||
ngx_core_conf_t *ccf;
|
||||
|
||||
+ ngx_memzero(&ch, sizeof(ngx_channel_t));
|
||||
+
|
||||
ch.command = NGX_CMD_CLOSE_CHANNEL;
|
||||
ch.fd = -1;
|
||||
|
13
patches/nginx-1.4.3-cve-2013-2070.patch
Normal file
13
patches/nginx-1.4.3-cve-2013-2070.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- src/http/modules/ngx_http_proxy_module.c
|
||||
+++ src/http/modules/ngx_http_proxy_module.c
|
||||
@@ -1865,6 +1865,10 @@ data:
|
||||
|
||||
}
|
||||
|
||||
+ if (ctx->size < 0 || ctx->length < 0) {
|
||||
+ goto invalid;
|
||||
+ }
|
||||
+
|
||||
return rc;
|
||||
|
||||
done:
|
1126
patches/nginx-1.4.3-dtrace.patch
Normal file
1126
patches/nginx-1.4.3-dtrace.patch
Normal file
File diff suppressed because it is too large
Load Diff
11
patches/nginx-1.4.3-gcc-maybe-uninitialized-warning.patch
Normal file
11
patches/nginx-1.4.3-gcc-maybe-uninitialized-warning.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.4.3/src/http/ngx_http_request.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/http/ngx_http_request.c 2013-06-11 12:59:48.008321688 -0700
|
||||
@@ -1951,7 +1951,7 @@
|
||||
ngx_int_t rc;
|
||||
ngx_http_connection_t *hc;
|
||||
ngx_http_core_loc_conf_t *clcf;
|
||||
- ngx_http_core_srv_conf_t *cscf;
|
||||
+ ngx_http_core_srv_conf_t *cscf = NULL;
|
||||
|
||||
hc = r->http_connection;
|
||||
|
42
patches/nginx-1.4.3-gzip_buffered_bug.patch
Normal file
42
patches/nginx-1.4.3-gzip_buffered_bug.patch
Normal file
@ -0,0 +1,42 @@
|
||||
|
||||
# HG changeset patch
|
||||
# User Maxim Dounin <mdounin@mdounin.ru>
|
||||
# Date 1374749732 -14400
|
||||
# Node ID 84155a389bcc249138e18546134cfbff1931013b
|
||||
# Parent 355779f81491a78f3fe79e4a1eb5036c3882b441
|
||||
Gzip: clearing of c->buffered if all data are flushed.
|
||||
|
||||
This allows to finalize unfinished responses while still sending as
|
||||
much data as available.
|
||||
|
||||
diff -r 355779f81491 -r 84155a389bcc src/http/modules/ngx_http_gzip_filter_module.c
|
||||
--- a/src/http/modules/ngx_http_gzip_filter_module.c Thu Jul 25 14:55:09 2013 +0400
|
||||
+++ b/src/http/modules/ngx_http_gzip_filter_module.c Thu Jul 25 14:55:32 2013 +0400
|
||||
@@ -368,6 +368,8 @@
|
||||
if (ngx_chain_add_copy(r->pool, &ctx->in, in) != NGX_OK) {
|
||||
goto failed;
|
||||
}
|
||||
+
|
||||
+ r->connection->buffered |= NGX_HTTP_GZIP_BUFFERED;
|
||||
}
|
||||
|
||||
if (ctx->nomem) {
|
||||
@@ -620,8 +622,6 @@
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
- r->connection->buffered |= NGX_HTTP_GZIP_BUFFERED;
|
||||
-
|
||||
ctx->last_out = &ctx->out;
|
||||
ctx->crc32 = crc32(0L, Z_NULL, 0);
|
||||
ctx->flush = Z_NO_FLUSH;
|
||||
@@ -854,6 +854,8 @@
|
||||
*ctx->last_out = cl;
|
||||
ctx->last_out = &cl->next;
|
||||
|
||||
+ r->connection->buffered &= ~NGX_HTTP_GZIP_BUFFERED;
|
||||
+
|
||||
return NGX_OK;
|
||||
}
|
||||
|
||||
|
32
patches/nginx-1.4.3-gzip_flush_bug.patch
Normal file
32
patches/nginx-1.4.3-gzip_flush_bug.patch
Normal file
@ -0,0 +1,32 @@
|
||||
# HG changeset patch
|
||||
# User Yichun Zhang <agentzh@gmail.com>
|
||||
# Date 1382997696 25200
|
||||
# Branch gzip-flush
|
||||
# Node ID 8985d6cc9a4334e954909c130e6204c6fc673d7e
|
||||
# Parent e6a1623f87bc96d5ec62b6d77356aa47dbc60756
|
||||
Flush pending data when incoming chain is NULL in gzip and gunzip modules
|
||||
|
||||
diff -r e6a1623f87bc -r 8985d6cc9a43 src/http/modules/ngx_http_gunzip_filter_module.c
|
||||
--- a/src/http/modules/ngx_http_gunzip_filter_module.c Mon Oct 21 18:20:32 2013 +0800
|
||||
+++ b/src/http/modules/ngx_http_gunzip_filter_module.c Mon Oct 28 15:01:36 2013 -0700
|
||||
@@ -199,7 +199,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (ctx->nomem) {
|
||||
+ if (ctx->nomem || in == NULL) {
|
||||
|
||||
/* flush busy buffers */
|
||||
|
||||
diff -r e6a1623f87bc -r 8985d6cc9a43 src/http/modules/ngx_http_gzip_filter_module.c
|
||||
--- a/src/http/modules/ngx_http_gzip_filter_module.c Mon Oct 21 18:20:32 2013 +0800
|
||||
+++ b/src/http/modules/ngx_http_gzip_filter_module.c Mon Oct 28 15:01:36 2013 -0700
|
||||
@@ -372,7 +372,7 @@
|
||||
r->connection->buffered |= NGX_HTTP_GZIP_BUFFERED;
|
||||
}
|
||||
|
||||
- if (ctx->nomem) {
|
||||
+ if (ctx->nomem || in == NULL) {
|
||||
|
||||
/* flush busy buffers */
|
||||
|
12
patches/nginx-1.4.3-invalid_referer_hash.patch
Normal file
12
patches/nginx-1.4.3-invalid_referer_hash.patch
Normal file
@ -0,0 +1,12 @@
|
||||
--- nginx-1.4.3/src/http/modules/ngx_http_referer_module.c 2013-05-06 03:27:10.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/http/modules/ngx_http_referer_module.c 2013-05-21 16:04:49.340286168 -0700
|
||||
@@ -396,8 +396,7 @@ ngx_http_valid_referers(ngx_conf_t *cf,
|
||||
|
||||
ngx_str_set(&name, "invalid_referer");
|
||||
|
||||
- var = ngx_http_add_variable(cf, &name,
|
||||
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOHASH);
|
||||
+ var = ngx_http_add_variable(cf, &name, NGX_HTTP_VAR_CHANGEABLE);
|
||||
if (var == NULL) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
13
patches/nginx-1.4.3-larger_max_error_str.patch
Normal file
13
patches/nginx-1.4.3-larger_max_error_str.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- nginx-1.4.3/src/core/ngx_log.h 2013-10-08 05:07:14.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/core/ngx_log.h 2013-12-05 20:35:35.996236720 -0800
|
||||
@@ -64,7 +64,9 @@ struct ngx_log_s {
|
||||
};
|
||||
|
||||
|
||||
-#define NGX_MAX_ERROR_STR 2048
|
||||
+#ifndef NGX_MAX_ERROR_STR
|
||||
+#define NGX_MAX_ERROR_STR 4096
|
||||
+#endif
|
||||
|
||||
|
||||
/*********************************/
|
15
patches/nginx-1.4.3-location_if_inherits_proxy.patch
Normal file
15
patches/nginx-1.4.3-location_if_inherits_proxy.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- nginx-1.4.3/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
|
||||
+++ nginx-1.4.3-patched/src/http/modules/ngx_http_proxy_module.c 2012-06-24 12:48:57.289834450 +0800
|
||||
@@ -3023,8 +3023,10 @@
|
||||
|
||||
if (conf->upstream.upstream || conf->proxy_lengths) {
|
||||
clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
|
||||
- if (clcf->handler == NULL && clcf->lmt_excpt) {
|
||||
- clcf->handler = ngx_http_proxy_handler;
|
||||
+ if (clcf->handler == NULL) {
|
||||
+ if (clcf->lmt_excpt) {
|
||||
+ clcf->handler = ngx_http_proxy_handler;
|
||||
+ }
|
||||
conf->location = prev->location;
|
||||
}
|
||||
}
|
115
patches/nginx-1.4.3-log_escape_non_ascii.patch
Normal file
115
patches/nginx-1.4.3-log_escape_non_ascii.patch
Normal file
@ -0,0 +1,115 @@
|
||||
--- nginx-1.4.3/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
|
||||
+++ nginx-1.4.3-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
|
||||
@@ -61,6 +61,8 @@
|
||||
time_t open_file_cache_valid;
|
||||
ngx_uint_t open_file_cache_min_uses;
|
||||
|
||||
+ ngx_flag_t escape_non_ascii;
|
||||
+
|
||||
ngx_uint_t off; /* unsigned off:1 */
|
||||
} ngx_http_log_loc_conf_t;
|
||||
|
||||
@@ -104,7 +106,8 @@
|
||||
uintptr_t data);
|
||||
static u_char *ngx_http_log_variable(ngx_http_request_t *r, u_char *buf,
|
||||
ngx_http_log_op_t *op);
|
||||
-static uintptr_t ngx_http_log_escape(u_char *dst, u_char *src, size_t size);
|
||||
+static uintptr_t ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst,
|
||||
+ u_char *src, size_t size);
|
||||
|
||||
|
||||
static void *ngx_http_log_create_main_conf(ngx_conf_t *cf);
|
||||
@@ -146,6 +149,13 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("log_escape_non_ascii"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_FLAG,
|
||||
+ ngx_conf_set_flag_slot,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ offsetof(ngx_http_log_loc_conf_t, escape_non_ascii),
|
||||
+ NULL },
|
||||
+
|
||||
ngx_null_command
|
||||
};
|
||||
|
||||
@@ -637,6 +647,7 @@
|
||||
ngx_http_log_variable_getlen(ngx_http_request_t *r, uintptr_t data)
|
||||
{
|
||||
uintptr_t len;
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, data);
|
||||
@@ -645,7 +656,9 @@
|
||||
return 1;
|
||||
}
|
||||
|
||||
- len = ngx_http_log_escape(NULL, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+
|
||||
+ len = ngx_http_log_escape(lcf, NULL, value->data, value->len);
|
||||
|
||||
value->escape = len ? 1 : 0;
|
||||
|
||||
@@ -656,6 +669,7 @@
|
||||
static u_char *
|
||||
ngx_http_log_variable(ngx_http_request_t *r, u_char *buf, ngx_http_log_op_t *op)
|
||||
{
|
||||
+ ngx_http_log_loc_conf_t *lcf;
|
||||
ngx_http_variable_value_t *value;
|
||||
|
||||
value = ngx_http_get_indexed_variable(r, op->data);
|
||||
@@ -669,16 +683,18 @@
|
||||
return ngx_cpymem(buf, value->data, value->len);
|
||||
|
||||
} else {
|
||||
- return (u_char *) ngx_http_log_escape(buf, value->data, value->len);
|
||||
+ lcf = ngx_http_get_module_loc_conf(r, ngx_http_log_module);
|
||||
+ return (u_char *) ngx_http_log_escape(lcf, buf, value->data, value->len);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static uintptr_t
|
||||
-ngx_http_log_escape(u_char *dst, u_char *src, size_t size)
|
||||
+ngx_http_log_escape(ngx_http_log_loc_conf_t *lcf, u_char *dst, u_char *src,
|
||||
+ size_t size)
|
||||
{
|
||||
- ngx_uint_t n;
|
||||
- static u_char hex[] = "0123456789ABCDEF";
|
||||
+ ngx_uint_t n;
|
||||
+ static u_char hex[] = "0123456789ABCDEF";
|
||||
|
||||
static uint32_t escape[] = {
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
@@ -698,6 +714,12 @@
|
||||
0xffffffff, /* 1111 1111 1111 1111 1111 1111 1111 1111 */
|
||||
};
|
||||
|
||||
+ if (lcf->escape_non_ascii) {
|
||||
+ ngx_memset(&escape[4], 0xff, sizeof(uint32_t) * 4);
|
||||
+
|
||||
+ } else {
|
||||
+ ngx_memzero(&escape[4], sizeof(uint32_t) * 4);
|
||||
+ }
|
||||
|
||||
if (dst == NULL) {
|
||||
|
||||
@@ -781,6 +803,7 @@
|
||||
}
|
||||
|
||||
conf->open_file_cache = NGX_CONF_UNSET_PTR;
|
||||
+ conf->escape_non_ascii = NGX_CONF_UNSET;
|
||||
|
||||
return conf;
|
||||
}
|
||||
@@ -796,6 +819,8 @@
|
||||
ngx_http_log_fmt_t *fmt;
|
||||
ngx_http_log_main_conf_t *lmcf;
|
||||
|
||||
+ ngx_conf_merge_value(conf->escape_non_ascii, prev->escape_non_ascii, 1);
|
||||
+
|
||||
if (conf->open_file_cache == NGX_CONF_UNSET_PTR) {
|
||||
|
||||
conf->open_file_cache = prev->open_file_cache;
|
24
patches/nginx-1.4.3-no_Werror.patch
Normal file
24
patches/nginx-1.4.3-no_Werror.patch
Normal file
@ -0,0 +1,24 @@
|
||||
diff -ur nginx-1.4.3/auto/cc/gcc nginx-1.4.3-patched/auto/cc/gcc
|
||||
--- nginx-1.4.3/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
|
||||
+++ nginx-1.4.3-patched/auto/cc/gcc 2011-06-27 19:53:13.837741087 +0800
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
||||
diff -ur nginx-1.4.3/auto/cc/icc nginx-1.4.3-patched/auto/cc/icc
|
||||
--- nginx-1.4.3/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
|
||||
+++ nginx-1.4.3-patched/auto/cc/icc 2011-06-27 19:53:19.508916811 +0800
|
||||
@@ -139,7 +139,7 @@
|
||||
esac
|
||||
|
||||
# stop on warning
|
||||
-CFLAGS="$CFLAGS -Werror"
|
||||
+#CFLAGS="$CFLAGS -Werror"
|
||||
|
||||
# debug
|
||||
CFLAGS="$CFLAGS -g"
|
90
patches/nginx-1.4.3-no_error_pages.patch
Normal file
90
patches/nginx-1.4.3-no_error_pages.patch
Normal file
@ -0,0 +1,90 @@
|
||||
--- nginx-1.4.3/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
|
||||
+++ nginx-1.4.3-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
|
||||
@@ -57,6 +57,8 @@
|
||||
void *conf);
|
||||
static char *ngx_http_core_error_page(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
+static char *ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
+ void *conf);
|
||||
static char *ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
void *conf);
|
||||
static char *ngx_http_core_open_file_cache(ngx_conf_t *cf, ngx_command_t *cmd,
|
||||
@@ -614,6 +616,14 @@
|
||||
0,
|
||||
NULL },
|
||||
|
||||
+ { ngx_string("no_error_pages"),
|
||||
+ NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_HTTP_LIF_CONF
|
||||
+ |NGX_CONF_NOARGS,
|
||||
+ ngx_http_core_no_error_pages,
|
||||
+ NGX_HTTP_LOC_CONF_OFFSET,
|
||||
+ 0,
|
||||
+ NULL },
|
||||
+
|
||||
{ ngx_string("try_files"),
|
||||
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_2MORE,
|
||||
ngx_http_core_try_files,
|
||||
@@ -3052,7 +3062,6 @@
|
||||
* clcf->types = NULL;
|
||||
* clcf->default_type = { 0, NULL };
|
||||
* clcf->error_log = NULL;
|
||||
- * clcf->error_pages = NULL;
|
||||
* clcf->try_files = NULL;
|
||||
* clcf->client_body_path = NULL;
|
||||
* clcf->regex = NULL;
|
||||
@@ -3062,6 +3071,7 @@
|
||||
* clcf->gzip_proxied = 0;
|
||||
*/
|
||||
|
||||
+ clcf->error_pages = NGX_CONF_UNSET_PTR;
|
||||
clcf->client_max_body_size = NGX_CONF_UNSET;
|
||||
clcf->client_body_buffer_size = NGX_CONF_UNSET_SIZE;
|
||||
clcf->client_body_timeout = NGX_CONF_UNSET_MSEC;
|
||||
@@ -3250,9 +3260,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
- if (conf->error_pages == NULL && prev->error_pages) {
|
||||
- conf->error_pages = prev->error_pages;
|
||||
- }
|
||||
+ ngx_conf_merge_ptr_value(conf->error_pages, prev->error_pages, NULL);
|
||||
|
||||
ngx_conf_merge_str_value(conf->default_type,
|
||||
prev->default_type, "text/plain");
|
||||
@@ -3988,6 +3996,10 @@
|
||||
ngx_http_compile_complex_value_t ccv;
|
||||
|
||||
if (clcf->error_pages == NULL) {
|
||||
+ return "conflicts with \"no_error_pages\"";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages == NGX_CONF_UNSET_PTR) {
|
||||
clcf->error_pages = ngx_array_create(cf->pool, 4,
|
||||
sizeof(ngx_http_err_page_t));
|
||||
if (clcf->error_pages == NULL) {
|
||||
@@ -4095,6 +4107,25 @@
|
||||
|
||||
|
||||
static char *
|
||||
+ngx_http_core_no_error_pages(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
+{
|
||||
+ ngx_http_core_loc_conf_t *clcf = conf;
|
||||
+
|
||||
+ if (clcf->error_pages == NULL) {
|
||||
+ return "is duplicate";
|
||||
+ }
|
||||
+
|
||||
+ if (clcf->error_pages != NGX_CONF_UNSET_PTR) {
|
||||
+ return "conflicts with \"error_page\"";
|
||||
+ }
|
||||
+
|
||||
+ clcf->error_pages = NULL;
|
||||
+
|
||||
+ return NGX_CONF_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static char *
|
||||
ngx_http_core_try_files(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
|
||||
{
|
||||
ngx_http_core_loc_conf_t *clcf = conf;
|
607
patches/nginx-1.4.3-no_pool.patch
Normal file
607
patches/nginx-1.4.3-no_pool.patch
Normal file
@ -0,0 +1,607 @@
|
||||
diff -upr nginx-1.4.3/src/core/nginx.h nginx-1.4.3-patched/src/core/nginx.h
|
||||
--- nginx-1.4.3/src/core/nginx.h 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/core/nginx.h 2013-06-10 16:12:23.691136795 -0700
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
|
||||
#define nginx_version 1004003
|
||||
#define NGINX_VERSION "1.4.3"
|
||||
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
Only in nginx-1.4.3-patched/src/core: nginx.h.orig
|
||||
Only in nginx-1.4.3-patched/src/core: nginx.h.rej
|
||||
diff -upr nginx-1.4.3/src/core/ngx_array.c nginx-1.4.3-patched/src/core/ngx_array.c
|
||||
--- nginx-1.4.3/src/core/ngx_array.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/core/ngx_array.c 2013-06-10 16:12:23.692136802 -0700
|
||||
@@ -30,26 +30,30 @@ ngx_array_create(ngx_pool_t *p, ngx_uint
|
||||
void
|
||||
ngx_array_destroy(ngx_array_t *a)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last) {
|
||||
- p->d.last -= a->size * a->nalloc;
|
||||
+ if (a->elts) {
|
||||
+ ngx_pfree(p, a->elts);
|
||||
}
|
||||
|
||||
- if ((u_char *) a + sizeof(ngx_array_t) == p->d.last) {
|
||||
- p->d.last = (u_char *) a;
|
||||
+ for (link = a->old_elts; link; link = link->next) {
|
||||
+ ngx_pfree(p, link->elts);
|
||||
}
|
||||
+
|
||||
+ ngx_pfree(p, a);
|
||||
}
|
||||
|
||||
|
||||
void *
|
||||
ngx_array_push(ngx_array_t *a)
|
||||
{
|
||||
- void *elt, *new;
|
||||
- size_t size;
|
||||
- ngx_pool_t *p;
|
||||
+ void *elt, *new;
|
||||
+ size_t size;
|
||||
+ ngx_pool_t *p;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts == a->nalloc) {
|
||||
|
||||
@@ -59,29 +63,27 @@ ngx_array_push(ngx_array_t *a)
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + size == p->d.last
|
||||
- && p->d.last + a->size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += a->size;
|
||||
- a->nalloc++;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- new = ngx_palloc(p, 2 * size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, size);
|
||||
- a->elts = new;
|
||||
- a->nalloc *= 2;
|
||||
+ /* allocate a new array */
|
||||
+
|
||||
+ new = ngx_palloc(p, 2 * size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc *= 2;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
@@ -95,11 +97,10 @@ void *
|
||||
ngx_array_push_n(ngx_array_t *a, ngx_uint_t n)
|
||||
{
|
||||
void *elt, *new;
|
||||
- size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *p;
|
||||
|
||||
- size = n * a->size;
|
||||
+ ngx_array_link_t *link;
|
||||
|
||||
if (a->nelts + n > a->nalloc) {
|
||||
|
||||
@@ -107,31 +108,27 @@ ngx_array_push_n(ngx_array_t *a, ngx_uin
|
||||
|
||||
p = a->pool;
|
||||
|
||||
- if ((u_char *) a->elts + a->size * a->nalloc == p->d.last
|
||||
- && p->d.last + size <= p->d.end)
|
||||
- {
|
||||
- /*
|
||||
- * the array allocation is the last in the pool
|
||||
- * and there is space for new allocation
|
||||
- */
|
||||
-
|
||||
- p->d.last += size;
|
||||
- a->nalloc += n;
|
||||
-
|
||||
- } else {
|
||||
- /* allocate a new array */
|
||||
-
|
||||
- nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
-
|
||||
- new = ngx_palloc(p, nalloc * a->size);
|
||||
- if (new == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
- a->elts = new;
|
||||
- a->nalloc = nalloc;
|
||||
+ nalloc = 2 * ((n >= a->nalloc) ? n : a->nalloc);
|
||||
+
|
||||
+ new = ngx_palloc(p, nalloc * a->size);
|
||||
+ if (new == NULL) {
|
||||
+ return NULL;
|
||||
+ }
|
||||
+
|
||||
+ ngx_memcpy(new, a->elts, a->nelts * a->size);
|
||||
+
|
||||
+ link = ngx_palloc(p, sizeof(ngx_array_link_t));
|
||||
+ if (link == NULL) {
|
||||
+ ngx_pfree(p, new);
|
||||
+ return NULL;
|
||||
}
|
||||
+
|
||||
+ link->next = a->old_elts;
|
||||
+ link->elts = a->elts;
|
||||
+ a->old_elts = link;
|
||||
+
|
||||
+ a->elts = new;
|
||||
+ a->nalloc = nalloc;
|
||||
}
|
||||
|
||||
elt = (u_char *) a->elts + a->size * a->nelts;
|
||||
Only in nginx-1.4.3-patched/src/core: ngx_array.c.orig
|
||||
Only in nginx-1.4.3-patched/src/core: ngx_array.c.rej
|
||||
diff -upr nginx-1.4.3/src/core/ngx_array.h nginx-1.4.3-patched/src/core/ngx_array.h
|
||||
--- nginx-1.4.3/src/core/ngx_array.h 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/core/ngx_array.h 2013-06-10 16:15:08.314275482 -0700
|
||||
@@ -13,12 +13,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
+typedef struct ngx_array_link_s ngx_array_link_t;
|
||||
+
|
||||
+
|
||||
+struct ngx_array_link_s {
|
||||
+ void *elts;
|
||||
+ ngx_array_link_t *next;
|
||||
+};
|
||||
+
|
||||
+
|
||||
typedef struct {
|
||||
void *elts;
|
||||
ngx_uint_t nelts;
|
||||
size_t size;
|
||||
ngx_uint_t nalloc;
|
||||
ngx_pool_t *pool;
|
||||
+
|
||||
+ ngx_array_link_t *old_elts;
|
||||
} ngx_array_t;
|
||||
|
||||
|
||||
@@ -40,6 +51,7 @@ ngx_array_init(ngx_array_t *array, ngx_p
|
||||
array->size = size;
|
||||
array->nalloc = n;
|
||||
array->pool = pool;
|
||||
+ array->old_elts = NULL;
|
||||
|
||||
array->elts = ngx_palloc(pool, n * size);
|
||||
if (array->elts == NULL) {
|
||||
Only in nginx-1.4.3-patched/src/core: ngx_array.h.orig
|
||||
Only in nginx-1.4.3-patched/src/core: ngx_array.h.rej
|
||||
diff -upr nginx-1.4.3/src/core/ngx_palloc.c nginx-1.4.3-patched/src/core/ngx_palloc.c
|
||||
--- nginx-1.4.3/src/core/ngx_palloc.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/core/ngx_palloc.c 2013-06-10 16:12:23.718136984 -0700
|
||||
@@ -9,32 +9,23 @@
|
||||
#include <ngx_core.h>
|
||||
|
||||
|
||||
-static void *ngx_palloc_block(ngx_pool_t *pool, size_t size);
|
||||
-static void *ngx_palloc_large(ngx_pool_t *pool, size_t size);
|
||||
-
|
||||
-
|
||||
ngx_pool_t *
|
||||
ngx_create_pool(size_t size, ngx_log_t *log)
|
||||
{
|
||||
- ngx_pool_t *p;
|
||||
+ ngx_pool_t *p;
|
||||
|
||||
- p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);
|
||||
+ size = sizeof(ngx_pool_t);
|
||||
+ p = ngx_alloc(size, log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- p->d.end = (u_char *) p + size;
|
||||
- p->d.next = NULL;
|
||||
- p->d.failed = 0;
|
||||
+ ngx_memzero(p, size);
|
||||
|
||||
size = size - sizeof(ngx_pool_t);
|
||||
p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;
|
||||
|
||||
p->current = p;
|
||||
- p->chain = NULL;
|
||||
- p->large = NULL;
|
||||
- p->cleanup = NULL;
|
||||
p->log = log;
|
||||
|
||||
return p;
|
||||
@@ -44,8 +35,7 @@ ngx_create_pool(size_t size, ngx_log_t *
|
||||
void
|
||||
ngx_destroy_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- ngx_pool_t *p, *n;
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
ngx_pool_cleanup_t *c;
|
||||
|
||||
for (c = pool->cleanup; c; c = c->next) {
|
||||
@@ -56,13 +46,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
|
||||
}
|
||||
}
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
-
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", l->alloc);
|
||||
-
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
+ if (pool->d == NULL) {
|
||||
+ ngx_free(pool);
|
||||
+ return;
|
||||
}
|
||||
|
||||
#if (NGX_DEBUG)
|
||||
@@ -72,9 +58,9 @@ ngx_destroy_pool(ngx_pool_t *pool)
|
||||
* so we cannot use this log while free()ing the pool
|
||||
*/
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p, unused: %uz", p, p->d.end - p->d.last);
|
||||
+ "free: %p, unused: %d", d, 0);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
@@ -83,172 +69,82 @@ ngx_destroy_pool(ngx_pool_t *pool)
|
||||
|
||||
#endif
|
||||
|
||||
- for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {
|
||||
- ngx_free(p);
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
if (n == NULL) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
-}
|
||||
|
||||
+ pool->d = NULL;
|
||||
|
||||
-void
|
||||
-ngx_reset_pool(ngx_pool_t *pool)
|
||||
-{
|
||||
- ngx_pool_t *p;
|
||||
- ngx_pool_large_t *l;
|
||||
-
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (l->alloc) {
|
||||
- ngx_free(l->alloc);
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- pool->large = NULL;
|
||||
-
|
||||
- for (p = pool; p; p = p->d.next) {
|
||||
- p->d.last = (u_char *) p + sizeof(ngx_pool_t);
|
||||
- }
|
||||
+ ngx_free(pool);
|
||||
}
|
||||
|
||||
|
||||
-void *
|
||||
-ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
+void
|
||||
+ngx_reset_pool(ngx_pool_t *pool)
|
||||
{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
+ ngx_pool_data_t *d, *n;
|
||||
+ ngx_pool_data_t *saved = NULL;
|
||||
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = ngx_align_ptr(p->d.last, NGX_ALIGNMENT);
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
-
|
||||
- return m;
|
||||
+ if (pool->d) {
|
||||
+ for (d = pool->d, n = d->next; ; d = n, n = n->next) {
|
||||
+ if (d->alloc == pool->log) {
|
||||
+ saved = d;
|
||||
+ continue;
|
||||
}
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
- }
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
-}
|
||||
-
|
||||
-
|
||||
-void *
|
||||
-ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
-{
|
||||
- u_char *m;
|
||||
- ngx_pool_t *p;
|
||||
-
|
||||
- if (size <= pool->max) {
|
||||
-
|
||||
- p = pool->current;
|
||||
-
|
||||
- do {
|
||||
- m = p->d.last;
|
||||
-
|
||||
- if ((size_t) (p->d.end - m) >= size) {
|
||||
- p->d.last = m + size;
|
||||
+ ngx_free(d->alloc);
|
||||
+ ngx_free(d);
|
||||
|
||||
- return m;
|
||||
+ if (n == NULL) {
|
||||
+ break;
|
||||
}
|
||||
+ }
|
||||
|
||||
- p = p->d.next;
|
||||
-
|
||||
- } while (p);
|
||||
-
|
||||
- return ngx_palloc_block(pool, size);
|
||||
+ pool->d = saved;
|
||||
}
|
||||
-
|
||||
- return ngx_palloc_large(pool, size);
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_block(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_malloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- u_char *m;
|
||||
- size_t psize;
|
||||
- ngx_pool_t *p, *new, *current;
|
||||
+ ngx_pool_data_t *d;
|
||||
+ void *p;
|
||||
|
||||
- psize = (size_t) (pool->d.end - (u_char *) pool);
|
||||
-
|
||||
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
|
||||
- if (m == NULL) {
|
||||
+ p = ngx_alloc(size, pool->log);
|
||||
+ if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- new = (ngx_pool_t *) m;
|
||||
-
|
||||
- new->d.end = m + psize;
|
||||
- new->d.next = NULL;
|
||||
- new->d.failed = 0;
|
||||
-
|
||||
- m += sizeof(ngx_pool_data_t);
|
||||
- m = ngx_align_ptr(m, NGX_ALIGNMENT);
|
||||
- new->d.last = m + size;
|
||||
-
|
||||
- current = pool->current;
|
||||
-
|
||||
- for (p = current; p->d.next; p = p->d.next) {
|
||||
- if (p->d.failed++ > 4) {
|
||||
- current = p->d.next;
|
||||
- }
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
+ ngx_free(p);
|
||||
+ return NULL;
|
||||
}
|
||||
|
||||
- p->d.next = new;
|
||||
-
|
||||
- pool->current = current ? current : new;
|
||||
-
|
||||
- return m;
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
+ return p;
|
||||
}
|
||||
|
||||
|
||||
-static void *
|
||||
-ngx_palloc_large(ngx_pool_t *pool, size_t size)
|
||||
+void *
|
||||
+ngx_palloc(ngx_pool_t *pool, size_t size)
|
||||
{
|
||||
- void *p;
|
||||
- ngx_uint_t n;
|
||||
- ngx_pool_large_t *large;
|
||||
-
|
||||
- p = ngx_alloc(size, pool->log);
|
||||
- if (p == NULL) {
|
||||
- return NULL;
|
||||
- }
|
||||
-
|
||||
- n = 0;
|
||||
-
|
||||
- for (large = pool->large; large; large = large->next) {
|
||||
- if (large->alloc == NULL) {
|
||||
- large->alloc = p;
|
||||
- return p;
|
||||
- }
|
||||
-
|
||||
- if (n++ > 3) {
|
||||
- break;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
- ngx_free(p);
|
||||
- return NULL;
|
||||
- }
|
||||
+ return ngx_malloc(pool, size);
|
||||
+}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
|
||||
- return p;
|
||||
+void *
|
||||
+ngx_pnalloc(ngx_pool_t *pool, size_t size)
|
||||
+{
|
||||
+ return ngx_malloc(pool, size);
|
||||
}
|
||||
|
||||
|
||||
@@ -256,38 +152,48 @@ void *
|
||||
ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment)
|
||||
{
|
||||
void *p;
|
||||
- ngx_pool_large_t *large;
|
||||
+ ngx_pool_data_t *d;
|
||||
|
||||
p = ngx_memalign(alignment, size, pool->log);
|
||||
if (p == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
|
||||
- if (large == NULL) {
|
||||
+ d = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
|
||||
+ if (d == NULL){
|
||||
ngx_free(p);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- large->alloc = p;
|
||||
- large->next = pool->large;
|
||||
- pool->large = large;
|
||||
-
|
||||
+ d->alloc = p;
|
||||
+ d->next = pool->d;
|
||||
+ pool->d = d;
|
||||
return p;
|
||||
}
|
||||
|
||||
|
||||
ngx_int_t
|
||||
-ngx_pfree(ngx_pool_t *pool, void *p)
|
||||
+ngx_pfree(ngx_pool_t *pool, void *data)
|
||||
{
|
||||
- ngx_pool_large_t *l;
|
||||
+ ngx_pool_data_t *p, *d;
|
||||
|
||||
- for (l = pool->large; l; l = l->next) {
|
||||
- if (p == l->alloc) {
|
||||
- ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,
|
||||
- "free: %p", l->alloc);
|
||||
- ngx_free(l->alloc);
|
||||
- l->alloc = NULL;
|
||||
+ p = NULL;
|
||||
+ for (d = pool->d; d; p = d, d = d->next) {
|
||||
+ if (data == d->alloc) {
|
||||
+
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0, "free: %p", d->alloc);
|
||||
+
|
||||
+ ngx_free(d->alloc);
|
||||
+ d->alloc = NULL;
|
||||
+
|
||||
+ if (p) {
|
||||
+ p->next = d->next;
|
||||
+
|
||||
+ } else {
|
||||
+ pool->d = d->next;
|
||||
+ }
|
||||
+
|
||||
+ ngx_free(d);
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
diff -upr nginx-1.4.3/src/core/ngx_palloc.h nginx-1.4.3-patched/src/core/ngx_palloc.h
|
||||
--- nginx-1.4.3/src/core/ngx_palloc.h 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/core/ngx_palloc.h 2013-06-10 16:12:23.720136999 -0700
|
||||
@@ -38,28 +38,21 @@ struct ngx_pool_cleanup_s {
|
||||
};
|
||||
|
||||
|
||||
-typedef struct ngx_pool_large_s ngx_pool_large_t;
|
||||
-
|
||||
-struct ngx_pool_large_s {
|
||||
- ngx_pool_large_t *next;
|
||||
- void *alloc;
|
||||
-};
|
||||
+typedef struct ngx_pool_data_s ngx_pool_large_t;
|
||||
+typedef struct ngx_pool_data_s ngx_pool_data_t;
|
||||
|
||||
|
||||
-typedef struct {
|
||||
- u_char *last;
|
||||
- u_char *end;
|
||||
- ngx_pool_t *next;
|
||||
- ngx_uint_t failed;
|
||||
-} ngx_pool_data_t;
|
||||
+struct ngx_pool_data_s {
|
||||
+ ngx_pool_data_t *next;
|
||||
+ void *alloc;
|
||||
+};
|
||||
|
||||
|
||||
struct ngx_pool_s {
|
||||
- ngx_pool_data_t d;
|
||||
+ ngx_pool_data_t *d;
|
||||
size_t max;
|
||||
ngx_pool_t *current;
|
||||
ngx_chain_t *chain;
|
||||
- ngx_pool_large_t *large;
|
||||
ngx_pool_cleanup_t *cleanup;
|
||||
ngx_log_t *log;
|
||||
};
|
26
patches/nginx-1.4.3-pcre_conf_opt.patch
Normal file
26
patches/nginx-1.4.3-pcre_conf_opt.patch
Normal file
@ -0,0 +1,26 @@
|
||||
# HG changeset patch
|
||||
# User Yichun Zhang <agentzh@gmail.com>
|
||||
# Date 1386694955 28800
|
||||
# Node ID 9ba6b149669f1f02eeb4cdc0ebd364a949b5c469
|
||||
# Parent 30e806b8636af5fd3f03ec17df24801f390f7511
|
||||
Configure: added new option --with-pcre-conf-opt=OPTIONS.
|
||||
|
||||
diff -r 30e806b8636a -r 9ba6b149669f auto/options
|
||||
--- a/auto/options Mon Dec 09 10:16:44 2013 +0400
|
||||
+++ b/auto/options Tue Dec 10 09:02:35 2013 -0800
|
||||
@@ -286,6 +286,7 @@
|
||||
--with-pcre) USE_PCRE=YES ;;
|
||||
--with-pcre=*) PCRE="$value" ;;
|
||||
--with-pcre-opt=*) PCRE_OPT="$value" ;;
|
||||
+ --with-pcre-conf-opt=*) PCRE_CONF_OPT="$value" ;;
|
||||
--with-pcre-jit) PCRE_JIT=YES ;;
|
||||
|
||||
--with-openssl=*) OPENSSL="$value" ;;
|
||||
@@ -441,6 +442,7 @@
|
||||
--with-pcre force PCRE library usage
|
||||
--with-pcre=DIR set path to PCRE library sources
|
||||
--with-pcre-opt=OPTIONS set additional build options for PCRE
|
||||
+ --with-pcre-conf-opt=OPTIONS set additional configure options for PCRE
|
||||
--with-pcre-jit build PCRE with JIT compilation support
|
||||
|
||||
--with-md5=DIR set path to md5 library sources
|
15
patches/nginx-1.4.3-proxy_host_port_vars.patch
Normal file
15
patches/nginx-1.4.3-proxy_host_port_vars.patch
Normal file
@ -0,0 +1,15 @@
|
||||
--- nginx-1.4.3/src/http/modules/ngx_http_proxy_module.c 2013-10-08 05:07:14.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/http/modules/ngx_http_proxy_module.c 2013-10-27 15:29:41.619378592 -0700
|
||||
@@ -602,10 +602,10 @@ static ngx_keyval_t ngx_http_proxy_cach
|
||||
static ngx_http_variable_t ngx_http_proxy_vars[] = {
|
||||
|
||||
{ ngx_string("proxy_host"), NULL, ngx_http_proxy_host_variable, 0,
|
||||
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
|
||||
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
|
||||
|
||||
{ ngx_string("proxy_port"), NULL, ngx_http_proxy_port_variable, 0,
|
||||
- NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE|NGX_HTTP_VAR_NOHASH, 0 },
|
||||
+ NGX_HTTP_VAR_CHANGEABLE|NGX_HTTP_VAR_NOCACHEABLE, 0 },
|
||||
|
||||
{ ngx_string("proxy_add_x_forwarded_for"), NULL,
|
||||
ngx_http_proxy_add_x_forwarded_for_variable, 0, NGX_HTTP_VAR_NOHASH, 0 },
|
26
patches/nginx-1.4.3-server_header.patch
Normal file
26
patches/nginx-1.4.3-server_header.patch
Normal file
@ -0,0 +1,26 @@
|
||||
diff -ur lz-nginx-1.4.3/nginx-1.4.3/src/core/nginx.h lz-nginx-1.4.3-patched/nginx-1.4.3/src/core/nginx.h
|
||||
--- lz-nginx-1.4.3/nginx-1.4.3/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
|
||||
+++ lz-nginx-1.4.3-patched/nginx-1.4.3/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
#define nginx_version 1004003
|
||||
#define NGINX_VERSION "1.4.3"
|
||||
-#define NGINX_VER "nginx/" NGINX_VERSION
|
||||
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#define NGX_OLDPID_EXT ".oldbin"
|
||||
Only in lz-nginx-1.4.3-patched/nginx-1.4.3/src/core: nginx.h.orig
|
||||
Only in lz-nginx-1.4.3-patched/nginx-1.4.3/src/core: nginx.h.rej
|
||||
diff -ur lz-nginx-1.4.3/nginx-1.4.3/src/http/ngx_http_header_filter_module.c lz-nginx-1.4.3-patched/nginx-1.4.3/src/http/ngx_http_header_filter_module.c
|
||||
--- lz-nginx-1.4.3/nginx-1.4.3/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
|
||||
+++ lz-nginx-1.4.3-patched/nginx-1.4.3/src/http/ngx_http_header_filter_module.c 2010-03-30 10:52:53.670909405 +0800
|
||||
@@ -45,7 +45,7 @@
|
||||
};
|
||||
|
||||
|
||||
-static char ngx_http_server_string[] = "Server: nginx" CRLF;
|
||||
+static char ngx_http_server_string[] = "Server: ngx_openresty" CRLF;
|
||||
static char ngx_http_server_full_string[] = "Server: " NGINX_VER CRLF;
|
||||
|
||||
|
11
patches/nginx-1.4.3-slab_alloc_no_memory_as_info.patch
Normal file
11
patches/nginx-1.4.3-slab_alloc_no_memory_as_info.patch
Normal file
@ -0,0 +1,11 @@
|
||||
--- nginx-1.4.3/src/core/ngx_slab.c 2012-09-24 11:34:04.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/core/ngx_slab.c 2012-12-05 20:47:07.296694952 -0800
|
||||
@@ -657,7 +657,7 @@ ngx_slab_alloc_pages(ngx_slab_pool_t *po
|
||||
}
|
||||
}
|
||||
|
||||
- ngx_slab_error(pool, NGX_LOG_CRIT, "ngx_slab_alloc() failed: no memory");
|
||||
+ ngx_slab_error(pool, NGX_LOG_INFO, "ngx_slab_alloc() failed: no memory");
|
||||
|
||||
return NULL;
|
||||
}
|
41
patches/nginx-1.4.3-unix_socket_accept_over_read.patch
Normal file
41
patches/nginx-1.4.3-unix_socket_accept_over_read.patch
Normal file
@ -0,0 +1,41 @@
|
||||
--- nginx-1.4.3/src/event/ngx_event_accept.c 2013-05-06 03:26:50.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/event/ngx_event_accept.c 2013-07-10 13:05:02.001249099 -0700
|
||||
@@ -269,17 +269,28 @@ ngx_event_accept(ngx_event_t *ev)
|
||||
#endif
|
||||
|
||||
if (ls->addr_ntop) {
|
||||
- c->addr_text.data = ngx_pnalloc(c->pool, ls->addr_text_max_len);
|
||||
- if (c->addr_text.data == NULL) {
|
||||
- ngx_close_accepted_connection(c);
|
||||
- return;
|
||||
- }
|
||||
+ if (socklen > sizeof(c->sockaddr->sa_family)) {
|
||||
+ c->addr_text.data = ngx_pnalloc(c->pool, ls->addr_text_max_len);
|
||||
+ if (c->addr_text.data == NULL) {
|
||||
+ ngx_close_accepted_connection(c);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ c->addr_text.len = ngx_sock_ntop(c->sockaddr, c->addr_text.data,
|
||||
+ ls->addr_text_max_len, 0);
|
||||
+ if (c->addr_text.len == 0) {
|
||||
+ ngx_close_accepted_connection(c);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ } else {
|
||||
+ /*
|
||||
+ * Linux accept/accept4 syscalls, for example, do not return
|
||||
+ * address data upon unix domain sockets
|
||||
+ */
|
||||
|
||||
- c->addr_text.len = ngx_sock_ntop(c->sockaddr, c->addr_text.data,
|
||||
- ls->addr_text_max_len, 0);
|
||||
- if (c->addr_text.len == 0) {
|
||||
- ngx_close_accepted_connection(c);
|
||||
- return;
|
||||
+ c->addr_text.data = NULL;
|
||||
+ c->addr_text.len = 0;
|
||||
}
|
||||
}
|
||||
|
40
patches/nginx-1.4.3-upstream_pipelining.patch
Normal file
40
patches/nginx-1.4.3-upstream_pipelining.patch
Normal file
@ -0,0 +1,40 @@
|
||||
diff -rudp nginx-1.4.3/src/http/ngx_http_upstream.c nginx-1.4.3-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.4.3/src/http/ngx_http_upstream.c 2012-08-06 10:34:08.000000000 -0700
|
||||
+++ nginx-1.4.3-patched/src/http/ngx_http_upstream.c 2012-12-05 14:46:41.741173058 -0800
|
||||
@@ -1216,6 +1216,7 @@ ngx_http_upstream_connect(ngx_http_reque
|
||||
}
|
||||
|
||||
u->request_sent = 0;
|
||||
+ u->request_all_sent = 0;
|
||||
|
||||
if (rc == NGX_AGAIN) {
|
||||
ngx_add_timer(c->write, u->conf->connect_timeout);
|
||||
@@ -1418,6 +1419,8 @@ ngx_http_upstream_send_request(ngx_http_
|
||||
|
||||
/* rc == NGX_OK */
|
||||
|
||||
+ u->request_all_sent = 1;
|
||||
+
|
||||
if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
|
||||
if (ngx_tcp_push(c->fd) == NGX_ERROR) {
|
||||
ngx_log_error(NGX_LOG_CRIT, c->log, ngx_socket_errno,
|
||||
@@ -1484,7 +1487,7 @@ ngx_http_upstream_send_request_handler(n
|
||||
|
||||
#endif
|
||||
|
||||
- if (u->header_sent) {
|
||||
+ if (u->request_all_sent) {
|
||||
u->write_event_handler = ngx_http_upstream_dummy_handler;
|
||||
|
||||
(void) ngx_handle_write_event(c->write, 0);
|
||||
diff -rudp nginx-1.4.3/src/http/ngx_http_upstream.h nginx-1.4.3-patched/src/http/ngx_http_upstream.h
|
||||
--- nginx-1.4.3/src/http/ngx_http_upstream.h 2012-02-13 03:01:58.000000000 -0800
|
||||
+++ nginx-1.4.3-patched/src/http/ngx_http_upstream.h 2012-12-05 14:41:09.763514741 -0800
|
||||
@@ -324,6 +324,7 @@ struct ngx_http_upstream_s {
|
||||
unsigned keepalive:1;
|
||||
|
||||
unsigned request_sent:1;
|
||||
+ unsigned request_all_sent:1;
|
||||
unsigned header_sent:1;
|
||||
};
|
||||
|
149
patches/nginx-1.4.3-upstream_truncation.patch
Normal file
149
patches/nginx-1.4.3-upstream_truncation.patch
Normal file
@ -0,0 +1,149 @@
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.3/src/http/modules/ngx_http_scgi_module.c nginx-1.4.3-patched/src/http/modules/ngx_http_scgi_module.c
|
||||
--- nginx-1.4.3/src/http/modules/ngx_http_scgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.4.3-patched/src/http/modules/ngx_http_scgi_module.c 2013-04-07 12:09:55.900492634 -0700
|
||||
@@ -39,6 +39,7 @@ static ngx_int_t ngx_http_scgi_process_s
|
||||
static ngx_int_t ngx_http_scgi_process_header(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_scgi_finalize_request(ngx_http_request_t *r, ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_scgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_scgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_scgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -446,6 +447,8 @@ ngx_http_scgi_handler(ngx_http_request_t
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_scgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1046,6 +1049,17 @@ ngx_http_scgi_finalize_request(ngx_http_
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_scgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_scgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.3/src/http/modules/ngx_http_uwsgi_module.c nginx-1.4.3-patched/src/http/modules/ngx_http_uwsgi_module.c
|
||||
--- nginx-1.4.3/src/http/modules/ngx_http_uwsgi_module.c 2013-02-09 19:08:42.000000000 -0800
|
||||
+++ nginx-1.4.3-patched/src/http/modules/ngx_http_uwsgi_module.c 2013-04-07 11:58:24.546915778 -0700
|
||||
@@ -46,6 +46,7 @@ static ngx_int_t ngx_http_uwsgi_process_
|
||||
static void ngx_http_uwsgi_abort_request(ngx_http_request_t *r);
|
||||
static void ngx_http_uwsgi_finalize_request(ngx_http_request_t *r,
|
||||
ngx_int_t rc);
|
||||
+static ngx_int_t ngx_http_uwsgi_input_filter_init(void *data);
|
||||
|
||||
static void *ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf);
|
||||
static char *ngx_http_uwsgi_merge_loc_conf(ngx_conf_t *cf, void *parent,
|
||||
@@ -479,6 +480,8 @@ ngx_http_uwsgi_handler(ngx_http_request_
|
||||
u->pipe->input_filter = ngx_event_pipe_copy_input_filter;
|
||||
u->pipe->input_ctx = r;
|
||||
|
||||
+ u->input_filter_init = ngx_http_uwsgi_input_filter_init;
|
||||
+
|
||||
rc = ngx_http_read_client_request_body(r, ngx_http_upstream_init);
|
||||
|
||||
if (rc >= NGX_HTTP_SPECIAL_RESPONSE) {
|
||||
@@ -1086,6 +1089,17 @@ ngx_http_uwsgi_finalize_request(ngx_http
|
||||
}
|
||||
|
||||
|
||||
+static ngx_int_t
|
||||
+ngx_http_uwsgi_input_filter_init(void *data)
|
||||
+{
|
||||
+ ngx_http_request_t *r = data;
|
||||
+
|
||||
+ r->upstream->length = -1;
|
||||
+
|
||||
+ return NGX_OK;
|
||||
+}
|
||||
+
|
||||
+
|
||||
static void *
|
||||
ngx_http_uwsgi_create_loc_conf(ngx_conf_t *cf)
|
||||
{
|
||||
diff --exclude '*~' --exclude '*.swp' -urp nginx-1.4.3/src/http/ngx_http_upstream.c nginx-1.4.3-patched/src/http/ngx_http_upstream.c
|
||||
--- nginx-1.4.3/src/http/ngx_http_upstream.c 2013-02-11 06:39:49.000000000 -0800
|
||||
+++ nginx-1.4.3-patched/src/http/ngx_http_upstream.c 2013-04-08 16:37:48.326752696 -0700
|
||||
@@ -2399,7 +2399,7 @@ ngx_http_upstream_process_non_buffered_u
|
||||
|
||||
if (c->read->timedout) {
|
||||
ngx_connection_error(c, NGX_ETIMEDOUT, "upstream timed out");
|
||||
- ngx_http_upstream_finalize_request(r, u, 0);
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_GATEWAY_TIME_OUT);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2446,13 +2446,20 @@ ngx_http_upstream_process_non_buffered_r
|
||||
if (u->busy_bufs == NULL) {
|
||||
|
||||
if (u->length == 0
|
||||
- || upstream->read->eof
|
||||
- || upstream->read->error)
|
||||
+ || (upstream->read->eof
|
||||
+ && u->length == -1
|
||||
+ && u->pipe
|
||||
+ && u->pipe->length <= 0))
|
||||
{
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
+ if (upstream->read->eof || upstream->read->error) {
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
b->pos = b->start;
|
||||
b->last = b->start;
|
||||
}
|
||||
@@ -2720,7 +2727,9 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
|
||||
#endif
|
||||
|
||||
- if (p->upstream_done || p->upstream_eof || p->upstream_error) {
|
||||
+ if (p->upstream_done
|
||||
+ || (p->upstream_eof && u->length == -1 && p->length <= 0))
|
||||
+ {
|
||||
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
"http upstream exit: %p", p->out);
|
||||
#if 0
|
||||
@@ -2729,6 +2738,14 @@ ngx_http_upstream_process_request(ngx_ht
|
||||
ngx_http_upstream_finalize_request(r, u, 0);
|
||||
return;
|
||||
}
|
||||
+
|
||||
+ if (p->upstream_eof || p->upstream_error) {
|
||||
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
|
||||
+ "http upstream exit: %p", p->out);
|
||||
+
|
||||
+ ngx_http_upstream_finalize_request(r, u, NGX_HTTP_BAD_GATEWAY);
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (p->downstream_error) {
|
||||
@@ -3087,9 +3104,9 @@ ngx_http_upstream_finalize_request(ngx_h
|
||||
|
||||
if (u->header_sent
|
||||
&& rc != NGX_HTTP_REQUEST_TIME_OUT
|
||||
- && (rc == NGX_ERROR || rc >= NGX_HTTP_SPECIAL_RESPONSE))
|
||||
+ && rc >= NGX_HTTP_SPECIAL_RESPONSE)
|
||||
{
|
||||
- rc = 0;
|
||||
+ rc = NGX_ERROR;
|
||||
}
|
||||
|
||||
if (rc == NGX_DECLINED) {
|
13
patches/nginx-1.5.3-cve-2013-2070.patch
Normal file
13
patches/nginx-1.5.3-cve-2013-2070.patch
Normal file
@ -0,0 +1,13 @@
|
||||
--- src/http/modules/ngx_http_proxy_module.c
|
||||
+++ src/http/modules/ngx_http_proxy_module.c
|
||||
@@ -1865,6 +1865,10 @@ data:
|
||||
|
||||
}
|
||||
|
||||
+ if (ctx->size < 0 || ctx->length < 0) {
|
||||
+ goto invalid;
|
||||
+ }
|
||||
+
|
||||
return rc;
|
||||
|
||||
done:
|
1126
patches/nginx-1.5.3-dtrace.patch
Normal file
1126
patches/nginx-1.5.3-dtrace.patch
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user