Compare commits

..

31 Commits

Author SHA1 Message Date
7ce68bd980 bumped version number to 1.1.12.4, with v1.0.10.44 merged 2012-01-19 17:17:12 +08:00
cbb2c2f247 Merge commit 'v1.0.10.44' into nginx-1.1.12
Conflicts:
	util/ver
2012-01-19 17:16:24 +08:00
880010cf91 bumped version number to 1.1.12.3. 2012-01-10 17:58:47 +08:00
111c045db9 bumped version number to 1.1.12.2. 2012-01-10 17:58:20 +08:00
fc61696e25 no longer bundle ngx_http_upstream_keepalive because it is already in the nginx core. 2012-01-10 17:57:46 +08:00
1982776375 merged master to nginx-1.1.x. 2012-01-10 17:28:35 +08:00
53499aeca1 bumped version number to 1.1.12. 2011-12-29 13:16:29 +08:00
b2b220e332 merged master into nginx-1.1.x. 2011-12-29 13:12:41 +08:00
fea60f101b updated nginx-1.1.5-variable_header_ignore_no_hash.patch. 2011-11-09 17:45:23 +08:00
eb48103b54 resolved conflicts while merging from master to nginx-1.1.x. 2011-11-09 17:44:16 +08:00
3c74f263bc updated the patch. 2011-11-08 22:25:49 +08:00
f54c295fd8 upgraded patches for 1.1.5. 2011-11-08 22:18:30 +08:00
8eb28a55d3 updated variable_header_ignore_no_hash.patch for nginx 1.1.5. 2011-11-08 22:04:33 +08:00
bf26312dc0 resolved conflicts while merging from master. 2011-11-08 22:03:43 +08:00
e48b3196fe resolved conflicts while merging "master" to "nginx-1.1.x". 2011-10-13 21:27:14 +08:00
39a5983eef merged master down to nginx-1.1.x branch. 2011-10-11 07:41:19 +08:00
71c3005938 Merge branch 'master' into nginx-1.1.x 2011-10-10 16:22:48 +08:00
54ed6f5afd Merge branch 'master' into nginx-1.1.x 2011-10-10 16:09:25 +08:00
5dfca9ea1f Merge branch 'master' into nginx-1.1.x 2011-10-10 16:00:49 +08:00
ef57a37301 Merge branch 'master' into nginx-1.1.x 2011-10-09 17:57:01 +08:00
fd858205d3 Merge branch 'master' into nginx-1.1.x 2011-10-09 17:00:27 +08:00
480a7a2e49 Merge branch 'master' into nginx-1.1.x 2011-10-09 16:05:51 +08:00
6fbf4031fb Merge branch 'master' into nginx-1.1.x 2011-10-09 08:54:39 +08:00
2bf6bb8a20 Merge branch 'master' into nginx-1.1.x 2011-10-08 22:57:38 +08:00
8f9e508c20 Merge branch 'master' into nginx-1.1.x 2011-10-08 22:16:39 +08:00
36cd84e64c Merge branch 'master' into nginx-1.1.x 2011-10-08 22:08:45 +08:00
cf199f5274 Merge branch 'master' into nginx-1.1.x 2011-10-08 17:48:24 +08:00
0c3a564c8e upgraded to nginx core 1.1.5. 2011-10-08 17:05:16 +08:00
afd4039007 merged master down to nginx-1.1.x branch. 2011-10-08 02:33:01 +08:00
4619fbf426 checked in the variable_header_ignore_no_hash patch. 2011-09-30 11:44:01 -07:00
237638cdfc initial checkin for nginx 1.1.4. 2011-09-23 18:53:51 +08:00
240 changed files with 1171 additions and 33081 deletions

View File

@ -1,233 +0,0 @@
# New ports collection makefile for: openresty
# Date created: 2012-08-07
# Whom: Gvozdikov Veniamin <g.veniamin@googlemail.com>
#
# $FreeBSD$
#
PORTNAME= openresty
PORTVERSION= 1.2.1.11
CATEGORIES= www
MASTER_SITES= http://agentzh.org/misc/nginx/
DISTNAME= ngx_${PORTNAME}-${PORTVERSION}
MAINTAINER= g.veniamin@googlemail.com
COMMENT= OpenResty a powerful web app server by extending nginx
LICENSE= BSD
LIB_DEPENDS= pcre:${PORTSDIR}/devel/pcre
HAS_CONFIGURE= yes
USE_GMAKE= yes
USE_PERL5= yes
CONFIGURE_ARGS= --prefix=${PREFIX}\
--with-cc-opt="-I ${LOCALBASE}/include" \
--with-ld-opt="-L ${LOCALBASE}/lib" \
--user=${WWWOWN} --group=${WWWGRP}
OPTIONS_DEFINE= LUACJSON LUAREDISPARS LUARDS LUARESTYDNS LUARESTYMEM \
LUARESTYREDIS LUARESTYMYSQL LUARESTYUPLOAD LUARESTYSTRING \
ECHO XSS COOLKIT MISC ENCSESSION HEADERSMORE SRCACHE \
ARRAYVAR MEMC REDIS REDIS2 AUTHREQ RDSJSON RDSCVS \
ICONV NDK DRIZZLE POSTGRES
OPTIONS_SINGLE= GLUA
OPTIONS_SINGLE_GLUA= LUA LUAJIT DLUA
LUACJSON_DESC= Lua cjson library
LUAREDISPARS_DESC= Lua redis parser library
LUARDS_DESC= Lua rds library
LUARESTYDNS_DESC= Lua resty dns library
LUARESTYMEM_DESC= Lua resty memcached library
LUARESTYREDIS_DESC= Lua resty redis library
LUARESTYMYSQL_DESC= Lua resty mysql library
LUARESTYUPLOAD_DESC= Lua resty upload library
LUARESTYSTRING_DESC= Lua resty string library
ECHO_DESC= Brings echo/sleep/time and more shell-style
XSS_DESC= Native cross-site scripting support in nginx
COOLKIT_DESC= Collection of small and useful nginx add-ons
MISC_DESC= Various set_xxx directives added
ENCSESSION_DESC= Encrypt and decrypt nginx variable values
HEADERSMORE_DESC= Set and clear input and output headers
SRCACHE_DESC= Transparent subrequest-based caching layout
ARRAYVAR_DESC= Add support for array variables to config
MEMC_DESC= An extended memcached module
REDIS_DESC= HTTP redis module
REDIS2_DESC= Module for the Redis 2.0 protocol
AUTHREQ_DESC= Auth request module
RDSJSON_DESC= An output filter that formats Resty
RDSCVS_DESC= Output filter module to convert CVS
NDK_DESC= Nginx Development Kit
ICONV_DESC= Iconv support
DRIZZLE_DESC= Module for talking to MySQL and Drizzle
POSTGRES_DESC= Module for talking to Postgeres
DLUA_DESC= Disable Lua
LUA_DESC= Use LUA 5.1
LUAJIT_DESC= Use LuaJIT 2.0
OPTIONS_DEFAULT= MISC XSS ECHO COOLKIT ENCSESSION HEADERMORE LUA \
SRCACHE ARRAYVAR MEMC REDIS REDIS2 AUTHREQ RDSJSON \
RDSCVS NDK ICONV PORTGRES
.include <bsd.port.options.mk>
.if empty(${PORT_OPTIONS:MAUTHREQ})
CONFIGURE_ARGS+= --without-http_auth_request_module
.endif
.if empty(${PORT_OPTIONS:MRDSJSON})
CONFIGURE_ARGS+= --without-http_rds_json_module
.endif
.if empty(${PORT_OPTIONS:MRDSCVS})
CONFIGURE_ARGS+= --without-http_rds_csv_module
.endif
.if ${PORT_OPTIONS:MICONV}
CONFIGURE_ARGS+= --with-http_iconv_module
.endif
.if ${PORT_OPTIONS:MNDK}
.else
CONFIGURE_ARGS+= --without-ngx_devel_kit_module
.endif
.if ${PORT_OPTIONS:MDRIZZLE}
CONFIGURE_ARGS+= --with-http_drizzle_module \
--with-libdrizzle=${LOCALBASE}
LIB_DEPENDS+= drizzle:${PORTSDIR}/databases/libdrizzle
.endif
.if ${PORT_OPTIONS:MPOSTGRES}
CONFIGURE_ARGS+= --with-http_postgres_module
.endif
.if empty(${PORT_OPTIONS:MREDIS})
CONFIGURE_ARGS+= --without-http_redis_module
.endif
.if empty(${PORT_OPTIONS:MREDIS2})
CONFIGURE_ARGS+= --without-http_redis2_module
.endif
.if empty(${PORT_OPTIONS:MMEMC})
CONFIGURE_ARGS+= --without-http_memc_module
.endif
.if empty(${PORT_OPTIONS:MARRAYVAR})
CONFIGURE_ARGS+= --without-http_array_var_module
.endif
.if empty(${PORT_OPTIONS:MSRCACHE})
CONFIGURE_ARGS+= --without-http_srcache_module
.endif
.if empty(${PORT_OPTIONS:MENCSESSION})
CONFIGURE_ARGS+= --without-http_encrypted_session_module
.endif
.if empty(${PORT_OPTIONS:MHEADERSMORE})
CONFIGURE_ARGS+= --without-http_headers_more_module
.endif
.if empty(${PORT_OPTIONS:MMISC})
CONFIGURE_ARGS+= --without-http_set_misc_module
.endif
.if empty(${PORT_OPTIONS:MXSS})
CONFIGURE_ARGS+= --without-http_xss_module
.endif
.if empty(${PORT_OPTIONS:MCOOLKIT})
CONFIGURE_ARGS+= --without-http_coolkit_module
.endif
.if empty(${PORT_OPTIONS:MECHO})
CONFIGURE_ARGS+= --without-http_echo_module
.endif
.if ${PORT_OPTIONS:MLUAJIT}
CONFIGURE_ARGS+= --with-luajit
PLIST_SUB+= LUAJIT=""
.else
PLIST_SUB+= LUAJIT="@comment "
.endif
.if ${PORT_OPTIONS:MLUA}
PLIST_SUB+= LUA=""
.else
CONFIGURE_ARGS+= --without-lua51
PLIST_SUB+= LUA="@comment "
.endif
.if ${PORT_OPTIONS:MDLUA}
CONFIGURE_ARGS+= --without-http_lua_module
.endif
.if ${PORT_OPTIONS:MLUACJSON}
PLIST_SUB+= LUACJSON=""
.else
CONFIGURE_ARGS+= --without-lua_cjson
PLIST_SUB+= LUACJSON="@comment "
.endif
.if ${PORT_OPTIONS:MLUAREDISPARS}
PLIST_SUB+= LUAREDISPARS=""
.else
CONFIGURE_ARGS+= --without-lua_redis_parser
PLIST_SUB+= LUAREDISPARS="@comment "
.endif
.if ${PORT_OPTIONS:MLUARDS}
PLIST_SUB+= LUARDS=""
.else
CONFIGURE_ARGS+= --without-lua_rds_parser
PLIST_SUB+= LUARDS="@comment "
.endif
.if ${PORT_OPTIONS:MLUARESTYDNS}
PLIST_SUB+= LUARESTYDNS=""
.else
PLIST_SUB+= LUARESTYDNS="@comment "
CONFIGURE_ARGS+= --without-lua_resty_dns
.endif
.if ${PORT_OPTIONS:MLUARESTYMEM}
PLIST_SUB+= LUARESTYMEM=""
.else
PLIST_SUB+= LUARESTYMEM="@comment "
CONFIGURE_ARGS+= --without-lua_resty_memcached
.endif
.if ${PORT_OPTIONS:MLUARESTYREDIS}
PLIST_SUB+= LUARESTYREDIS=""
.else
CONFIGURE_ARGS+= --without-lua_resty_redis
PLIST_SUB+= LUARESTYREDIS="@comment "
.endif
.if ${PORT_OPTIONS:MLUARESTYMYSQL}
PLIST_SUB+= LUARESTYMYSQL=""
.else
CONFIGURE_ARGS+= --without-lua_resty_mysql
PLIST_SUB+= LUARESTYMYSQL="@comment "
.endif
.if ${PORT_OPTIONS:MLUARESTYUPLOAD}
PLIST_SUB+= LUARESTYUPLOAD=""
.else
CONFIGURE_ARGS+= --without-lua_resty_upload
PLIST_SUB+= LUARESTYUPLOAD="@comment "
.endif
.if ${PORT_OPTIONS:MLUARESTYSTRING}
PLIST_SUB+= LUARESTYSTRING=""
.else
CONFIGURE_ARGS+= --without-lua_resty_string
PLIST_SUB+= LUARESTYSTRING="@comment "
.endif
.include <bsd.port.mk>

View File

@ -1,2 +0,0 @@
SHA256 (ngx_openresty-1.2.1.11.tar.gz) = 212c3ba07d94b17fcbd4d60054bd8457fa18de3264381e8449074c78aa05f9f5
SIZE (ngx_openresty-1.2.1.11.tar.gz) = 2950664

View File

@ -1,36 +0,0 @@
--- bundle/LuaJIT-2.0.0-beta10/Makefile.orig 2012-05-09 20:00:00.000000000 +0400
+++ bundle/LuaJIT-2.0.0-beta10/Makefile 2012-08-07 23:26:28.853477336 +0400
@@ -38,8 +38,6 @@
INSTALL_JITLIB= $(INSTALL_SHARE)/luajit-$(VERSION)/jit
INSTALL_LMOD= $(INSTALL_SHARE)/lua/$(ABIVER)
INSTALL_CMOD= $(INSTALL_LIB)/lua/$(ABIVER)
-INSTALL_MAN= $(INSTALL_SHARE)/man/man1
-INSTALL_PKGCONFIG= $(INSTALL_LIB)/pkgconfig
INSTALL_TNAME= luajit-$(VERSION)
INSTALL_TSYMNAME= luajit
@@ -59,7 +57,7 @@
INSTALL_TSYM= $(INSTALL_BIN)/$(INSTALL_TSYMNAME)
INSTALL_PC= $(INSTALL_PKGCONFIG)/$(INSTALL_PCNAME)
-INSTALL_DIRS= $(INSTALL_BIN) $(INSTALL_LIB) $(INSTALL_INC) $(INSTALL_MAN) \
+INSTALL_DIRS= $(INSTALL_BIN) $(INSTALL_LIB) $(INSTALL_INC) \
$(INSTALL_PKGCONFIG) $(INSTALL_JITLIB) $(INSTALL_LMOD) $(INSTALL_CMOD)
RM= rm -f
@@ -73,7 +71,6 @@
FILE_T= luajit
FILE_A= libluajit.a
FILE_SO= libluajit.so
-FILE_MAN= luajit.1
FILE_PC= luajit.pc
FILES_INC= lua.h lualib.h lauxlib.h luaconf.h lua.hpp luajit.h
FILES_JITLIB= bc.lua v.lua dump.lua dis_x86.lua dis_x64.lua dis_arm.lua \
@@ -108,7 +105,6 @@
$(LDCONFIG) $(INSTALL_LIB) && \
$(SYMLINK) $(INSTALL_SONAME) $(INSTALL_SHORT1) && \
$(SYMLINK) $(INSTALL_SONAME) $(INSTALL_SHORT2) || :
- cd etc && $(INSTALL_F) $(FILE_MAN) $(INSTALL_MAN)
cd etc && $(SED_PC) $(FILE_PC) > $(FILE_PC).tmp && \
$(INSTALL_F) $(FILE_PC).tmp $(INSTALL_PC) && \
$(RM) $(FILE_PC).tmp

View File

@ -1,47 +0,0 @@
--- bundle/lua-5.1.5/Makefile.orig 2012-08-07 14:56:49.606517458 +0400
+++ bundle/lua-5.1.5/Makefile 2012-08-07 14:57:31.325545994 +0400
@@ -13,7 +13,6 @@
INSTALL_BIN= $(INSTALL_TOP)/bin
INSTALL_INC= $(INSTALL_TOP)/include
INSTALL_LIB= $(INSTALL_TOP)/lib
-INSTALL_MAN= $(INSTALL_TOP)/man/man1
#
# You probably want to make INSTALL_LMOD and INSTALL_CMOD consistent with
# LUA_ROOT, LUA_LDIR, and LUA_CDIR in luaconf.h (and also with etc/lua.pc).
@@ -44,7 +43,6 @@
TO_BIN= lua luac
TO_INC= lua.h luaconf.h lualib.h lauxlib.h ../etc/lua.hpp
TO_LIB= liblua.a
-TO_MAN= lua.1 luac.1
# Lua version and release.
V= 5.1
@@ -59,11 +57,10 @@
src/lua test/hello.lua
install: dummy
- cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_MAN) $(INSTALL_LMOD) $(INSTALL_CMOD)
+ cd src && $(MKDIR) $(INSTALL_BIN) $(INSTALL_INC) $(INSTALL_LIB) $(INSTALL_LMOD) $(INSTALL_CMOD)
cd src && $(INSTALL_EXEC) $(TO_BIN) $(INSTALL_BIN)
cd src && $(INSTALL_DATA) $(TO_INC) $(INSTALL_INC)
cd src && $(INSTALL_DATA) $(TO_LIB) $(INSTALL_LIB)
- cd doc && $(INSTALL_DATA) $(TO_MAN) $(INSTALL_MAN)
ranlib:
cd src && cd $(INSTALL_LIB) && $(RANLIB) $(TO_LIB)
@@ -95,7 +92,6 @@
@echo "INSTALL_BIN = $(INSTALL_BIN)"
@echo "INSTALL_INC = $(INSTALL_INC)"
@echo "INSTALL_LIB = $(INSTALL_LIB)"
- @echo "INSTALL_MAN = $(INSTALL_MAN)"
@echo "INSTALL_LMOD = $(INSTALL_LMOD)"
@echo "INSTALL_CMOD = $(INSTALL_CMOD)"
@echo "INSTALL_EXEC = $(INSTALL_EXEC)"
@@ -111,7 +107,6 @@
@echo "TO_BIN = $(TO_BIN)"
@echo "TO_INC = $(TO_INC)"
@echo "TO_LIB = $(TO_LIB)"
- @echo "TO_MAN = $(TO_MAN)"
# echo config parameters as Lua code
# uncomment the last sed expression if you want nil instead of empty strings

View File

@ -1,12 +0,0 @@
--- configure.orig 2012-08-08 11:10:58.575960219 +0400
+++ configure 2012-08-08 11:11:38.950486311 +0400
@@ -157,6 +157,9 @@
} elsif ($opt eq '--without-lua_redis_parser') {
$resty_opts{no_lua_redis_parser} = 1;
+ } elsif ($opt eq '--without-lua_resty_dns') {
+ $resty_opts{no_lua_resty_dns} = 1;
+
} elsif ($opt eq '--without-lua_resty_memcached') {
$resty_opts{no_lua_resty_memcached} = 1;

View File

@ -1,6 +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.
WWW: http://openresty.org

View File

@ -1,95 +0,0 @@
%%LUA%%lua/bin/luac
%%LUA%%lua/bin/lua
%%LUA%%lua/lib/liblua.a
%%LUA%%lua/include/luaconf.h
%%LUA%%lua/include/lauxlib.h
%%LUA%%lua/include/lua.h
%%LUA%%lua/include/lua.hpp
%%LUA%%lua/include/lualib.h
%%LUAJIT%%luajit/include/luajit-2.0/luaconf.h
%%LUAJIT%%luajit/include/luajit-2.0/lua.hpp
%%LUAJIT%%luajit/include/luajit-2.0/lualib.h
%%LUAJIT%%luajit/include/luajit-2.0/luajit.h
%%LUAJIT%%luajit/include/luajit-2.0/lauxlib.h
%%LUAJIT%%luajit/include/luajit-2.0/lua.h
%%LUAJIT%%luajit/lib/libluajit-5.1.a
%%LUAJIT%%luajit/lib/libluajit-5.1.so.2.0.0
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/dump.lua
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/dis_mipsel.lua
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/bc.lua
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/dis_mips.lua
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/dis_x64.lua
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/v.lua
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/dis_ppc.lua
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/dis_arm.lua
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/vmdef.lua
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/dis_x86.lua
%%LUAJIT%%luajit/share/luajit-2.0.0-beta10/jit/bcsave.lua
%%LUAJIT%%luajit/bin/luajit-2.0.0-beta10
nginx/html/index.html
nginx/html/50x.html
nginx/conf/koi-win
nginx/conf/koi-utf
nginx/conf/fastcgi_params
nginx/conf/nginx.conf.default
nginx/conf/fastcgi.conf
nginx/conf/win-utf
nginx/conf/fastcgi.conf.default
nginx/conf/scgi_params
nginx/conf/uwsgi_params
nginx/conf/mime.types
nginx/conf/scgi_params.default
nginx/conf/nginx.conf
nginx/conf/uwsgi_params.default
nginx/conf/mime.types.default
nginx/conf/fastcgi_params.default
nginx/sbin/nginx
%%LUARESTYDNS%%lualib/resty/dns/resolver.lua
%%LUARESTYUPLOAD%%lualib/resty/upload.lua
%%LUARESTYSTRING%%lualib/resty/sha1.lua
%%LUARESTYSTRING%%lualib/resty/random.lua
%%LUARESTYSTRING%%lualib/resty/md5.lua
%%LUARESTYSTRING%%lualib/resty/aes.lua
%%LUARESTYSTRING%%lualib/resty/sha384.lua
%%LUARESTYMYSQL%%lualib/resty/mysql.lua
%%LUARESTYMEM%%lualib/resty/memcached.lua
%%LUARESTYREDIS%%lualib/resty/redis.lua
%%LUARESTYSTRING%%lualib/resty/sha512.lua
%%LUARESTYSTRING%%lualib/resty/sha256.lua
%%LUARESTYSTRING%%lualib/resty/string.lua
%%LUARESTYSTRING%%lualib/resty/sha224.lua
%%LUARESTYSTRING%%lualib/resty/sha.lua
%%LUARDS%%lualib/rds/parser.so
%%LUACJSON%%lualib/cjson.so
%%LUAREDISPARS%%lualib/redis/parser.so
@dirrmtry nginx/sbin
@dirrmtry nginx/logs
@dirrmtry nginx/html
@dirrmtry nginx/conf
@dirrmtry nginx
%%LUARESTYDNS%%@dirrm lualib/resty/dns
@dirrmtry lualib/resty
%%LUAREDISPARS%%@dirrmtry lualib/redis
%%LUARDS%%@dirrmtry lualib/rds
@dirrmtry lualib
%%LUA%%@dirrm lua/share/lua/5.1
%%LUA%%@dirrm lua/share/lua
%%LUA%%@dirrm lua/share
%%LUA%%@dirrm lua/lib/lua/5.1
%%LUA%%@dirrm lua/lib/lua
%%LUA%%@dirrm lua/lib
%%LUA%%@dirrm lua/include
%%LUA%%@dirrm lua/bin
%%LUA%%@dirrm lua
%%LUAJIT%%@dirrm luajit/share/luajit-2.0.0-beta10/jit
%%LUAJIT%%@dirrm luajit/share/luajit-2.0.0-beta10
%%LUAJIT%%@dirrm luajit/include/luajit-2.0
%%LUAJIT%%@dirrm luajit/include
%%LUAJIT%%@dirrm luajit/share/lua/5.1
%%LUAJIT%%@dirrm luajit/share/lua
%%LUAJIT%%@dirrm luajit/share
%%LUAJIT%%@dirrm luajit/lib/lua/5.1
%%LUAJIT%%@dirrm luajit/lib/lua
%%LUAJIT%%@dirrm luajit/lib
%%LUAJIT%%@dirrm luajit/bin
%%LUAJIT%%@dirrm luajit

10
README
View File

@ -27,16 +27,6 @@ For bundle maintainers:
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:

View File

@ -1,14 +0,0 @@
--- lua-5.1.5/src/luaconf.h 2008-02-11 08:25:08.000000000 -0800
+++ lua-5.1.5-patched/src/luaconf.h 2012-07-04 18:36:05.700067698 -0700
@@ -757,6 +757,11 @@
** without modifying the main part of the file.
*/
+#undef LUA_COMPAT_VARARG
+#undef LUA_COMPAT_MOD
+#undef LUA_COMPAT_LSTR
+#undef LUA_COMPAT_GFIND
+#undef LUA_COMPAT_OPENLIB
#endif

View File

@ -1,11 +0,0 @@
--- 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

View File

@ -1,23 +0,0 @@
--- lua-5.1.5/Makefile 2008-08-12 08:40:48.000000000 +0800
+++ lua-5.1.5-patched/Makefile 2011-03-09 20:56:47.603422483 +0800
@@ -22,14 +22,14 @@
# How to install. If your install program does not support "-p", then you
# may have to run ranlib on the installed liblua.a (do "make ranlib").
-INSTALL= install -p
-INSTALL_EXEC= $(INSTALL) -m 0755
-INSTALL_DATA= $(INSTALL) -m 0644
+#INSTALL= install -p
+#INSTALL_EXEC= $(INSTALL) -m 0755
+#INSTALL_DATA= $(INSTALL) -m 0644
#
# If you don't have install you can use cp instead.
-# INSTALL= cp -p
-# INSTALL_EXEC= $(INSTALL)
-# INSTALL_DATA= $(INSTALL)
+INSTALL= cp -p
+INSTALL_EXEC= $(INSTALL)
+INSTALL_DATA= $(INSTALL)
# Utilities.
MKDIR= mkdir -p

View File

@ -1,202 +0,0 @@
diff --git a/doc/ext_ffi_semantics.html b/doc/ext_ffi_semantics.html
index bf9f9be..30aa964 100644
--- a/doc/ext_ffi_semantics.html
+++ b/doc/ext_ffi_semantics.html
@@ -517,17 +517,17 @@ A VLA is only initialized with the element(s) given in the table.
Depending on the use case, you may need to explicitly add a
<tt>NULL</tt> or <tt>0</tt> terminator to a VLA.</li>
-<li>If the table has a non-empty hash part, a
-<tt>struct</tt>/<tt>union</tt> is initialized by looking up each field
-name (as a string key) in the table. Each non-<tt>nil</tt> value is
-used to initialize the corresponding field.</li>
-
-<li>Otherwise a <tt>struct</tt>/<tt>union</tt> is initialized in the
+<li>A <tt>struct</tt>/<tt>union</tt> can be initialized in the
order of the declaration of its fields. Each field is initialized with
-the consecutive table elements, starting at either index <tt>[0]</tt>
+consecutive table elements, starting at either index <tt>[0]</tt>
or <tt>[1]</tt>. This process stops at the first <tt>nil</tt> table
element.</li>
+<li>Otherwise, if neither index <tt>[0]</tt> nor <tt>[1]</tt> is present,
+a <tt>struct</tt>/<tt>union</tt> is initialized by looking up each field
+name (as a string key) in the table. Each non-<tt>nil</tt> value is
+used to initialize the corresponding field.</li>
+
<li>Uninitialized fields of a <tt>struct</tt> are filled with zero
bytes, except for the trailing VLA of a VLS.</li>
diff --git a/doc/running.html b/doc/running.html
index 7870a5d..97c5c03 100644
--- a/doc/running.html
+++ b/doc/running.html
@@ -250,6 +250,8 @@ are enabled:
<tr class="even">
<td class="flag_name">abc</td><td class="flag_level">&nbsp;</td><td class="flag_level">&nbsp;</td><td class="flag_level">&bull;</td><td class="flag_desc">Array Bounds Check Elimination</td></tr>
<tr class="odd">
+<td class="flag_name">sink</td><td class="flag_level">&nbsp;</td><td class="flag_level">&nbsp;</td><td class="flag_level">&bull;</td><td class="flag_desc">Allocation/Store Sinking</td></tr>
+<tr class="even">
<td class="flag_name">fuse</td><td class="flag_level">&nbsp;</td><td class="flag_level">&nbsp;</td><td class="flag_level">&bull;</td><td class="flag_desc">Fusion of operands into instructions</td></tr>
</table>
<p>
diff --git a/src/lj_arch.h b/src/lj_arch.h
index 25c2cff..220f3df 100644
--- a/src/lj_arch.h
+++ b/src/lj_arch.h
@@ -300,7 +300,11 @@
/* Check target-specific constraints. */
#ifndef _BUILDVM_H
-#if LJ_TARGET_ARM
+#if LJ_TARGET_X64
+#if __USING_SJLJ_EXCEPTIONS__
+#error "Need a C compiler with native exception handling on x64"
+#endif
+#elif LJ_TARGET_ARM
#if defined(__ARMEB__)
#error "No support for big-endian ARM"
#endif
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
index 6d7dd5a..241da5a 100644
--- a/src/lj_asm_x86.h
+++ b/src/lj_asm_x86.h
@@ -367,6 +367,18 @@ static Reg asm_fuseload(ASMState *as, IRRef ref, RegSet allow)
return ra_allocref(as, ref, allow);
}
+#if LJ_64
+/* Don't fuse a 32 bit load into a 64 bit operation. */
+static Reg asm_fuseloadm(ASMState *as, IRRef ref, RegSet allow, int is64)
+{
+ if (is64 && !irt_is64(IR(ref)->t))
+ return ra_alloc1(as, ref, allow);
+ return asm_fuseload(as, ref, allow);
+}
+#else
+#define asm_fuseloadm(as, ref, allow, is64) asm_fuseload(as, (ref), (allow))
+#endif
+
/* -- Calls --------------------------------------------------------------- */
/* Count the required number of stack slots for a call. */
@@ -696,7 +708,7 @@ static void asm_conv(ASMState *as, IRIns *ir)
} else { /* Integer to FP conversion. */
Reg left = (LJ_64 && (st == IRT_U32 || st == IRT_U64)) ?
ra_alloc1(as, lref, RSET_GPR) :
- asm_fuseload(as, lref, RSET_GPR);
+ asm_fuseloadm(as, lref, RSET_GPR, st64);
if (LJ_64 && st == IRT_U64) {
MCLabel l_end = emit_label(as);
const void *k = lj_ir_k64_find(as->J, U64x(43f00000,00000000));
@@ -1829,7 +1841,7 @@ static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa)
if (asm_swapops(as, ir)) {
IRRef tmp = lref; lref = rref; rref = tmp;
}
- right = asm_fuseload(as, rref, rset_clear(allow, dest));
+ right = asm_fuseloadm(as, rref, rset_clear(allow, dest), irt_is64(ir->t));
}
if (irt_isguard(ir->t)) /* For IR_ADDOV etc. */
asm_guardcc(as, CC_O);
@@ -1842,7 +1854,7 @@ static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa)
emit_mrm(as, XO_IMUL, REX_64IR(ir, dest), right);
} else { /* IMUL r, r, k. */
/* NYI: use lea/shl/add/sub (FOLD only does 2^k) depending on CPU. */
- Reg left = asm_fuseload(as, lref, RSET_GPR);
+ Reg left = asm_fuseloadm(as, lref, RSET_GPR, irt_is64(ir->t));
x86Op xo;
if (checki8(k)) { emit_i8(as, k); xo = XO_IMULi8;
} else { emit_i32(as, k); xo = XO_IMULi; }
@@ -2072,7 +2084,7 @@ static void asm_comp(ASMState *as, IRIns *ir, uint32_t cc)
Reg r64 = REX_64IR(ir, 0);
int32_t imm = 0;
lua_assert(irt_is64(ir->t) || irt_isint(ir->t) ||
- irt_isu32(ir->t) || irt_isaddr(ir->t));
+ irt_isu32(ir->t) || irt_isaddr(ir->t) || irt_isu8(ir->t));
/* Swap constants (only for ABC) and fusable loads to the right. */
if (irref_isk(lref) || (!irref_isk(rref) && opisfusableload(leftop))) {
if ((cc & 0xc) == 0xc) cc ^= 0x53; /* L <-> G, LE <-> GE */
@@ -2109,7 +2121,7 @@ static void asm_comp(ASMState *as, IRIns *ir, uint32_t cc)
}
}
as->curins--; /* Skip to BAND to avoid failing in noconflict(). */
- right = asm_fuseload(as, irl->op1, allow);
+ right = asm_fuseloadm(as, irl->op1, allow, r64);
as->curins++; /* Undo the above. */
test_nofuse:
asm_guardcc(as, cc);
@@ -2146,7 +2158,7 @@ static void asm_comp(ASMState *as, IRIns *ir, uint32_t cc)
return;
} /* Otherwise handle register case as usual. */
} else {
- left = asm_fuseload(as, lref, RSET_GPR);
+ left = asm_fuseloadm(as, lref, RSET_GPR, r64);
}
asm_guardcc(as, cc);
if (usetest && left != RID_MRM) {
@@ -2160,7 +2172,7 @@ static void asm_comp(ASMState *as, IRIns *ir, uint32_t cc)
}
} else {
Reg left = ra_alloc1(as, lref, RSET_GPR);
- Reg right = asm_fuseload(as, rref, rset_exclude(RSET_GPR, left));
+ Reg right = asm_fuseloadm(as, rref, rset_exclude(RSET_GPR, left), r64);
asm_guardcc(as, cc);
emit_mrm(as, XO_CMP, r64 + left, right);
}
diff --git a/src/lj_cconv.c b/src/lj_cconv.c
index b81b4e9..7b32e35 100644
--- a/src/lj_cconv.c
+++ b/src/lj_cconv.c
@@ -493,17 +493,19 @@ static void cconv_substruct_tab(CTState *cts, CType *d, uint8_t *dp,
id = df->sib;
if (ctype_isfield(df->info) || ctype_isbitfield(df->info)) {
TValue *tv;
- int32_t i = *ip;
+ int32_t i = *ip, iz = i;
if (!gcref(df->name)) continue; /* Ignore unnamed fields. */
if (i >= 0) {
retry:
tv = (TValue *)lj_tab_getint(t, i);
if (!tv || tvisnil(tv)) {
if (i == 0) { i = 1; goto retry; } /* 1-based tables. */
+ if (iz == 0) { *ip = i = -1; goto tryname; } /* Init named fields. */
break; /* Stop at first nil. */
}
*ip = i + 1;
} else {
+ tryname:
tv = (TValue *)lj_tab_getstr(t, gco2str(gcref(df->name)));
if (!tv || tvisnil(tv)) continue;
}
@@ -524,7 +526,6 @@ static void cconv_struct_tab(CTState *cts, CType *d,
{
int32_t i = 0;
memset(dp, 0, d->size); /* Much simpler to clear the struct first. */
- if (t->hmask) i = -1; else if (t->asize == 0) return; /* Fast exit. */
cconv_substruct_tab(cts, d, dp, t, &i, flags);
}
diff --git a/src/lj_err.c b/src/lj_err.c
index 60d8fe1..fd3545e 100644
--- a/src/lj_err.c
+++ b/src/lj_err.c
@@ -485,7 +485,6 @@ LJ_NOINLINE void lj_err_mem(lua_State *L)
{
if (L->status == LUA_ERRERR+1) /* Don't touch the stack during lua_open. */
lj_vm_unwind_c(L->cframe, LUA_ERRMEM);
- L->top = L->base;
setstrV(L, L->top++, lj_err_str(L, LJ_ERR_ERRMEM));
lj_err_throw(L, LUA_ERRMEM);
}
diff --git a/src/lj_parse.c b/src/lj_parse.c
index 2fecaef..92ebc04 100644
--- a/src/lj_parse.c
+++ b/src/lj_parse.c
@@ -1825,6 +1825,7 @@ static void expr_table(LexState *ls, ExpDesc *e)
}
}
}
+ lj_gc_check(fs->L);
}
}

View File

@ -1,14 +0,0 @@
--- nginx-1.0.11/src/http/ngx_http_request.h 2011-08-29 18:39:23.000000000 +0800
+++ nginx-1.0.11-patched/src/http/ngx_http_request.h 2012-02-20 15:50:43.540762756 +0800
@@ -9,7 +9,10 @@
#define NGX_HTTP_MAX_URI_CHANGES 10
-#define NGX_HTTP_MAX_SUBREQUESTS 50
+
+#ifndef NGX_HTTP_MAX_SUBREQUESTS
+#define NGX_HTTP_MAX_SUBREQUESTS 200
+#endif
/* must be 2^n */
#define NGX_HTTP_LC_HEADER_LEN 32

View File

@ -1,113 +0,0 @@
--- src/http/modules/ngx_http_fastcgi_module.c
+++ src/http/modules/ngx_http_fastcgi_module.c
@@ -1501,10 +1501,10 @@ ngx_http_fastcgi_process_header(ngx_http
h->lowcase_key = h->key.data + h->key.len + 1
+ h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start,
- h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start,
- h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
}
h->hash = r->header_hash;
--- src/http/modules/ngx_http_proxy_module.c
+++ src/http/modules/ngx_http_proxy_module.c
@@ -1381,8 +1381,10 @@ ngx_http_proxy_process_header(ngx_http_r
h->value.data = h->key.data + h->key.len + 1;
h->lowcase_key = h->key.data + h->key.len + 1 + h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
if (h->key.len == r->lowcase_index) {
ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
--- src/http/modules/ngx_http_scgi_module.c
+++ src/http/modules/ngx_http_scgi_module.c
@@ -941,8 +941,10 @@ ngx_http_scgi_process_header(ngx_http_re
h->value.data = h->key.data + h->key.len + 1;
h->lowcase_key = h->key.data + h->key.len + 1 + h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
if (h->key.len == r->lowcase_index) {
ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
--- src/http/modules/ngx_http_uwsgi_module.c
+++ src/http/modules/ngx_http_uwsgi_module.c
@@ -985,8 +985,10 @@ ngx_http_uwsgi_process_header(ngx_http_r
h->value.data = h->key.data + h->key.len + 1;
h->lowcase_key = h->key.data + h->key.len + 1 + h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
if (h->key.len == r->lowcase_index) {
ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
--- src/http/ngx_http_parse.c
+++ src/http/ngx_http_parse.c
@@ -874,6 +874,10 @@ ngx_http_parse_header_line(ngx_http_requ
break;
}
+ if (ch == '\0') {
+ return NGX_HTTP_PARSE_INVALID_HEADER;
+ }
+
r->invalid_header = 1;
break;
@@ -936,6 +940,10 @@ ngx_http_parse_header_line(ngx_http_requ
break;
}
+ if (ch == '\0') {
+ return NGX_HTTP_PARSE_INVALID_HEADER;
+ }
+
r->invalid_header = 1;
break;
@@ -954,6 +962,8 @@ ngx_http_parse_header_line(ngx_http_requ
r->header_start = p;
r->header_end = p;
goto done;
+ case '\0':
+ return NGX_HTTP_PARSE_INVALID_HEADER;
default:
r->header_start = p;
state = sw_value;
@@ -975,6 +985,8 @@ ngx_http_parse_header_line(ngx_http_requ
case LF:
r->header_end = p;
goto done;
+ case '\0':
+ return NGX_HTTP_PARSE_INVALID_HEADER;
}
break;
@@ -988,6 +1000,8 @@ ngx_http_parse_header_line(ngx_http_requ
break;
case LF:
goto done;
+ case '\0':
+ return NGX_HTTP_PARSE_INVALID_HEADER;
default:
state = sw_value;
break;

View File

@ -1,32 +0,0 @@
diff -ur nginx-1.0.11/src/http/ngx_http_upstream.c nginx-1.0.11-patched/src/http/ngx_http_upstream.c
--- nginx-1.0.11/src/http/ngx_http_upstream.c 2011-12-14 02:34:34.000000000 +0800
+++ nginx-1.0.11-patched/src/http/ngx_http_upstream.c 2012-03-21 21:20:17.333111806 +0800
@@ -1385,6 +1385,8 @@
/* 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,
@@ -1451,7 +1453,7 @@
#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 -ur nginx-1.0.11/src/http/ngx_http_upstream.h nginx-1.0.11-patched/src/http/ngx_http_upstream.h
--- nginx-1.0.11/src/http/ngx_http_upstream.h 2011-11-01 22:18:10.000000000 +0800
+++ nginx-1.0.11-patched/src/http/ngx_http_upstream.h 2012-03-21 21:18:21.041237173 +0800
@@ -313,6 +313,7 @@
unsigned buffering:1;
unsigned request_sent:1;
+ unsigned request_all_sent:1;
unsigned header_sent:1;
};

View File

@ -1,20 +0,0 @@
--- nginx-1.0.12/src/event/modules/ngx_epoll_module.c 2011-09-30 22:12:53.000000000 +0800
+++ nginx-1.0.12-patched/src/event/modules/ngx_epoll_module.c 2011-11-30 11:08:46.775817019 +0800
@@ -682,6 +682,17 @@
wev = c->write;
if ((revents & EPOLLOUT) && wev->active) {
+ if (c->fd == -1 || wev->instance != instance) {
+
+ /*
+ * the stale event from a file descriptor
+ * that was just closed in this iteration
+ */
+
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "epoll: stale event %p", c);
+ continue;
+ }
if (flags & NGX_POST_THREAD_EVENTS) {
wev->posted_ready = 1;

View File

@ -1,115 +0,0 @@
--- nginx-1.0.12/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.0.12-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;

View File

@ -1,14 +0,0 @@
--- nginx-1.0.12/src/http/ngx_http_request.h 2011-08-29 18:39:23.000000000 +0800
+++ nginx-1.0.12-patched/src/http/ngx_http_request.h 2012-02-20 15:50:43.540762756 +0800
@@ -9,7 +9,10 @@
#define NGX_HTTP_MAX_URI_CHANGES 10
-#define NGX_HTTP_MAX_SUBREQUESTS 50
+
+#ifndef NGX_HTTP_MAX_SUBREQUESTS
+#define NGX_HTTP_MAX_SUBREQUESTS 200
+#endif
/* must be 2^n */
#define NGX_HTTP_LC_HEADER_LEN 32

View File

@ -1,12 +0,0 @@
--- nginx-1.0.12/src/http/ngx_http_core_module.c 2011-09-27 19:14:02.000000000 +0800
+++ nginx-1.0.12-patched/src/http/ngx_http_core_module.c 2011-10-13 15:02:24.414550532 +0800
@@ -2542,6 +2542,9 @@
r->content_handler = NULL;
r->loc_conf = (*clcfp)->loc_conf;
+ /* clear the modules contexts */
+ ngx_memzero(r->ctx, sizeof(void *) * ngx_http_max_module);
+
ngx_http_update_location_config(r);
cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);

View File

@ -1,24 +0,0 @@
diff -ur nginx-1.0.12/auto/cc/gcc nginx-1.0.12-patched/auto/cc/gcc
--- nginx-1.0.12/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.0.12-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.0.12/auto/cc/icc nginx-1.0.12-patched/auto/cc/icc
--- nginx-1.0.12/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.0.12-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"

View File

@ -1,90 +0,0 @@
--- nginx-1.0.12/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.0.12-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;

View File

@ -1,26 +0,0 @@
diff -ur lz-nginx-1.0.12/nginx-1.0.12/src/core/nginx.h lz-nginx-1.0.12-patched/nginx-1.0.12/src/core/nginx.h
--- lz-nginx-1.0.12/nginx-1.0.12/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ lz-nginx-1.0.12-patched/nginx-1.0.12/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1000012
#define NGINX_VERSION "1.0.12"
-#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.0.12-patched/nginx-1.0.12/src/core: nginx.h.orig
Only in lz-nginx-1.0.12-patched/nginx-1.0.12/src/core: nginx.h.rej
diff -ur lz-nginx-1.0.12/nginx-1.0.12/src/http/ngx_http_header_filter_module.c lz-nginx-1.0.12-patched/nginx-1.0.12/src/http/ngx_http_header_filter_module.c
--- lz-nginx-1.0.12/nginx-1.0.12/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ lz-nginx-1.0.12-patched/nginx-1.0.12/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;

View File

@ -1,113 +0,0 @@
diff -ur nginx-1.0.14/src/http/ngx_http_request_body.c nginx-1.0.14-patched/src/http/ngx_http_request_body.c
--- nginx-1.0.14/src/http/ngx_http_request_body.c 2011-09-30 22:36:19.000000000 +0800
+++ nginx-1.0.14-patched/src/http/ngx_http_request_body.c 2011-10-21 21:54:08.460350482 +0800
@@ -38,7 +38,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;
}
@@ -440,7 +440,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;
}
@@ -456,20 +456,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;
}
}
@@ -568,7 +570,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;
}
@@ -577,9 +579,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);
@@ -596,7 +598,7 @@
return NGX_OK;
}
- r->headers_in.content_length_n -= n;
+ r->content_length_n -= n;
}
}
diff -ur nginx-1.0.14/src/http/ngx_http_request.c nginx-1.0.14-patched/src/http/ngx_http_request.c
--- nginx-1.0.14/src/http/ngx_http_request.c 2011-09-30 22:36:19.000000000 +0800
+++ nginx-1.0.14-patched/src/http/ngx_http_request.c 2011-10-21 19:06:38.404350692 +0800
@@ -286,6 +286,8 @@
r->pipeline = hc->pipeline;
+ r->content_length_n = -1;
+
if (hc->nbusy) {
r->header_in = hc->busy[0];
}
@@ -297,6 +299,8 @@
return;
}
+ r->content_length_n = -1;
+
hc->request = r;
}
diff -ur nginx-1.0.14/src/http/ngx_http_request.h nginx-1.0.14-patched/src/http/ngx_http_request.h
--- nginx-1.0.14/src/http/ngx_http_request.h 2011-08-29 18:39:23.000000000 +0800
+++ nginx-1.0.14-patched/src/http/ngx_http_request.h 2011-10-21 17:26:13.203807584 +0800
@@ -366,6 +366,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;

View File

@ -1,115 +0,0 @@
--- nginx-1.0.14/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.0.14-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;

View File

@ -1,14 +0,0 @@
--- nginx-1.0.14/src/http/ngx_http_request.h 2011-08-29 18:39:23.000000000 +0800
+++ nginx-1.0.14-patched/src/http/ngx_http_request.h 2012-02-20 15:50:43.540762756 +0800
@@ -9,7 +9,10 @@
#define NGX_HTTP_MAX_URI_CHANGES 10
-#define NGX_HTTP_MAX_SUBREQUESTS 50
+
+#ifndef NGX_HTTP_MAX_SUBREQUESTS
+#define NGX_HTTP_MAX_SUBREQUESTS 200
+#endif
/* must be 2^n */
#define NGX_HTTP_LC_HEADER_LEN 32

View File

@ -1,24 +0,0 @@
diff -ur nginx-1.0.14/auto/cc/gcc nginx-1.0.14-patched/auto/cc/gcc
--- nginx-1.0.14/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.0.14-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.0.14/auto/cc/icc nginx-1.0.14-patched/auto/cc/icc
--- nginx-1.0.14/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.0.14-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"

View File

@ -1,113 +0,0 @@
--- src/http/modules/ngx_http_fastcgi_module.c
+++ src/http/modules/ngx_http_fastcgi_module.c
@@ -1501,10 +1501,10 @@ ngx_http_fastcgi_process_header(ngx_http
h->lowcase_key = h->key.data + h->key.len + 1
+ h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start,
- h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start,
- h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
}
h->hash = r->header_hash;
--- src/http/modules/ngx_http_proxy_module.c
+++ src/http/modules/ngx_http_proxy_module.c
@@ -1381,8 +1381,10 @@ ngx_http_proxy_process_header(ngx_http_r
h->value.data = h->key.data + h->key.len + 1;
h->lowcase_key = h->key.data + h->key.len + 1 + h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
if (h->key.len == r->lowcase_index) {
ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
--- src/http/modules/ngx_http_scgi_module.c
+++ src/http/modules/ngx_http_scgi_module.c
@@ -941,8 +941,10 @@ ngx_http_scgi_process_header(ngx_http_re
h->value.data = h->key.data + h->key.len + 1;
h->lowcase_key = h->key.data + h->key.len + 1 + h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
if (h->key.len == r->lowcase_index) {
ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
--- src/http/modules/ngx_http_uwsgi_module.c
+++ src/http/modules/ngx_http_uwsgi_module.c
@@ -985,8 +985,10 @@ ngx_http_uwsgi_process_header(ngx_http_r
h->value.data = h->key.data + h->key.len + 1;
h->lowcase_key = h->key.data + h->key.len + 1 + h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
if (h->key.len == r->lowcase_index) {
ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
--- src/http/ngx_http_parse.c
+++ src/http/ngx_http_parse.c
@@ -874,6 +874,10 @@ ngx_http_parse_header_line(ngx_http_requ
break;
}
+ if (ch == '\0') {
+ return NGX_HTTP_PARSE_INVALID_HEADER;
+ }
+
r->invalid_header = 1;
break;
@@ -936,6 +940,10 @@ ngx_http_parse_header_line(ngx_http_requ
break;
}
+ if (ch == '\0') {
+ return NGX_HTTP_PARSE_INVALID_HEADER;
+ }
+
r->invalid_header = 1;
break;
@@ -954,6 +962,8 @@ ngx_http_parse_header_line(ngx_http_requ
r->header_start = p;
r->header_end = p;
goto done;
+ case '\0':
+ return NGX_HTTP_PARSE_INVALID_HEADER;
default:
r->header_start = p;
state = sw_value;
@@ -975,6 +985,8 @@ ngx_http_parse_header_line(ngx_http_requ
case LF:
r->header_end = p;
goto done;
+ case '\0':
+ return NGX_HTTP_PARSE_INVALID_HEADER;
}
break;
@@ -988,6 +1000,8 @@ ngx_http_parse_header_line(ngx_http_requ
break;
case LF:
goto done;
+ case '\0':
+ return NGX_HTTP_PARSE_INVALID_HEADER;
default:
state = sw_value;
break;

View File

@ -1,26 +0,0 @@
diff -ur lz-nginx-1.0.14/nginx-1.0.14/src/core/nginx.h lz-nginx-1.0.14-patched/nginx-1.0.14/src/core/nginx.h
--- lz-nginx-1.0.14/nginx-1.0.14/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ lz-nginx-1.0.14-patched/nginx-1.0.14/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1000014
#define NGINX_VERSION "1.0.14"
-#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.0.14-patched/nginx-1.0.14/src/core: nginx.h.orig
Only in lz-nginx-1.0.14-patched/nginx-1.0.14/src/core: nginx.h.rej
diff -ur lz-nginx-1.0.14/nginx-1.0.14/src/http/ngx_http_header_filter_module.c lz-nginx-1.0.14-patched/nginx-1.0.14/src/http/ngx_http_header_filter_module.c
--- lz-nginx-1.0.14/nginx-1.0.14/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ lz-nginx-1.0.14-patched/nginx-1.0.14/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;

View File

@ -1,32 +0,0 @@
diff -ur nginx-1.0.14/src/http/ngx_http_upstream.c nginx-1.0.14-patched/src/http/ngx_http_upstream.c
--- nginx-1.0.14/src/http/ngx_http_upstream.c 2011-12-14 02:34:34.000000000 +0800
+++ nginx-1.0.14-patched/src/http/ngx_http_upstream.c 2012-03-21 21:20:17.333111806 +0800
@@ -1385,6 +1385,8 @@
/* 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,
@@ -1451,7 +1453,7 @@
#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 -ur nginx-1.0.14/src/http/ngx_http_upstream.h nginx-1.0.14-patched/src/http/ngx_http_upstream.h
--- nginx-1.0.14/src/http/ngx_http_upstream.h 2011-11-01 22:18:10.000000000 +0800
+++ nginx-1.0.14-patched/src/http/ngx_http_upstream.h 2012-03-21 21:18:21.041237173 +0800
@@ -313,6 +313,7 @@
unsigned buffering:1;
unsigned request_sent:1;
+ unsigned request_all_sent:1;
unsigned header_sent:1;
};

View File

@ -1,26 +0,0 @@
--- nginx-1.0.15/src/http/ngx_http_variables.c 2012-03-05 20:36:51.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_variables.c 2012-05-17 16:21:42.120968722 +0800
@@ -1898,6 +1898,7 @@
{
ngx_int_t rc;
ngx_http_variable_t *v;
+ ngx_http_variable_t *value;
ngx_http_core_main_conf_t *cmcf;
cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
@@ -1918,7 +1919,14 @@
}
for (v = ngx_http_core_variables; v->name.len; v++) {
- rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v,
+ value = ngx_palloc(cf->pool, sizeof(ngx_http_variable_t));
+ if (value == NULL) {
+ return NGX_ERROR;
+ }
+
+ *value = *v;
+
+ rc = ngx_hash_add_key(cmcf->variables_keys, &value->name, value,
NGX_HASH_READONLY_KEY);
if (rc == NGX_OK) {

View File

@ -1,113 +0,0 @@
diff -ur nginx-1.0.15/src/http/ngx_http_request_body.c nginx-1.0.15-patched/src/http/ngx_http_request_body.c
--- nginx-1.0.15/src/http/ngx_http_request_body.c 2011-09-30 22:36:19.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_request_body.c 2011-10-21 21:54:08.460350482 +0800
@@ -38,7 +38,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;
}
@@ -440,7 +440,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;
}
@@ -456,20 +456,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;
}
}
@@ -568,7 +570,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;
}
@@ -577,9 +579,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);
@@ -596,7 +598,7 @@
return NGX_OK;
}
- r->headers_in.content_length_n -= n;
+ r->content_length_n -= n;
}
}
diff -ur nginx-1.0.15/src/http/ngx_http_request.c nginx-1.0.15-patched/src/http/ngx_http_request.c
--- nginx-1.0.15/src/http/ngx_http_request.c 2011-09-30 22:36:19.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_request.c 2011-10-21 19:06:38.404350692 +0800
@@ -286,6 +286,8 @@
r->pipeline = hc->pipeline;
+ r->content_length_n = -1;
+
if (hc->nbusy) {
r->header_in = hc->busy[0];
}
@@ -297,6 +299,8 @@
return;
}
+ r->content_length_n = -1;
+
hc->request = r;
}
diff -ur nginx-1.0.15/src/http/ngx_http_request.h nginx-1.0.15-patched/src/http/ngx_http_request.h
--- nginx-1.0.15/src/http/ngx_http_request.h 2011-08-29 18:39:23.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_request.h 2011-10-21 17:26:13.203807584 +0800
@@ -366,6 +366,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;

View File

@ -1,10 +0,0 @@
--- nginx-1.0.15/src/http/ngx_http_request.c 2012-03-05 20:49:32.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_request.c 2012-05-22 20:46:57.000000000 +0800
@@ -1900,7 +1900,6 @@
if (rc == NGX_OK && r->filter_finalize) {
c->error = 1;
- return;
}
if (rc == NGX_DECLINED) {

View File

@ -1,14 +0,0 @@
--- nginx-1.0.15/src/http/ngx_http_request.h 2011-08-29 18:39:23.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_request.h 2012-02-20 15:50:43.540762756 +0800
@@ -9,7 +9,10 @@
#define NGX_HTTP_MAX_URI_CHANGES 10
-#define NGX_HTTP_MAX_SUBREQUESTS 50
+
+#ifndef NGX_HTTP_MAX_SUBREQUESTS
+#define NGX_HTTP_MAX_SUBREQUESTS 200
+#endif
/* must be 2^n */
#define NGX_HTTP_LC_HEADER_LEN 32

View File

@ -1,12 +0,0 @@
--- nginx-1.0.15/src/http/ngx_http_core_module.c 2011-09-27 19:14:02.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_core_module.c 2011-10-13 15:02:24.414550532 +0800
@@ -2542,6 +2542,9 @@
r->content_handler = NULL;
r->loc_conf = (*clcfp)->loc_conf;
+ /* clear the modules contexts */
+ ngx_memzero(r->ctx, sizeof(void *) * ngx_http_max_module);
+
ngx_http_update_location_config(r);
cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);

View File

@ -1,24 +0,0 @@
diff -ur nginx-1.0.15/auto/cc/gcc nginx-1.0.15-patched/auto/cc/gcc
--- nginx-1.0.15/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.0.15-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.0.15/auto/cc/icc nginx-1.0.15-patched/auto/cc/icc
--- nginx-1.0.15/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.0.15-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"

View File

@ -1,90 +0,0 @@
--- nginx-1.0.15/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.0.15-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;

View File

@ -1,501 +0,0 @@
diff -ur nginx-1.0.15/src/core/nginx.h nginx-1.0.15-patched/src/core/nginx.h
--- nginx-1.0.15/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
+++ nginx-1.0.15-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1000015
#define NGINX_VERSION "1.0.15"
-#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.0.15/src/core/ngx_array.c nginx-1.0.15-patched/src/core/ngx_array.c
--- nginx-1.0.15/src/core/ngx_array.c 2012-02-06 04:02:59.000000000 +0800
+++ nginx-1.0.15-patched/src/core/ngx_array.c 2012-06-04 20:11:32.494144287 +0800
@@ -40,13 +40,11 @@
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;
- }
+ ngx_pfree(p, a);
}
@@ -65,29 +63,19 @@
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);
+
+ ngx_pfree(p, a->elts);
+
+ a->elts = new;
+ a->nalloc *= 2;
}
elt = (u_char *) a->elts + a->size * a->nelts;
@@ -101,43 +89,28 @@
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;
-
if (a->nelts + n > a->nalloc) {
/* the array is full */
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);
+
+ ngx_pfree(p, a->elts);
+
+ a->elts = new;
+ a->nalloc = nalloc;
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff -urx '*~' -x '*.swp' nginx-1.0.15/src/core/ngx_palloc.c nginx-1.0.15-patched/src/core/ngx_palloc.c
--- nginx-1.0.15/src/core/ngx_palloc.c 2012-02-06 04:02:59.000000000 +0800
+++ nginx-1.0.15-patched/src/core/ngx_palloc.c 2012-06-04 20:02:26.667925891 +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 *new;
+ void *m;
- psize = (size_t) (pool->d.end - (u_char *) pool);
-
- m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);
+ m = ngx_alloc(size, pool->log);
if (m == 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;
- }
+ new = ngx_alloc(sizeof(ngx_pool_data_t), pool->log);
+ if (new == NULL){
+ ngx_free(m);
+ return NULL;
}
- p->d.next = new;
-
- pool->current = current ? current : new;
-
+ new->alloc = m;
+ new->next = pool->d;
+ pool->d = new;
return m;
}
-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);
}
@@ -263,7 +159,7 @@
return NULL;
}
- large = ngx_palloc(pool, sizeof(ngx_pool_large_t));
+ large = ngx_malloc(pool, sizeof(ngx_pool_large_t));
if (large == NULL) {
ngx_free(p);
return NULL;
@@ -278,16 +174,27 @@
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.0.15/src/core/ngx_palloc.h nginx-1.0.15-patched/src/core/ngx_palloc.h
--- nginx-1.0.15/src/core/ngx_palloc.h 2012-02-06 04:02:59.000000000 +0800
+++ nginx-1.0.15-patched/src/core/ngx_palloc.h 2012-06-04 19:39:32.803578356 +0800
@@ -39,6 +39,8 @@
typedef struct ngx_pool_large_s ngx_pool_large_t;
+typedef struct ngx_pool_data_s ngx_pool_data_t;
+
struct ngx_pool_large_s {
ngx_pool_large_t *next;
@@ -46,16 +48,14 @@
};
-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;

View File

@ -1,113 +0,0 @@
--- src/http/modules/ngx_http_fastcgi_module.c
+++ src/http/modules/ngx_http_fastcgi_module.c
@@ -1501,10 +1501,10 @@ ngx_http_fastcgi_process_header(ngx_http
h->lowcase_key = h->key.data + h->key.len + 1
+ h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start,
- h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start,
- h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
}
h->hash = r->header_hash;
--- src/http/modules/ngx_http_proxy_module.c
+++ src/http/modules/ngx_http_proxy_module.c
@@ -1381,8 +1381,10 @@ ngx_http_proxy_process_header(ngx_http_r
h->value.data = h->key.data + h->key.len + 1;
h->lowcase_key = h->key.data + h->key.len + 1 + h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
if (h->key.len == r->lowcase_index) {
ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
--- src/http/modules/ngx_http_scgi_module.c
+++ src/http/modules/ngx_http_scgi_module.c
@@ -941,8 +941,10 @@ ngx_http_scgi_process_header(ngx_http_re
h->value.data = h->key.data + h->key.len + 1;
h->lowcase_key = h->key.data + h->key.len + 1 + h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
if (h->key.len == r->lowcase_index) {
ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
--- src/http/modules/ngx_http_uwsgi_module.c
+++ src/http/modules/ngx_http_uwsgi_module.c
@@ -985,8 +985,10 @@ ngx_http_uwsgi_process_header(ngx_http_r
h->value.data = h->key.data + h->key.len + 1;
h->lowcase_key = h->key.data + h->key.len + 1 + h->value.len + 1;
- ngx_cpystrn(h->key.data, r->header_name_start, h->key.len + 1);
- ngx_cpystrn(h->value.data, r->header_start, h->value.len + 1);
+ ngx_memcpy(h->key.data, r->header_name_start, h->key.len);
+ h->key.data[h->key.len] = '\0';
+ ngx_memcpy(h->value.data, r->header_start, h->value.len);
+ h->value.data[h->value.len] = '\0';
if (h->key.len == r->lowcase_index) {
ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
--- src/http/ngx_http_parse.c
+++ src/http/ngx_http_parse.c
@@ -874,6 +874,10 @@ ngx_http_parse_header_line(ngx_http_requ
break;
}
+ if (ch == '\0') {
+ return NGX_HTTP_PARSE_INVALID_HEADER;
+ }
+
r->invalid_header = 1;
break;
@@ -936,6 +940,10 @@ ngx_http_parse_header_line(ngx_http_requ
break;
}
+ if (ch == '\0') {
+ return NGX_HTTP_PARSE_INVALID_HEADER;
+ }
+
r->invalid_header = 1;
break;
@@ -954,6 +962,8 @@ ngx_http_parse_header_line(ngx_http_requ
r->header_start = p;
r->header_end = p;
goto done;
+ case '\0':
+ return NGX_HTTP_PARSE_INVALID_HEADER;
default:
r->header_start = p;
state = sw_value;
@@ -975,6 +985,8 @@ ngx_http_parse_header_line(ngx_http_requ
case LF:
r->header_end = p;
goto done;
+ case '\0':
+ return NGX_HTTP_PARSE_INVALID_HEADER;
}
break;
@@ -988,6 +1000,8 @@ ngx_http_parse_header_line(ngx_http_requ
break;
case LF:
goto done;
+ case '\0':
+ return NGX_HTTP_PARSE_INVALID_HEADER;
default:
state = sw_value;
break;

View File

@ -1,20 +0,0 @@
--- nginx-1.0.15/src/os/unix/ngx_process_cycle.c 2012-02-06 04:02:59.000000000 +0800
+++ nginx-1.0.15-patched/src/os/unix/ngx_process_cycle.c 2012-06-15 11:39:11.234286287 +0800
@@ -707,6 +707,8 @@
ngx_exit_log.file = &ngx_exit_log_file;
ngx_exit_cycle.log = &ngx_exit_log;
+ ngx_exit_cycle.files = ngx_cycle->files;
+ ngx_exit_cycle.files_n = ngx_cycle->files_n;
ngx_cycle = &ngx_exit_cycle;
ngx_destroy_pool(cycle->pool);
@@ -1063,6 +1065,8 @@
ngx_exit_log.file = &ngx_exit_log_file;
ngx_exit_cycle.log = &ngx_exit_log;
+ ngx_exit_cycle.files = ngx_cycle->files;
+ ngx_exit_cycle.files_n = ngx_cycle->files_n;
ngx_cycle = &ngx_exit_cycle;
ngx_destroy_pool(cycle->pool);

View File

@ -1,27 +0,0 @@
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1309799136 -14400
# Node ID 99e276bba8596bc4df9e638482ee413f4c6bf700
# Parent e7b2f945d55ae44a2295facf9e3336dc4633e5b5
Core: fix body with request_body_in_single_buf.
If there were preread data and request body was big enough first part
of request body was duplicated.
See report here:
http://nginx.org/pipermail/nginx/2011-July/027756.html
diff --git a/src/http/ngx_http_request_body.c b/src/http/ngx_http_request_body.c
--- a/src/http/ngx_http_request_body.c
+++ b/src/http/ngx_http_request_body.c
@@ -372,7 +372,9 @@ ngx_http_do_read_client_request_body(ngx
}
}
- if (r->request_body_in_file_only && rb->bufs->next) {
+ if (rb->bufs->next
+ && (r->request_body_in_file_only || r->request_body_in_single_buf))
+ {
rb->bufs = rb->bufs->next;
}

View File

@ -1,11 +0,0 @@
--- nginx-1.0.15/src/http/ngx_http_core_module.c 2012-03-05 21:03:39.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_core_module.c 2012-05-02 21:57:40.624937882 +0800
@@ -2567,6 +2567,8 @@
r->phase_handler = cmcf->phase_engine.location_rewrite_index;
+ r->write_event_handler = ngx_http_core_run_phases;
+
ngx_http_core_run_phases(r);
return NGX_DONE;

View File

@ -1,11 +0,0 @@
--- nginx-1.0.15/src/core/ngx_resolver.c 2012-03-05 21:17:56.000000000 +0800
+++ nginx-1.0.15-patched/src/core/ngx_resolver.c 2012-06-01 17:55:55.861130605 +0800
@@ -987,7 +987,7 @@
nan = (query->nan_hi << 8) + query->nan_lo;
ngx_log_debug6(NGX_LOG_DEBUG_CORE, r->log, 0,
- "resolver DNS response %ui fl:%04Xui %ui/%ui/%ui/%ui",
+ "resolver DNS response %ui fl:%04Xui %ui/%ui/%ud/%ud",
ident, flags, nqs, nan,
(query->nns_hi << 8) + query->nns_lo,
(query->nar_hi << 8) + query->nar_lo);

View File

@ -1,26 +0,0 @@
diff -ur lz-nginx-1.0.15/nginx-1.0.15/src/core/nginx.h lz-nginx-1.0.15-patched/nginx-1.0.15/src/core/nginx.h
--- lz-nginx-1.0.15/nginx-1.0.15/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ lz-nginx-1.0.15-patched/nginx-1.0.15/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1000015
#define NGINX_VERSION "1.0.15"
-#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.0.15-patched/nginx-1.0.15/src/core: nginx.h.orig
Only in lz-nginx-1.0.15-patched/nginx-1.0.15/src/core: nginx.h.rej
diff -ur lz-nginx-1.0.15/nginx-1.0.15/src/http/ngx_http_header_filter_module.c lz-nginx-1.0.15-patched/nginx-1.0.15/src/http/ngx_http_header_filter_module.c
--- lz-nginx-1.0.15/nginx-1.0.15/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ lz-nginx-1.0.15-patched/nginx-1.0.15/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;

View File

@ -1,32 +0,0 @@
diff -ur nginx-1.0.15/src/http/ngx_http_upstream.c nginx-1.0.15-patched/src/http/ngx_http_upstream.c
--- nginx-1.0.15/src/http/ngx_http_upstream.c 2011-12-14 02:34:34.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_upstream.c 2012-03-21 21:20:17.333111806 +0800
@@ -1385,6 +1385,8 @@
/* 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,
@@ -1451,7 +1453,7 @@
#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 -ur nginx-1.0.15/src/http/ngx_http_upstream.h nginx-1.0.15-patched/src/http/ngx_http_upstream.h
--- nginx-1.0.15/src/http/ngx_http_upstream.h 2011-11-01 22:18:10.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_upstream.h 2012-03-21 21:18:21.041237173 +0800
@@ -313,6 +313,7 @@
unsigned buffering:1;
unsigned request_sent:1;
+ unsigned request_all_sent:1;
unsigned header_sent:1;
};

View File

@ -1,73 +0,0 @@
--- nginx-1.0.15/src/http/ngx_http_variables.c 2011-05-30 20:36:17.000000000 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_variables.c 2011-11-08 22:21:55.229247198 +0800
@@ -648,7 +648,17 @@
a = (ngx_array_t *) ((char *) r + data);
- n = a->nelts;
+ h = a->elts;
+ n = 0;
+
+ for (i = 0; i < a->nelts; i++) {
+
+ if (h[i]->hash == 0) {
+ continue;
+ }
+
+ n++;
+ }
if (n == 0) {
v->not_found = 1;
@@ -659,9 +669,7 @@
v->no_cacheable = 0;
v->not_found = 0;
- h = a->elts;
-
- if (n == 1) {
+ if (n == 1 && a->nelts == 1) {
v->len = (*h)->value.len;
v->data = (*h)->value.data;
@@ -670,7 +678,12 @@
len = - (ssize_t) (sizeof("; ") - 1);
- for (i = 0; i < n; i++) {
+ for (i = 0; i < a->nelts; i++) {
+
+ if (h[i]->hash == 0) {
+ continue;
+ }
+
len += h[i]->value.len + sizeof("; ") - 1;
}
@@ -683,9 +696,14 @@
v->data = p;
for (i = 0; /* void */ ; i++) {
+
+ if (h[i]->hash == 0) {
+ continue;
+ }
+
p = ngx_copy(p, h[i]->value.data, h[i]->value.len);
- if (i == n - 1) {
+ if (--n == 0) {
break;
}
@@ -738,6 +756,10 @@
i = 0;
}
+ if (header[i].hash == 0) {
+ continue;
+ }
+
for (n = 0; n + prefix < var->len && n < header[i].key.len; n++) {
ch = header[i].key.data[n];

View File

@ -1,6 +1,6 @@
diff -ur nginx-1.0.12/src/http/ngx_http_request_body.c nginx-1.0.12-patched/src/http/ngx_http_request_body.c
--- nginx-1.0.12/src/http/ngx_http_request_body.c 2011-09-30 22:36:19.000000000 +0800
+++ nginx-1.0.12-patched/src/http/ngx_http_request_body.c 2011-10-21 21:54:08.460350482 +0800
diff -ur nginx-1.1.12/src/http/ngx_http_request_body.c nginx-1.1.12-patched/src/http/ngx_http_request_body.c
--- nginx-1.1.12/src/http/ngx_http_request_body.c 2011-09-30 22:36:19.000000000 +0800
+++ nginx-1.1.12-patched/src/http/ngx_http_request_body.c 2011-10-21 21:54:08.460350482 +0800
@@ -38,7 +38,7 @@
r->main->count++;
@ -77,10 +77,10 @@ diff -ur nginx-1.0.12/src/http/ngx_http_request_body.c nginx-1.0.12-patched/src/
}
}
Only in nginx-1.0.12-patched/src/http: ngx_http_request_body.c~
diff -ur nginx-1.0.12/src/http/ngx_http_request.c nginx-1.0.12-patched/src/http/ngx_http_request.c
--- nginx-1.0.12/src/http/ngx_http_request.c 2011-09-30 22:36:19.000000000 +0800
+++ nginx-1.0.12-patched/src/http/ngx_http_request.c 2011-10-21 19:06:38.404350692 +0800
Only in nginx-1.1.12-patched/src/http: ngx_http_request_body.c~
diff -ur nginx-1.1.12/src/http/ngx_http_request.c nginx-1.1.12-patched/src/http/ngx_http_request.c
--- nginx-1.1.12/src/http/ngx_http_request.c 2011-09-30 22:36:19.000000000 +0800
+++ nginx-1.1.12-patched/src/http/ngx_http_request.c 2011-10-21 19:06:38.404350692 +0800
@@ -286,6 +286,8 @@
r->pipeline = hc->pipeline;
@ -99,10 +99,10 @@ diff -ur nginx-1.0.12/src/http/ngx_http_request.c nginx-1.0.12-patched/src/http/
hc->request = r;
}
Only in nginx-1.0.12-patched/src/http: ngx_http_request.c~
diff -ur nginx-1.0.12/src/http/ngx_http_request.h nginx-1.0.12-patched/src/http/ngx_http_request.h
--- nginx-1.0.12/src/http/ngx_http_request.h 2011-08-29 18:39:23.000000000 +0800
+++ nginx-1.0.12-patched/src/http/ngx_http_request.h 2011-10-21 17:26:13.203807584 +0800
Only in nginx-1.1.12-patched/src/http: ngx_http_request.c~
diff -ur nginx-1.1.12/src/http/ngx_http_request.h nginx-1.1.12-patched/src/http/ngx_http_request.h
--- nginx-1.1.12/src/http/ngx_http_request.h 2011-08-29 18:39:23.000000000 +0800
+++ nginx-1.1.12-patched/src/http/ngx_http_request.h 2011-10-21 17:26:13.203807584 +0800
@@ -366,6 +366,9 @@
ngx_pool_t *pool;
ngx_buf_t *header_in;
@ -113,5 +113,5 @@ diff -ur nginx-1.0.12/src/http/ngx_http_request.h nginx-1.0.12-patched/src/http/
ngx_http_headers_in_t headers_in;
ngx_http_headers_out_t headers_out;
Only in nginx-1.0.12-patched/src/http: ngx_http_request.h~
Only in nginx-1.0.12-patched/src/http: tags
Only in nginx-1.1.12-patched/src/http: ngx_http_request.h~
Only in nginx-1.1.12-patched/src/http: tags

View File

@ -1,5 +1,5 @@
--- nginx-1.0.14/src/event/modules/ngx_epoll_module.c 2011-09-30 22:12:53.000000000 +0800
+++ nginx-1.0.14-patched/src/event/modules/ngx_epoll_module.c 2011-11-30 11:08:46.775817019 +0800
--- nginx-1.1.12/src/event/modules/ngx_epoll_module.c 2011-09-30 22:12:53.000000000 +0800
+++ nginx-1.1.12-patched/src/event/modules/ngx_epoll_module.c 2011-11-30 11:08:46.775817019 +0800
@@ -682,6 +682,17 @@
wev = c->write;

View File

@ -1,5 +1,5 @@
--- nginx-1.0.15/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.0.15-patched/src/http/modules/ngx_http_log_module.c 2011-11-10 16:17:29.599039534 +0800
--- nginx-1.1.12/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.1.12-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;

View File

@ -1,5 +1,5 @@
--- nginx-1.0.14/src/http/ngx_http_core_module.c 2011-09-27 19:14:02.000000000 +0800
+++ nginx-1.0.14-patched/src/http/ngx_http_core_module.c 2011-10-13 15:02:24.414550532 +0800
--- nginx-1.1.12/src/http/ngx_http_core_module.c 2011-09-27 19:14:02.000000000 +0800
+++ nginx-1.1.12-patched/src/http/ngx_http_core_module.c 2011-10-13 15:02:24.414550532 +0800
@@ -2542,6 +2542,9 @@
r->content_handler = NULL;
r->loc_conf = (*clcfp)->loc_conf;

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.1.12/auto/cc/gcc nginx-1.1.12-patched/auto/cc/gcc
--- nginx-1.1.12/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.1.12-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.1.12/auto/cc/icc nginx-1.1.12-patched/auto/cc/icc
--- nginx-1.1.12/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.1.12-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"

View File

@ -1,5 +1,5 @@
--- nginx-1.0.14/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.0.14-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
--- nginx-1.1.12/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.1.12-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,

View File

@ -1,18 +1,18 @@
diff -ur nginx-1.1.15/src/core/nginx.h nginx-1.1.15-patched/src/core/nginx.h
--- nginx-1.1.15/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
+++ nginx-1.1.15-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
diff -ur nginx-1.1.12/src/core/nginx.h nginx-1.1.12-patched/src/core/nginx.h
--- nginx-1.1.12/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
+++ nginx-1.1.12-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1001015
#define NGINX_VERSION "1.1.15"
#define nginx_version 1001012
#define NGINX_VERSION "1.1.12"
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
#define NGINX_VAR "NGINX"
diff -ur nginx-1.1.15/src/core/ngx_array.c nginx-1.1.15-patched/src/core/ngx_array.c
--- nginx-1.1.15/src/core/ngx_array.c 2008-06-17 23:00:30.000000000 +0800
+++ nginx-1.1.15-patched/src/core/ngx_array.c 2011-09-14 12:02:56.263128538 +0800
diff -ur nginx-1.1.12/src/core/ngx_array.c nginx-1.1.12-patched/src/core/ngx_array.c
--- nginx-1.1.12/src/core/ngx_array.c 2008-06-17 23:00:30.000000000 +0800
+++ nginx-1.1.12-patched/src/core/ngx_array.c 2011-09-14 12:02:56.263128538 +0800
@@ -39,13 +39,7 @@
p = a->pool;
@ -121,9 +121,9 @@ diff -ur nginx-1.1.15/src/core/ngx_array.c nginx-1.1.15-patched/src/core/ngx_arr
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff -ur nginx-1.1.15/src/core/ngx_palloc.c nginx-1.1.15-patched/src/core/ngx_palloc.c
--- nginx-1.1.15/src/core/ngx_palloc.c 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.1.15-patched/src/core/ngx_palloc.c 2011-09-14 12:03:41.663126519 +0800
diff -ur nginx-1.1.12/src/core/ngx_palloc.c nginx-1.1.12-patched/src/core/ngx_palloc.c
--- nginx-1.1.12/src/core/ngx_palloc.c 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.1.12-patched/src/core/ngx_palloc.c 2011-09-14 12:03:41.663126519 +0800
@@ -8,24 +8,31 @@
#include <ngx_core.h>
@ -468,9 +468,9 @@ diff -ur nginx-1.1.15/src/core/ngx_palloc.c nginx-1.1.15-patched/src/core/ngx_pa
}
return NGX_DECLINED;
diff -ur nginx-1.1.15/src/core/ngx_palloc.h nginx-1.1.15-patched/src/core/ngx_palloc.h
--- nginx-1.1.15/src/core/ngx_palloc.h 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.1.15-patched/src/core/ngx_palloc.h 2011-09-13 12:11:03.155622101 +0800
diff -ur nginx-1.1.12/src/core/ngx_palloc.h nginx-1.1.12-patched/src/core/ngx_palloc.h
--- nginx-1.1.12/src/core/ngx_palloc.h 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.1.12-patched/src/core/ngx_palloc.h 2011-09-13 12:11:03.155622101 +0800
@@ -38,6 +38,7 @@

View File

@ -5,8 +5,8 @@
# Parent 610e909bb9e29766188aa86fae3abe0bd3432940
Core: fix body if it's preread and there are extra data.
--- nginx-1.0.12/src/http/ngx_http_request_body.c 2011-07-05 12:11:21.619264633 +0800
+++ nginx-1.0.12-patched/src/http/ngx_http_request_body.c 2011-07-05 12:14:30.694321554 +0800
--- nginx-1.1.12/src/http/ngx_http_request_body.c 2011-07-05 12:11:21.619264633 +0800
+++ nginx-1.1.12-patched/src/http/ngx_http_request_body.c 2011-07-05 12:14:30.694321554 +0800
@@ -141,6 +141,7 @@
/* the whole request body was pre-read */

View File

@ -0,0 +1,26 @@
diff -ur lz-nginx-1.1.12/nginx-1.1.12/src/core/nginx.h lz-nginx-1.1.12-patched/nginx-1.1.12/src/core/nginx.h
--- lz-nginx-1.1.12/nginx-1.1.12/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ lz-nginx-1.1.12-patched/nginx-1.1.12/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1001012
#define NGINX_VERSION "1.1.12"
-#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.1.12-patched/nginx-1.1.12/src/core: nginx.h.orig
Only in lz-nginx-1.1.12-patched/nginx-1.1.12/src/core: nginx.h.rej
diff -ur lz-nginx-1.1.12/nginx-1.1.12/src/http/ngx_http_header_filter_module.c lz-nginx-1.1.12-patched/nginx-1.1.12/src/http/ngx_http_header_filter_module.c
--- lz-nginx-1.1.12/nginx-1.1.12/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ lz-nginx-1.1.12-patched/nginx-1.1.12/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;

View File

@ -1,5 +1,5 @@
--- nginx-1.0.14/src/http/ngx_http_variables.c 2011-05-30 20:36:17.000000000 +0800
+++ nginx-1.0.14-patched/src/http/ngx_http_variables.c 2011-11-08 22:21:55.229247198 +0800
--- nginx-1.1.12/src/http/ngx_http_variables.c 2011-05-30 20:36:17.000000000 +0800
+++ nginx-1.1.12-patched/src/http/ngx_http_variables.c 2011-11-08 22:21:55.229247198 +0800
@@ -648,7 +648,17 @@
a = (ngx_array_t *) ((char *) r + data);

View File

@ -1,117 +0,0 @@
diff -ur nginx-1.1.15/src/http/ngx_http_request_body.c nginx-1.1.15-patched/src/http/ngx_http_request_body.c
--- nginx-1.1.15/src/http/ngx_http_request_body.c 2011-09-30 22:36:19.000000000 +0800
+++ nginx-1.1.15-patched/src/http/ngx_http_request_body.c 2011-10-21 21:54:08.460350482 +0800
@@ -38,7 +38,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;
}
@@ -440,7 +440,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;
}
@@ -456,20 +456,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;
}
}
@@ -568,7 +570,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;
}
@@ -577,9 +579,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);
@@ -596,7 +598,7 @@
return NGX_OK;
}
- r->headers_in.content_length_n -= n;
+ r->content_length_n -= n;
}
}
Only in nginx-1.1.15-patched/src/http: ngx_http_request_body.c~
diff -ur nginx-1.1.15/src/http/ngx_http_request.c nginx-1.1.15-patched/src/http/ngx_http_request.c
--- nginx-1.1.15/src/http/ngx_http_request.c 2011-09-30 22:36:19.000000000 +0800
+++ nginx-1.1.15-patched/src/http/ngx_http_request.c 2011-10-21 19:06:38.404350692 +0800
@@ -286,6 +286,8 @@
r->pipeline = hc->pipeline;
+ r->content_length_n = -1;
+
if (hc->nbusy) {
r->header_in = hc->busy[0];
}
@@ -297,6 +299,8 @@
return;
}
+ r->content_length_n = -1;
+
hc->request = r;
}
Only in nginx-1.1.15-patched/src/http: ngx_http_request.c~
diff -ur nginx-1.1.15/src/http/ngx_http_request.h nginx-1.1.15-patched/src/http/ngx_http_request.h
--- nginx-1.1.15/src/http/ngx_http_request.h 2011-08-29 18:39:23.000000000 +0800
+++ nginx-1.1.15-patched/src/http/ngx_http_request.h 2011-10-21 17:26:13.203807584 +0800
@@ -366,6 +366,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.1.15-patched/src/http: ngx_http_request.h~
Only in nginx-1.1.15-patched/src/http: tags

View File

@ -1,69 +0,0 @@
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1315324342 -14400
# Node ID 4cf0af103bc382a78f894302d1706929a79df4bb
# Parent d603ce98fada855f0100b422b7b5672fd22fabea
Gzip filter: handle empty flush buffers.
Empty flush buffers are legitimate and may happen e.g. due to $r->flush()
calls in embedded perl. If there are no data buffered in zlib deflate()
will return Z_BUF_ERROR (i.e. no progress possible) without adding anything
to output. Don't treat Z_BUF_ERROR as fatal and correctly send empty flush
buffer if we have no data in output at all.
See this thread for details:
http://mailman.nginx.org/pipermail/nginx/2010-November/023693.html
diff --git a/src/http/modules/ngx_http_gzip_filter_module.c b/src/http/modules/ngx_http_gzip_filter_module.c
--- a/src/http/modules/ngx_http_gzip_filter_module.c
+++ b/src/http/modules/ngx_http_gzip_filter_module.c
@@ -758,6 +758,7 @@ static ngx_int_t
ngx_http_gzip_filter_deflate(ngx_http_request_t *r, ngx_http_gzip_ctx_t *ctx)
{
int rc;
+ ngx_buf_t *b;
ngx_chain_t *cl;
ngx_http_gzip_conf_t *conf;
@@ -769,7 +770,7 @@ ngx_http_gzip_filter_deflate(ngx_http_re
rc = deflate(&ctx->zstream, ctx->flush);
- if (rc != Z_OK && rc != Z_STREAM_END) {
+ if (rc != Z_OK && rc != Z_STREAM_END && rc != Z_BUF_ERROR) {
ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0,
"deflate() failed: %d, %d", ctx->flush, rc);
return NGX_ERROR;
@@ -818,8 +819,6 @@ ngx_http_gzip_filter_deflate(ngx_http_re
if (ctx->flush == Z_SYNC_FLUSH) {
- ctx->zstream.avail_out = 0;
- ctx->out_buf->flush = 1;
ctx->flush = Z_NO_FLUSH;
cl = ngx_alloc_chain_link(r->pool);
@@ -827,7 +826,22 @@ ngx_http_gzip_filter_deflate(ngx_http_re
return NGX_ERROR;
}
- cl->buf = ctx->out_buf;
+ b = ctx->out_buf;
+
+ if (ngx_buf_size(b) == 0) {
+
+ b = ngx_calloc_buf(ctx->request->pool);
+ if (b == NULL) {
+ return NGX_ERROR;
+ }
+
+ } else {
+ ctx->zstream.avail_out = 0;
+ }
+
+ b->flush = 1;
+
+ cl->buf = b;
cl->next = NULL;
*ctx->last_out = cl;
ctx->last_out = &cl->next;

View File

@ -1,115 +0,0 @@
--- nginx-1.1.15/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.1.15-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;

View File

@ -1,12 +0,0 @@
--- nginx-1.1.15/src/http/ngx_http_core_module.c 2011-09-27 19:14:02.000000000 +0800
+++ nginx-1.1.15-patched/src/http/ngx_http_core_module.c 2011-10-13 15:02:24.414550532 +0800
@@ -2542,6 +2542,9 @@
r->content_handler = NULL;
r->loc_conf = (*clcfp)->loc_conf;
+ /* clear the modules contexts */
+ ngx_memzero(r->ctx, sizeof(void *) * ngx_http_max_module);
+
ngx_http_update_location_config(r);
cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);

View File

@ -1,24 +0,0 @@
diff -ur nginx-1.1.15/auto/cc/gcc nginx-1.1.15-patched/auto/cc/gcc
--- nginx-1.1.15/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.1.15-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.1.15/auto/cc/icc nginx-1.1.15-patched/auto/cc/icc
--- nginx-1.1.15/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.1.15-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"

View File

@ -1,90 +0,0 @@
--- nginx-1.1.15/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.1.15-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;

View File

@ -1,26 +0,0 @@
diff -ur lz-nginx-1.1.15/nginx-1.1.15/src/core/nginx.h lz-nginx-1.1.15-patched/nginx-1.1.15/src/core/nginx.h
--- lz-nginx-1.1.15/nginx-1.1.15/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ lz-nginx-1.1.15-patched/nginx-1.1.15/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1001015
#define NGINX_VERSION "1.1.15"
-#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.1.15-patched/nginx-1.1.15/src/core: nginx.h.orig
Only in lz-nginx-1.1.15-patched/nginx-1.1.15/src/core: nginx.h.rej
diff -ur lz-nginx-1.1.15/nginx-1.1.15/src/http/ngx_http_header_filter_module.c lz-nginx-1.1.15-patched/nginx-1.1.15/src/http/ngx_http_header_filter_module.c
--- lz-nginx-1.1.15/nginx-1.1.15/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ lz-nginx-1.1.15-patched/nginx-1.1.15/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;

View File

@ -1,40 +0,0 @@
# HG changeset patch
# User Maxim Dounin <mdounin@mdounin.ru>
# Date 1309187571 -14400
# Node ID 283a416b2235d5383c12a975edc8866f007fb628
# Parent f5fc40783ddcbf4db33859ee2a9bce54cf32c350
Core: protect from subrequest loops.
Without protection subrequest loop results in r->count overflow and
SIGSEGV. Protection was broken in 0.7.25.
Note that this also limits number of parallel subrequests. This
wasn't exactly the case before 0.7.25 as local subrequests were
completed directly.
See here for details:
http://nginx.org/pipermail/nginx-ru/2010-February/032184.html
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -2287,7 +2287,6 @@ ngx_http_subrequest(ngx_http_request_t *
sr->start_sec = tp->sec;
sr->start_msec = tp->msec;
- r->main->subrequests++;
r->main->count++;
*psr = sr;
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -1981,6 +1981,7 @@ ngx_http_finalize_request(ngx_http_reque
if (r == c->data) {
r->main->count--;
+ r->main->subrequests++;
if (!r->logged) {

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.1.4/auto/cc/gcc nginx-1.1.4-patched/auto/cc/gcc
--- nginx-1.1.4/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.1.4-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.1.4/auto/cc/icc nginx-1.1.4-patched/auto/cc/icc
--- nginx-1.1.4/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.1.4-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"

View File

@ -1,5 +1,5 @@
--- nginx-1.2.1/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.2.1-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
--- nginx-1.1.4/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.1.4-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,

View File

@ -1,18 +1,18 @@
diff -ur nginx-1.0.12/src/core/nginx.h nginx-1.0.12-patched/src/core/nginx.h
--- nginx-1.0.12/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
+++ nginx-1.0.12-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
diff -ur nginx-1.1.4/src/core/nginx.h nginx-1.1.4-patched/src/core/nginx.h
--- nginx-1.1.4/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
+++ nginx-1.1.4-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1000012
#define NGINX_VERSION "1.0.12"
#define nginx_version 1001004
#define NGINX_VERSION "1.1.4"
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
#define NGINX_VAR "NGINX"
diff -ur nginx-1.0.12/src/core/ngx_array.c nginx-1.0.12-patched/src/core/ngx_array.c
--- nginx-1.0.12/src/core/ngx_array.c 2008-06-17 23:00:30.000000000 +0800
+++ nginx-1.0.12-patched/src/core/ngx_array.c 2011-09-14 12:02:56.263128538 +0800
diff -ur nginx-1.1.4/src/core/ngx_array.c nginx-1.1.4-patched/src/core/ngx_array.c
--- nginx-1.1.4/src/core/ngx_array.c 2008-06-17 23:00:30.000000000 +0800
+++ nginx-1.1.4-patched/src/core/ngx_array.c 2011-09-14 12:02:56.263128538 +0800
@@ -39,13 +39,7 @@
p = a->pool;
@ -121,9 +121,9 @@ diff -ur nginx-1.0.12/src/core/ngx_array.c nginx-1.0.12-patched/src/core/ngx_arr
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff -ur nginx-1.0.12/src/core/ngx_palloc.c nginx-1.0.12-patched/src/core/ngx_palloc.c
--- nginx-1.0.12/src/core/ngx_palloc.c 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.0.12-patched/src/core/ngx_palloc.c 2011-09-14 12:03:41.663126519 +0800
diff -ur nginx-1.1.4/src/core/ngx_palloc.c nginx-1.1.4-patched/src/core/ngx_palloc.c
--- nginx-1.1.4/src/core/ngx_palloc.c 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.1.4-patched/src/core/ngx_palloc.c 2011-09-14 12:03:41.663126519 +0800
@@ -8,24 +8,31 @@
#include <ngx_core.h>
@ -468,9 +468,9 @@ diff -ur nginx-1.0.12/src/core/ngx_palloc.c nginx-1.0.12-patched/src/core/ngx_pa
}
return NGX_DECLINED;
diff -ur nginx-1.0.12/src/core/ngx_palloc.h nginx-1.0.12-patched/src/core/ngx_palloc.h
--- nginx-1.0.12/src/core/ngx_palloc.h 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.0.12-patched/src/core/ngx_palloc.h 2011-09-13 12:11:03.155622101 +0800
diff -ur nginx-1.1.4/src/core/ngx_palloc.h nginx-1.1.4-patched/src/core/ngx_palloc.h
--- nginx-1.1.4/src/core/ngx_palloc.h 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.1.4-patched/src/core/ngx_palloc.h 2011-09-13 12:11:03.155622101 +0800
@@ -38,6 +38,7 @@

View File

@ -5,8 +5,8 @@
# Parent 610e909bb9e29766188aa86fae3abe0bd3432940
Core: fix body if it's preread and there are extra data.
--- nginx-1.0.15/src/http/ngx_http_request_body.c 2011-07-05 12:11:21.619264633 +0800
+++ nginx-1.0.15-patched/src/http/ngx_http_request_body.c 2011-07-05 12:14:30.694321554 +0800
--- nginx-1.1.4/src/http/ngx_http_request_body.c 2011-07-05 12:11:21.619264633 +0800
+++ nginx-1.1.4-patched/src/http/ngx_http_request_body.c 2011-07-05 12:14:30.694321554 +0800
@@ -141,6 +141,7 @@
/* the whole request body was pre-read */

View File

@ -0,0 +1,26 @@
diff -ur lz-nginx-1.1.4/nginx-1.1.4/src/core/nginx.h lz-nginx-1.1.4-patched/nginx-1.1.4/src/core/nginx.h
--- lz-nginx-1.1.4/nginx-1.1.4/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ lz-nginx-1.1.4-patched/nginx-1.1.4/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1001004
#define NGINX_VERSION "1.1.4"
-#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.1.4-patched/nginx-1.1.4/src/core: nginx.h.orig
Only in lz-nginx-1.1.4-patched/nginx-1.1.4/src/core: nginx.h.rej
diff -ur lz-nginx-1.1.4/nginx-1.1.4/src/http/ngx_http_header_filter_module.c lz-nginx-1.1.4-patched/nginx-1.1.4/src/http/ngx_http_header_filter_module.c
--- lz-nginx-1.1.4/nginx-1.1.4/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ lz-nginx-1.1.4-patched/nginx-1.1.4/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;

View File

@ -0,0 +1,21 @@
--- nginx-1.1.5/src/event/modules/ngx_epoll_module.c 2011-09-30 22:12:53.000000000 +0800
+++ nginx-1.1.5-patched/src/event/modules/ngx_epoll_module.c 2011-11-07 18:07:04.764111952 +0800
@@ -681,6 +681,18 @@
wev = c->write;
+ if (c->fd == -1 || wev->instance != instance) {
+
+ /*
+ * the stale event from a file descriptor
+ * that was just closed in this iteration
+ */
+
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+ "epoll: stale event %p", c);
+ continue;
+ }
+
if ((revents & EPOLLOUT) && wev->active) {
if (flags & NGX_POST_THREAD_EVENTS) {

View File

@ -0,0 +1,24 @@
diff -ur nginx-1.1.5/auto/cc/gcc nginx-1.1.5-patched/auto/cc/gcc
--- nginx-1.1.5/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.1.5-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.1.5/auto/cc/icc nginx-1.1.5-patched/auto/cc/icc
--- nginx-1.1.5/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.1.5-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"

View File

@ -1,5 +1,5 @@
--- nginx-1.2.3/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.2.3-patched/src/http/ngx_http_core_module.c 2011-01-30 19:24:34.956354518 +0800
--- nginx-1.1.5/src/http/ngx_http_core_module.c 2010-12-14 18:38:42.000000000 +0800
+++ nginx-1.1.5-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,

View File

@ -1,18 +1,18 @@
diff -ur nginx-1.0.14/src/core/nginx.h nginx-1.0.14-patched/src/core/nginx.h
--- nginx-1.0.14/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
+++ nginx-1.0.14-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
diff -ur nginx-1.1.5/src/core/nginx.h nginx-1.1.5-patched/src/core/nginx.h
--- nginx-1.1.5/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
+++ nginx-1.1.5-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1000014
#define NGINX_VERSION "1.0.14"
#define nginx_version 1001005
#define NGINX_VERSION "1.1.5"
-#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown"
+#define NGINX_VER "ngx_openresty/" NGINX_VERSION ".unknown (no pool)"
#define NGINX_VAR "NGINX"
diff -ur nginx-1.0.14/src/core/ngx_array.c nginx-1.0.14-patched/src/core/ngx_array.c
--- nginx-1.0.14/src/core/ngx_array.c 2008-06-17 23:00:30.000000000 +0800
+++ nginx-1.0.14-patched/src/core/ngx_array.c 2011-09-14 12:02:56.263128538 +0800
diff -ur nginx-1.1.5/src/core/ngx_array.c nginx-1.1.5-patched/src/core/ngx_array.c
--- nginx-1.1.5/src/core/ngx_array.c 2008-06-17 23:00:30.000000000 +0800
+++ nginx-1.1.5-patched/src/core/ngx_array.c 2011-09-14 12:02:56.263128538 +0800
@@ -39,13 +39,7 @@
p = a->pool;
@ -121,9 +121,9 @@ diff -ur nginx-1.0.14/src/core/ngx_array.c nginx-1.0.14-patched/src/core/ngx_arr
}
elt = (u_char *) a->elts + a->size * a->nelts;
diff -ur nginx-1.0.14/src/core/ngx_palloc.c nginx-1.0.14-patched/src/core/ngx_palloc.c
--- nginx-1.0.14/src/core/ngx_palloc.c 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.0.14-patched/src/core/ngx_palloc.c 2011-09-14 12:03:41.663126519 +0800
diff -ur nginx-1.1.5/src/core/ngx_palloc.c nginx-1.1.5-patched/src/core/ngx_palloc.c
--- nginx-1.1.5/src/core/ngx_palloc.c 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.1.5-patched/src/core/ngx_palloc.c 2011-09-14 12:03:41.663126519 +0800
@@ -8,24 +8,31 @@
#include <ngx_core.h>
@ -468,9 +468,9 @@ diff -ur nginx-1.0.14/src/core/ngx_palloc.c nginx-1.0.14-patched/src/core/ngx_pa
}
return NGX_DECLINED;
diff -ur nginx-1.0.14/src/core/ngx_palloc.h nginx-1.0.14-patched/src/core/ngx_palloc.h
--- nginx-1.0.14/src/core/ngx_palloc.h 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.0.14-patched/src/core/ngx_palloc.h 2011-09-13 12:11:03.155622101 +0800
diff -ur nginx-1.1.5/src/core/ngx_palloc.h nginx-1.1.5-patched/src/core/ngx_palloc.h
--- nginx-1.1.5/src/core/ngx_palloc.h 2009-12-17 20:25:46.000000000 +0800
+++ nginx-1.1.5-patched/src/core/ngx_palloc.h 2011-09-13 12:11:03.155622101 +0800
@@ -38,6 +38,7 @@

View File

@ -5,8 +5,8 @@
# Parent 610e909bb9e29766188aa86fae3abe0bd3432940
Core: fix body if it's preread and there are extra data.
--- nginx-1.0.14/src/http/ngx_http_request_body.c 2011-07-05 12:11:21.619264633 +0800
+++ nginx-1.0.14-patched/src/http/ngx_http_request_body.c 2011-07-05 12:14:30.694321554 +0800
--- nginx-1.1.5/src/http/ngx_http_request_body.c 2011-07-05 12:11:21.619264633 +0800
+++ nginx-1.1.5-patched/src/http/ngx_http_request_body.c 2011-07-05 12:14:30.694321554 +0800
@@ -141,6 +141,7 @@
/* the whole request body was pre-read */

View File

@ -0,0 +1,26 @@
diff -ur lz-nginx-1.1.5/nginx-1.1.5/src/core/nginx.h lz-nginx-1.1.5-patched/nginx-1.1.5/src/core/nginx.h
--- lz-nginx-1.1.5/nginx-1.1.5/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ lz-nginx-1.1.5-patched/nginx-1.1.5/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1001005
#define NGINX_VERSION "1.1.5"
-#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.1.5-patched/nginx-1.1.5/src/core: nginx.h.orig
Only in lz-nginx-1.1.5-patched/nginx-1.1.5/src/core: nginx.h.rej
diff -ur lz-nginx-1.1.5/nginx-1.1.5/src/http/ngx_http_header_filter_module.c lz-nginx-1.1.5-patched/nginx-1.1.5/src/http/ngx_http_header_filter_module.c
--- lz-nginx-1.1.5/nginx-1.1.5/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ lz-nginx-1.1.5-patched/nginx-1.1.5/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;

View File

@ -1,5 +1,5 @@
--- nginx-1.0.12/src/http/ngx_http_variables.c 2011-05-30 20:36:17.000000000 +0800
+++ nginx-1.0.12-patched/src/http/ngx_http_variables.c 2011-11-08 22:21:55.229247198 +0800
--- nginx-1.1.5/src/http/ngx_http_variables.c 2011-05-30 20:36:17.000000000 +0800
+++ nginx-1.1.5-patched/src/http/ngx_http_variables.c 2011-11-08 22:21:55.229247198 +0800
@@ -648,7 +648,17 @@
a = (ngx_array_t *) ((char *) r + data);

View File

@ -1,26 +0,0 @@
--- nginx-1.2.1/src/http/ngx_http_variables.c 2012-03-05 20:36:51.000000000 +0800
+++ nginx-1.2.1-patched/src/http/ngx_http_variables.c 2012-05-17 16:21:42.120968722 +0800
@@ -1898,6 +1898,7 @@
{
ngx_int_t rc;
ngx_http_variable_t *v;
+ ngx_http_variable_t *value;
ngx_http_core_main_conf_t *cmcf;
cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module);
@@ -1918,7 +1919,14 @@
}
for (v = ngx_http_core_variables; v->name.len; v++) {
- rc = ngx_hash_add_key(cmcf->variables_keys, &v->name, v,
+ value = ngx_palloc(cf->pool, sizeof(ngx_http_variable_t));
+ if (value == NULL) {
+ return NGX_ERROR;
+ }
+
+ *value = *v;
+
+ rc = ngx_hash_add_key(cmcf->variables_keys, &value->name, value,
NGX_HASH_READONLY_KEY);
if (rc == NGX_OK) {

View File

@ -1,128 +0,0 @@
diff '--exclude=*~' -ur nginx-1.2.1/src/http/ngx_http_core_module.c nginx-1.2.1-patched/src/http/ngx_http_core_module.c
--- nginx-1.2.1/src/http/ngx_http_core_module.c 2012-06-04 04:58:12.000000000 -0700
+++ nginx-1.2.1-patched/src/http/ngx_http_core_module.c 2012-07-21 12:09:17.468576485 -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 '--exclude=*~' -ur nginx-1.2.1/src/http/ngx_http_request_body.c nginx-1.2.1-patched/src/http/ngx_http_request_body.c
--- nginx-1.2.1/src/http/ngx_http_request_body.c 2012-04-12 12:35:41.000000000 -0700
+++ nginx-1.2.1-patched/src/http/ngx_http_request_body.c 2012-07-21 12:08:30.655376967 -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;
}
}
Only in nginx-1.2.1-patched/src/http: ngx_http_request_body.c.orig
diff '--exclude=*~' -ur nginx-1.2.1/src/http/ngx_http_request.c nginx-1.2.1-patched/src/http/ngx_http_request.c
--- nginx-1.2.1/src/http/ngx_http_request.c 2012-06-05 06:52:37.000000000 -0700
+++ nginx-1.2.1-patched/src/http/ngx_http_request.c 2012-07-21 12:08:30.656376973 -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;
}
Only in nginx-1.2.1-patched/src/http: ngx_http_request.c.orig
diff '--exclude=*~' -ur nginx-1.2.1/src/http/ngx_http_request.h nginx-1.2.1-patched/src/http/ngx_http_request.h
--- nginx-1.2.1/src/http/ngx_http_request.h 2012-02-28 06:54:23.000000000 -0800
+++ nginx-1.2.1-patched/src/http/ngx_http_request.h 2012-07-21 12:08:30.657376978 -0700
@@ -368,6 +368,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.1-patched/src/http: ngx_http_request.h.orig

View File

@ -1,904 +0,0 @@
diff --git a/README b/README
index 2f68e14..4f2c4a7 100644
--- a/README
+++ b/README
@@ -1,3 +1,40 @@
+This is an Nginx fork that adds dtrace USDT probes.
-Documentation is available at http://nginx.org
+This is still under development and not usable yet.
+
+Installation:
+
+ ./configure --with-dtrace-probes \
+ --with-dtrace=/usr/sbin/dtrace \
+ ...
+ make
+ make install
+
+Usage on Linux (with systemtap):
+
+ # make the stap-nginx script visiable in your PATH
+ export PATH=/usr/local/nginx/sbin:$PATH
+
+ # list all the static probes available in your nginx
+ stap-nginx -L 'process("nginx").mark("*")'
+
+ # run the test.stp file
+ stap-nginx test.stp
+
+Sample test.stp file:
+
+ probe begin
+ {
+ print("Tracing. Hit CTRL-C to stop.\n")
+ }
+
+ probe process("nginx").mark("http-subrequest-start")
+ {
+ printf("uri: %s?%s\n", ngx_http_req_uri($arg1),
+ ngx_http_req_args($arg1))
+ }
+
+For now, only tested on Solaris 11 Express and Fedora Linux 17.
+
+The original Nginx documentation is available at http://nginx.org
diff --git a/auto/install b/auto/install
index c2c0ade..fe2a2dd 100644
--- a/auto/install
+++ b/auto/install
@@ -16,6 +16,20 @@ END
fi
+case ".$NGX_STAP_NGX_PATH" in
+ ./*)
+ ;;
+
+ .)
+ NGX_STAP_NGX_PATH=$NGX_PREFIX/sbin/stap-nginx
+ ;;
+
+ *)
+ NGX_STAP_NGX_PATH=$NGX_PREFIX/$NGX_STAP_NGX_PATH
+ ;;
+esac
+
+
case ".$NGX_SBIN_PATH" in
./*)
;;
@@ -53,6 +67,16 @@ case ".$NGX_PID_PATH" in
esac
+case ".$NGX_TAPSET_PREFIX" in
+ ./* | .)
+ ;;
+
+ *)
+ NGX_TAPSET_PREFIX=$NGX_PREFIX/$NGX_TAPSET_PREFIX
+ ;;
+esac
+
+
case ".$NGX_ERROR_LOG_PATH" in
./* | .)
;;
@@ -151,6 +175,36 @@ install: $NGX_OBJS${ngx_dirsep}nginx${ngx_binext} \
|| cp -R $NGX_HTML '\$(DESTDIR)$NGX_PREFIX'
END
+if [ $NGX_DTRACE = YES -a $DTRACE_FROM_SYSTEMTAP = YES ]; then
+
+ ngx_tapset_srcs="$NGX_TAPSET_SRCS"
+
+ cat << END >> $NGX_MAKEFILE
+ test -d '\$(DESTDIR)$NGX_TAPSET_PREFIX' || \
+ mkdir -p '\$(DESTDIR)$NGX_TAPSET_PREFIX'
+END
+
+ for ngx_tapset_src in $ngx_tapset_srcs
+ do
+ ngx_tapset_file=`basename $ngx_tapset_src`
+
+ cat << END >> $NGX_MAKEFILE
+
+ sed -e "s|NGX_SBIN_PATH|$NGX_SBIN_PATH|g" $ngx_long_cont \
+ $ngx_tapset_src > '\$(DESTDIR)$NGX_TAPSET_PREFIX/$ngx_tapset_file'
+END
+
+ done
+
+ cat << END >> $NGX_MAKEFILE
+
+ test -d '\$(DESTDIR)`dirname "$NGX_STAP_NGX_PATH"`' || \
+ mkdir -p '\$(DESTDIR)`dirname "$NGX_STAP_NGX_PATH"`'
+ cp $NGX_OBJS/stap-nginx '\$(DESTDIR)$NGX_STAP_NGX_PATH'
+ chmod 0755 '\$(DESTDIR)$NGX_STAP_NGX_PATH'
+END
+
+fi
if test -n "$NGX_ERROR_LOG_PATH"; then
cat << END >> $NGX_MAKEFILE
@@ -162,6 +216,18 @@ END
fi
+if [ $NGX_DTRACE = YES ]; then
+ cat << END >> $NGX_MAKEFILE
+
+$NGX_OBJS${ngx_dirsep}stap-nginx: src/dtrace/stap-nginx
+ sed -e "s|NGX_TAPSET_PREFIX|$NGX_TAPSET_PREFIX|g" $ngx_long_cont \
+ -e "s|NGX_SBIN_DIR|`dirname $NGX_SBIN_PATH`|g" $ngx_long_cont \
+ -e "s|NGX_SBIN_PATH|$NGX_SBIN_PATH|g" $ngx_long_cont \
+ src/dtrace/stap-nginx > $NGX_OBJS${ngx_dirsep}stap-nginx
+END
+fi
+
+
# create Makefile
cat << END >> Makefile
diff --git a/auto/make b/auto/make
index e7f5490..e1cb37e 100644
--- a/auto/make
+++ b/auto/make
@@ -26,6 +26,9 @@ LINK = $LINK
END
+if [ $NGX_DTRACE = YES ]; then
+ echo DTRACE = $DTRACE >> $NGX_MAKEFILE
+fi
if test -n "$NGX_PERL_CFLAGS"; then
echo NGX_PERL_CFLAGS = $NGX_PERL_CFLAGS >> $NGX_MAKEFILE
@@ -177,6 +180,44 @@ ngx_objs=`echo $ngx_all_objs $ngx_modules_obj \
| sed -e "s/ *\([^ ][^ ]*\)/$ngx_long_regex_cont\1/g" \
-e "s/\//$ngx_regex_dirsep/g"`
+if [ $NGX_DTRACE = YES ]; then
+
+ ngx_dtrace_obj=$NGX_OBJS${ngx_dirsep}ngx_dtrace_provider.$ngx_objext
+
+ ngx_dtrace_h=$NGX_OBJS${ngx_dirsep}ngx_dtrace_provider.h
+
+ ngx_dtrace_d=$NGX_OBJS${ngx_dirsep}dtrace_providers.d
+
+ ngx_dtrace_providers=`echo $NGX_DTRACE_PROVIDERS \
+ | sed -e "s/ *\([^ ][^ ]*\)/$ngx_long_regex_cont\1/g" \
+ -e "s/\//$ngx_regex_dirsep/g"`
+
+ cat << END >> $NGX_MAKEFILE
+
+all: $NGX_OBJS${ngx_dirsep}nginx${ngx_binext}
+
+$ngx_dtrace_d: $ngx_dtrace_providers
+ cat $ngx_dtrace_providers > $ngx_dtrace_d
+
+$ngx_dtrace_h: $ngx_dtrace_d
+ \$(DTRACE) -xnolibs -h -o $ngx_dtrace_h -s $ngx_dtrace_d
+END
+
+ if [ $DTRACE_PROBE_OBJ = YES ]; then
+ cat << END >> $NGX_MAKEFILE
+$ngx_dtrace_obj: $ngx_dtrace_d $ngx_deps$ngx_spacer
+ \$(DTRACE) -xnolibs -G -o $ngx_dtrace_obj -s $ngx_dtrace_d $ngx_objs
+END
+
+ ngx_deps="$ngx_deps$ngx_long_cont$ngx_dtrace_obj"
+ ngx_objs="$ngx_objs$ngx_long_cont$ngx_dtrace_obj"
+
+ if [ "$DTRACE_FROM_SYSTEMTAP" = YES ]; then
+ ngx_deps="$ngx_deps$ngx_long_cont$NGX_OBJS${ngx_dirsep}stap-nginx"
+ fi
+ fi
+fi
+
if test -n "$NGX_LD_OPT$CORE_LIBS"; then
ngx_libs=`echo $NGX_LD_OPT $CORE_LIBS \
| sed -e "s/\//$ngx_regex_dirsep/g" -e "s/^/$ngx_long_regex_cont/"`
diff --git a/auto/options b/auto/options
index 393be40..9b7494f 100644
--- a/auto/options
+++ b/auto/options
@@ -12,6 +12,8 @@ NGX_CONF_PATH=
NGX_ERROR_LOG_PATH=
NGX_PID_PATH=
NGX_LOCK_PATH=
+NGX_TAPSET_PREFIX=
+NGX_STAP_NGX_PATH=
NGX_USER=
NGX_GROUP=
@@ -20,6 +22,12 @@ CPP=
NGX_OBJS=objs
NGX_DEBUG=NO
+NGX_DTRACE=NO
+DTRACE=dtrace
+
+DTRACE_PROBE_OBJ=YES
+DTRACE_FROM_SYSTEMTAP=NO
+
NGX_CC_OPT=
NGX_LD_OPT=
CPU=NO
@@ -169,6 +177,8 @@ do
--error-log-path=*) NGX_ERROR_LOG_PATH="$value";;
--pid-path=*) NGX_PID_PATH="$value" ;;
--lock-path=*) NGX_LOCK_PATH="$value" ;;
+ --tapset-prefix=*) NGX_TAPSET_PREFIX="$value" ;;
+ --stap-nginx-path=*) NGX_STAP_NGX_PATH="$value" ;;
--user=*) NGX_USER="$value" ;;
--group=*) NGX_GROUP="$value" ;;
@@ -272,7 +282,8 @@ use the \"--without-http_limit_conn_module\" option instead"
--with-ld-opt=*) NGX_LD_OPT="$value" ;;
--with-cpu-opt=*) CPU="$value" ;;
--with-debug) NGX_DEBUG=YES ;;
-
+ --with-dtrace=*) DTRACE="$value" ;;
+ --with-dtrace-probes) NGX_DTRACE=YES ;;
--without-pcre) USE_PCRE=DISABLED ;;
--with-pcre) USE_PCRE=YES ;;
--with-pcre=*) PCRE="$value" ;;
@@ -326,6 +337,8 @@ cat << END
--error-log-path=PATH set error log pathname
--pid-path=PATH set nginx.pid pathname
--lock-path=PATH set nginx.lock pathname
+ --tapset-prefix=PATH set systemtap tapset directory prefix
+ --stap-nginx-path=PATH set stap-nginx pathname
--user=USER set non-privileged user for
worker processes
@@ -448,6 +461,8 @@ cat << END
--with-openssl-opt=OPTIONS set additional build options for OpenSSL
--with-debug enable debug logging
+ --with-dtrace-probes enable dtrace USDT probes
+ --with-dtrace=PATH set dtrace utility pathname
END
@@ -477,6 +492,7 @@ NGX_CONF_PATH=${NGX_CONF_PATH:-conf/nginx.conf}
NGX_CONF_PREFIX=`dirname $NGX_CONF_PATH`
NGX_PID_PATH=${NGX_PID_PATH:-logs/nginx.pid}
NGX_LOCK_PATH=${NGX_LOCK_PATH:-logs/nginx.lock}
+NGX_TAPSET_PREFIX=${NGX_TAPSET_PREFIX:-tapset}
if [ ".$NGX_ERROR_LOG_PATH" = ".stderr" ]; then
NGX_ERROR_LOG_PATH=
diff --git a/auto/os/darwin b/auto/os/darwin
index 590e036..af33cf3 100644
--- a/auto/os/darwin
+++ b/auto/os/darwin
@@ -114,3 +114,6 @@ ngx_feature_libs=
ngx_feature_test="int32_t lock, n;
n = OSAtomicCompareAndSwap32Barrier(0, 1, lock)"
. auto/feature
+
+DTRACE_PROBE_OBJ=NO
+
diff --git a/auto/os/freebsd b/auto/os/freebsd
index 6aa823f..ee15166 100644
--- a/auto/os/freebsd
+++ b/auto/os/freebsd
@@ -142,3 +142,8 @@ if [ $version -ge 701000 ]; then
echo " + cpuset_setaffinity() found"
have=NGX_HAVE_CPUSET_SETAFFINITY . auto/have
fi
+
+if [ $NGX_DTRACE = YES ]; then
+ NGX_LD_OPT="$NGX_LD_OPT -lelf"
+fi
+
diff --git a/auto/os/linux b/auto/os/linux
index c506d3d..cbbfbf1 100644
--- a/auto/os/linux
+++ b/auto/os/linux
@@ -151,3 +151,5 @@ ngx_include="sys/vfs.h"; . auto/include
CC_AUX_FLAGS="$cc_aux_flags -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64"
+
+DTRACE_FROM_SYSTEMTAP=YES
diff --git a/auto/sources b/auto/sources
index 374ad66..72bb1b0 100644
--- a/auto/sources
+++ b/auto/sources
@@ -39,6 +39,11 @@ CORE_DEPS="src/core/nginx.h \
src/core/ngx_crypt.h"
+if [ $NGX_DTRACE = YES ]; then
+ CORE_DEPS="$CORE_DEPS objs/ngx_dtrace_provider.h"
+fi
+
+
CORE_SRCS="src/core/nginx.c \
src/core/ngx_log.c \
src/core/ngx_palloc.c \
@@ -291,7 +296,8 @@ HTTP_DEPS="src/http/ngx_http.h \
src/http/ngx_http_script.h \
src/http/ngx_http_upstream.h \
src/http/ngx_http_upstream_round_robin.h \
- src/http/ngx_http_busy_lock.h"
+ src/http/ngx_http_busy_lock.h \
+ src/http/ngx_http_probe.h"
HTTP_SRCS="src/http/ngx_http.c \
src/http/ngx_http_core_module.c \
@@ -524,3 +530,8 @@ NGX_GOOGLE_PERFTOOLS_MODULE=ngx_google_perftools_module
NGX_GOOGLE_PERFTOOLS_SRCS=src/misc/ngx_google_perftools_module.c
NGX_CPP_TEST_SRCS=src/misc/ngx_cpp_test_module.cpp
+
+NGX_DTRACE_PROVIDERS=src/dtrace/nginx_provider.d
+
+NGX_TAPSET_SRCS=src/dtrace/nginx.stp
+
diff --git a/auto/summary b/auto/summary
index dcebec9..3cb269e 100644
--- a/auto/summary
+++ b/auto/summary
@@ -92,6 +92,19 @@ else
echo " nginx logs errors to stderr"
fi
+if [ $NGX_DTRACE = YES ]; then
+ cat << END
+ nginx dtrace static probes enabled
+END
+
+ if [ $DTRACE_FROM_SYSTEMTAP = YES ]; then
+ cat << END
+ nginx systemtap tapset prefix: "$NGX_TAPSET_PREFIX"
+ nginx systemtap wrapper script: "$NGX_STAP_NGX_PATH"
+END
+ fi
+fi
+
cat << END
nginx http access log file: "$NGX_HTTP_LOG_PATH"
nginx http client request body temporary files: "$NGX_HTTP_CLIENT_TEMP_PATH"
diff --git a/configure b/configure
index 45ea154..332c011 100755
--- a/configure
+++ b/configure
@@ -20,6 +20,9 @@ if [ $NGX_DEBUG = YES ]; then
have=NGX_DEBUG . auto/have
fi
+if [ $NGX_DTRACE = YES ]; then
+ have=NGX_DTRACE . auto/have
+fi
if test -z "$NGX_PLATFORM"; then
echo "checking for OS"
diff --git a/src/dtrace/nginx.stp b/src/dtrace/nginx.stp
new file mode 100644
index 0000000..fccea2b
--- /dev/null
+++ b/src/dtrace/nginx.stp
@@ -0,0 +1,152 @@
+/* tapset for nginx */
+
+/* retrieve the request uri string from the ngx_http_request_t pointer */
+function ngx_http_req_uri(r)
+{
+ len = @cast(r, "ngx_http_request_s", "NGX_SBIN_PATH")->uri->len
+
+ if (len == 0) {
+ return ""
+ }
+
+ return user_string_n(@cast(r, "ngx_http_request_s", "NGX_SBIN_PATH")->uri->data, len)
+}
+
+
+/* retrieve the request query string from the ngx_http_request_t pointer */
+function ngx_http_req_args(r)
+{
+ len = @cast(r, "ngx_http_request_s", "NGX_SBIN_PATH")->args->len
+
+ if (len == 0) {
+ return ""
+ }
+
+ return user_string_n(@cast(r, "ngx_http_request_s", "NGX_SBIN_PATH")->args->data, len)
+}
+
+
+/* retrieve the first command name (or directive name) from
+ * the ngx_module_t pointer */
+function ngx_http_module_cmd(m)
+{
+ cmds = @cast(m, "ngx_module_t", "NGX_SBIN_PATH")->commands
+ if (cmds == 0) {
+ return ""
+ }
+
+ len = @cast(cmds, "ngx_command_t", "NGX_SBIN_PATH")->name->len
+
+ if (len == 0) {
+ return ""
+ }
+
+ return user_string_n(@cast(cmds, "ngx_command_t", "NGX_SBIN_PATH")->name->data, len)
+}
+
+
+function ngx_chain_buf(cl)
+{
+ return @cast(cl, "ngx_chain_t", "NGX_SBIN_PATH")->buf
+}
+
+
+function ngx_buf_in_memory(b)
+{
+ return @cast(b, "ngx_buf_t", "NGX_SBIN_PATH")->temporary
+ || @cast(b, "ngx_buf_t", "NGX_SBIN_PATH")->memory
+ || @cast(b, "ngx_buf_t", "NGX_SBIN_PATH")->mmap
+}
+
+
+function ngx_buf_pos(b)
+{
+ return @cast(b, "ngx_buf_t", "NGX_SBIN_PATH")->pos
+}
+
+
+function ngx_buf_file_pos(b)
+{
+ return @cast(b, "ngx_buf_t", "NGX_SBIN_PATH")->file_pos
+}
+
+
+function ngx_buf_last(b)
+{
+ return @cast(b, "ngx_buf_t", "NGX_SBIN_PATH")->last
+}
+
+
+function ngx_buf_file_last(b)
+{
+ return @cast(b, "ngx_buf_t", "NGX_SBIN_PATH")->file_last
+}
+
+
+function ngx_buf_end(b)
+{
+ return @cast(b, "ngx_buf_t", "NGX_SBIN_PATH")->end
+}
+
+
+function ngx_buf_size(b)
+{
+ if (ngx_buf_in_memory(b)) {
+ return ngx_buf_last(b) - ngx_buf_pos(b)
+ }
+
+ return ngx_buf_file_last(b) - ngx_buf_file_pos(b)
+}
+
+
+function ngx_buf_data(b)
+{
+ return user_string_n(ngx_buf_pos(b), ngx_buf_last(b) - ngx_buf_pos(b))
+}
+
+
+function ngx_pool_cleanup_file_name(c)
+{
+ return user_string(@cast(c, "ngx_pool_cleanup_file_t", "NGX_SBIN_PATH")->name)
+}
+
+
+function ngx_http_req_content_length(r)
+{
+ return @cast(r, "ngx_http_request_t", "NGX_SBIN_PATH")->headers_in->content_length_n
+}
+
+
+function ngx_http_req_body_temp_file_name(r)
+{
+ rb = @cast(r, "ngx_http_request_t", "NGX_SBIN_PATH")->request_body
+ if (!rb) {
+ return ""
+ }
+
+ tf = @cast(rb, "ngx_http_request_body_t", "NGX_SBIN_PATH")->temp_file
+ if (!tf) {
+ return ""
+ }
+
+ len = @cast(tf, "ngx_temp_file_t", "NGX_SBIN_PATH")->file->name->len
+
+ return user_string_n(@cast(tf, "ngx_temp_file_t", "NGX_SBIN_PATH")->file->name->data, len)
+}
+
+
+function ngx_table_elt_key(e)
+{
+ len = @cast(e, "ngx_table_elt_t", "NGX_SBIN_PATH")->key->len
+
+ return user_string_n(@cast(e, "ngx_table_elt_t", "NGX_SBIN_PATH")->key->data, len)
+}
+
+
+function ngx_table_elt_value(e)
+{
+ len = @cast(e, "ngx_table_elt_t", "NGX_SBIN_PATH")->value->len
+
+ return user_string_n(@cast(e, "ngx_table_elt_t", "NGX_SBIN_PATH")->value->data, len)
+}
+
diff --git a/src/dtrace/nginx_provider.d b/src/dtrace/nginx_provider.d
new file mode 100644
index 0000000..483ac69
--- /dev/null
+++ b/src/dtrace/nginx_provider.d
@@ -0,0 +1,32 @@
+typedef struct { int dummy; } ngx_http_request_t;
+typedef struct { int dummy; } ngx_str_t;
+typedef int64_t ngx_int_t;
+typedef struct { int dummy; } ngx_module_t;
+typedef struct { int dummy; } ngx_http_module_t;
+typedef struct { int dummy; } ngx_table_elt_t;
+
+
+provider nginx {
+ /* probes for subrequests */
+ probe http__subrequest__cycle(ngx_http_request_t *pr, ngx_str_t *uri, ngx_str_t *args);
+ probe http__subrequest__start(ngx_http_request_t *r);
+ probe http__subrequest__finalize_writing(ngx_http_request_t *r);
+ probe http__subrequest__finalize_nonactive(ngx_http_request_t *r);
+ probe http__subrequest__wake__parent(ngx_http_request_t *r);
+ probe http__subrequest__done(ngx_http_request_t *r);
+ probe http__subrequest__post__start(ngx_http_request_t *r, ngx_int_t rc);
+ probe http__subrequest__post__done(ngx_http_request_t *r, ngx_int_t rc);
+ probe http__module__post__config(ngx_module_t *m);
+ probe http__read__body__abort(ngx_http_request_t *r, char *reason);
+ probe http__read__body__done(ngx_http_request_t *r);
+ probe http__read__req__line__done(ngx_http_request_t *r);
+ probe http__read__req__header__done(ngx_http_request_t *r, ngx_table_elt_t *h);
+};
+
+
+#pragma D attributes Evolving/Evolving/Common provider nginx provider
+#pragma D attributes Private/Private/Unknown provider nginx module
+#pragma D attributes Private/Private/Unknown provider nginx function
+#pragma D attributes Private/Private/Common provider nginx name
+#pragma D attributes Evolving/Evolving/Common provider nginx args
+
diff --git a/src/dtrace/stap-nginx b/src/dtrace/stap-nginx
new file mode 100755
index 0000000..5127fbe
--- /dev/null
+++ b/src/dtrace/stap-nginx
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+PATH="NGX_SBIN_DIR:$PATH"
+export PATH
+exec stap -d "NGX_SBIN_PATH" --ldd -I "NGX_TAPSET_PREFIX" "$@"
+
diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c
index 3e077fb..b7edb7b 100644
--- a/src/http/ngx_http.c
+++ b/src/http/ngx_http.c
@@ -8,6 +8,7 @@
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+#include <ngx_http_probe.h>
static char *ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
@@ -307,6 +308,9 @@ ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
module = ngx_modules[m]->ctx;
if (module->postconfiguration) {
+
+ ngx_http_probe_module_post_config(ngx_modules[m]);
+
if (module->postconfiguration(cf) != NGX_OK) {
return NGX_CONF_ERROR;
}
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c
index c5db18f..f23ba51 100644
--- a/src/http/ngx_http_core_module.c
+++ b/src/http/ngx_http_core_module.c
@@ -8,6 +8,7 @@
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+#include <ngx_http_probe.h>
typedef struct {
@@ -2377,6 +2378,8 @@ ngx_http_subrequest(ngx_http_request_t *r,
r->main->subrequests--;
if (r->main->subrequests == 0) {
+ ngx_http_probe_subrequest_cycle(r, &uri, &args);
+
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,
*psr = sr;
+ ngx_http_probe_subrequest_start(sr);
+
return ngx_http_post_request(sr, NULL);
}
diff --git a/src/http/ngx_http_probe.h b/src/http/ngx_http_probe.h
new file mode 100644
index 0000000..d7d2d45
--- /dev/null
+++ b/src/http/ngx_http_probe.h
@@ -0,0 +1,75 @@
+#ifndef _NGX_HTTP_PROBE_H_INCLUDED_
+#define _NGX_HTTP_PROBE_H_INCLUDED_
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+#include <ngx_http.h>
+
+
+#if (NGX_DTRACE)
+
+#include <ngx_dtrace_provider.h>
+
+#define ngx_http_probe_subrequest_cycle(pr, uri, args) \
+ NGINX_HTTP_SUBREQUEST_CYCLE(pr, uri, args)
+
+#define ngx_http_probe_subrequest_start(r) \
+ NGINX_HTTP_SUBREQUEST_START(r)
+
+#define ngx_http_probe_subrequest_finalize_writing(r) \
+ NGINX_HTTP_SUBREQUEST_FINALIZE_WRITING(r)
+
+#define ngx_http_probe_subrequest_finalize_nonactive(r) \
+ NGINX_HTTP_SUBREQUEST_FINALIZE_NONACTIVE(r)
+
+#define ngx_http_probe_subrequest_finalize_nonactive(r) \
+ NGINX_HTTP_SUBREQUEST_FINALIZE_NONACTIVE(r)
+
+#define ngx_http_probe_subrequest_wake_parent(r) \
+ NGINX_HTTP_SUBREQUEST_WAKE_PARENT(r)
+
+#define ngx_http_probe_subrequest_done(r) \
+ NGINX_HTTP_SUBREQUEST_DONE(r)
+
+#define ngx_http_probe_subrequest_post_start(r, rc) \
+ NGINX_HTTP_SUBREQUEST_POST_START(r, rc)
+
+#define ngx_http_probe_subrequest_post_done(r, rc) \
+ NGINX_HTTP_SUBREQUEST_POST_DONE(r, rc)
+
+#define ngx_http_probe_module_post_config(m) \
+ NGINX_HTTP_MODULE_POST_CONFIG(m)
+
+#define ngx_http_probe_read_body_abort(r, reason) \
+ NGINX_HTTP_READ_BODY_ABORT(r, reason)
+
+#define ngx_http_probe_read_body_done(r) \
+ NGINX_HTTP_READ_BODY_DONE(r)
+
+#define ngx_http_probe_read_req_line_done(r) \
+ NGINX_HTTP_READ_REQ_LINE_DONE(r)
+
+#define ngx_http_probe_read_req_header_done(r, h) \
+ NGINX_HTTP_READ_REQ_HEADER_DONE(r, h)
+
+#else /* !(NGX_DTRACE) */
+
+#define ngx_http_probe_subrequest_cycle(pr, uri, args)
+#define ngx_http_probe_subrequest_start(r)
+#define ngx_http_probe_subrequest_finalize_writing(r)
+#define ngx_http_probe_subrequest_finalize_nonactive(r)
+#define ngx_http_probe_subrequest_wake_parent(r)
+#define ngx_http_probe_subrequest_done(r)
+#define ngx_http_probe_subrequest_post_start(r, rc)
+#define ngx_http_probe_subrequest_post_done(r, rc)
+#define ngx_http_probe_module_post_config(m)
+#define ngx_http_probe_read_body_abort(r, reason)
+#define ngx_http_probe_read_body_done(r)
+#define ngx_http_probe_read_req_line_done(r)
+#define ngx_http_probe_read_req_header_done(r, h)
+
+#endif /* NGX_DTRACE */
+
+
+#endif /* _NGX_HTTP_PROBE_H_INCLUDED_ */
diff --git a/src/http/ngx_http_request.c b/src/http/ngx_http_request.c
index 436e17d..6dc5cb2 100644
--- a/src/http/ngx_http_request.c
+++ b/src/http/ngx_http_request.c
@@ -8,6 +8,7 @@
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+#include <ngx_http_probe.h>
static void ngx_http_init_request(ngx_event_t *ev);
@@ -864,6 +865,8 @@ ngx_http_process_request_line(ngx_event_t *rev)
}
#endif
+ ngx_http_probe_read_req_line_done(r);
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http request line: \"%V\"", &r->request_line);
@@ -1109,6 +1112,8 @@ ngx_http_process_request_headers(ngx_event_t *rev)
return;
}
+ ngx_http_probe_read_req_header_done(r, h);
+
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http header: \"%V: %V\"",
&h->key, &h->value);
@@ -1963,7 +1968,11 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
}
if (r != r->main && r->post_subrequest) {
+ ngx_http_probe_subrequest_post_start(r, rc);
+
rc = r->post_subrequest->handler(r, r->post_subrequest->data, rc);
+
+ ngx_http_probe_subrequest_post_done(r, rc);
}
if (rc == NGX_ERROR
@@ -2013,6 +2022,8 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
if (r->buffered || r->postponed) {
+ ngx_http_probe_subrequest_finalize_writing(r);
+
if (ngx_http_set_write_handler(r) != NGX_OK) {
ngx_http_terminate_request(r, 0);
}
@@ -2049,10 +2060,14 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
pr->postponed = pr->postponed->next;
}
+ ngx_http_probe_subrequest_done(r);
+
c->data = pr;
} else {
+ ngx_http_probe_subrequest_finalize_nonactive(r);
+
ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
"http finalize non-active request: \"%V?%V\"",
&r->uri, &r->args);
@@ -2064,6 +2079,8 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
}
}
+ ngx_http_probe_subrequest_wake_parent(r);
+
if (ngx_http_post_request(pr, NULL) != NGX_OK) {
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 f0e671a..37ec5d2 100644
--- a/src/http/ngx_http_request_body.c
+++ b/src/http/ngx_http_request_body.c
@@ -8,6 +8,7 @@
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>
+#include <ngx_http_probe.h>
static void ngx_http_read_client_request_body_handler(ngx_http_request_t *r);
@@ -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) {
+ ngx_http_probe_read_body_abort(r,
+ r->request_body ? "body exists"
+ : "body discarded");
post_handler(r);
return NGX_OK;
}
if (ngx_http_test_expect(r) != NGX_OK) {
+ ngx_http_probe_read_body_abort(r, "test expect failed");
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
@@ -56,6 +61,7 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
r->request_body = rb;
if (r->headers_in.content_length_n < 0) {
+ ngx_http_probe_read_body_abort(r, "no content length");
post_handler(r);
return NGX_OK;
}
@@ -89,10 +95,13 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
tf->persistent, tf->clean, tf->access)
!= NGX_OK)
{
+ ngx_http_probe_read_body_abort(r, "create temp file failed");
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
}
+ ngx_http_probe_read_body_done(r);
+
post_handler(r);
return NGX_OK;
@@ -148,10 +157,13 @@ ngx_http_read_client_request_body(ngx_http_request_t *r,
if (r->request_body_in_file_only) {
if (ngx_http_write_request_body(r, rb->bufs) != NGX_OK) {
+ ngx_http_probe_read_body_abort(r, "write temp file failed");
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
}
+ ngx_http_probe_read_body_done(r);
+
post_handler(r);
return NGX_OK;
@@ -245,6 +257,7 @@ ngx_http_read_client_request_body_handler(ngx_http_request_t *r)
ngx_int_t rc;
if (r->connection->read->timedout) {
+ ngx_http_probe_read_body_abort(r, "timed out");
r->connection->timedout = 1;
ngx_http_finalize_request(r, NGX_HTTP_REQUEST_TIME_OUT);
return;
@@ -279,6 +292,7 @@ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
if (rb->buf->last == rb->buf->end) {
if (ngx_http_write_request_body(r, rb->to_write) != NGX_OK) {
+ ngx_http_probe_read_body_abort(r, "write temp file failed");
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
@@ -302,6 +316,9 @@ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
}
if (n == 0) {
+
+ ngx_http_probe_read_body_abort(r, "connection closed");
+
ngx_log_error(NGX_LOG_INFO, c->log, 0,
"client prematurely closed connection");
}
@@ -352,6 +369,7 @@ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
/* save the last part */
if (ngx_http_write_request_body(r, rb->to_write) != NGX_OK) {
+ ngx_http_probe_read_body_abort(r, "write temp file failed");
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
@@ -381,6 +399,8 @@ ngx_http_do_read_client_request_body(ngx_http_request_t *r)
r->read_event_handler = ngx_http_block_reading;
+ ngx_http_probe_read_body_done(r);
+
rb->post_handler(r);
return NGX_OK;

View File

@ -1,15 +0,0 @@
--- nginx-1.2.1/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
+++ nginx-1.2.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;
}
}

View File

@ -1,115 +0,0 @@
--- nginx-1.2.1/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.2.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;

View File

@ -1,24 +0,0 @@
diff -ur nginx-1.2.1/auto/cc/gcc nginx-1.2.1-patched/auto/cc/gcc
--- nginx-1.2.1/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.2.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.2.1/auto/cc/icc nginx-1.2.1-patched/auto/cc/icc
--- nginx-1.2.1/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.2.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"

View File

@ -1,609 +0,0 @@
diff -ur nginx-1.2.1/src/core/nginx.h nginx-1.2.1-patched/src/core/nginx.h
--- nginx-1.2.1/src/core/nginx.h 2011-08-29 17:30:22.000000000 +0800
+++ nginx-1.2.1-patched/src/core/nginx.h 2011-09-13 12:11:03.135622101 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1002001
#define NGINX_VERSION "1.2.1"
-#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.1/src/core/ngx_array.c nginx-1.2.1-patched/src/core/ngx_array.c
--- nginx-1.2.1/src/core/ngx_array.c 2012-02-06 04:02:59.000000000 +0800
+++ nginx-1.2.1-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.1/src/core/ngx_array.h nginx-1.2.1-patched/src/core/ngx_array.h
--- nginx-1.2.1/src/core/ngx_array.h 2012-02-06 04:02:59.000000000 +0800
+++ nginx-1.2.1-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.1/src/core/ngx_palloc.c nginx-1.2.1-patched/src/core/ngx_palloc.c
--- nginx-1.2.1/src/core/ngx_palloc.c 2012-02-06 04:02:59.000000000 +0800
+++ nginx-1.2.1-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.1/src/core/ngx_palloc.h nginx-1.2.1-patched/src/core/ngx_palloc.h
--- nginx-1.2.1/src/core/ngx_palloc.h 2012-02-06 04:02:59.000000000 +0800
+++ nginx-1.2.1-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;
};

View File

@ -1,20 +0,0 @@
--- nginx-1.2.1/src/os/unix/ngx_process_cycle.c 2012-02-06 04:02:59.000000000 +0800
+++ nginx-1.2.1-patched/src/os/unix/ngx_process_cycle.c 2012-06-15 11:39:11.234286287 +0800
@@ -707,6 +707,8 @@
ngx_exit_log.file = &ngx_exit_log_file;
ngx_exit_cycle.log = &ngx_exit_log;
+ ngx_exit_cycle.files = ngx_cycle->files;
+ ngx_exit_cycle.files_n = ngx_cycle->files_n;
ngx_cycle = &ngx_exit_cycle;
ngx_destroy_pool(cycle->pool);
@@ -1063,6 +1065,8 @@
ngx_exit_log.file = &ngx_exit_log_file;
ngx_exit_cycle.log = &ngx_exit_log;
+ ngx_exit_cycle.files = ngx_cycle->files;
+ ngx_exit_cycle.files_n = ngx_cycle->files_n;
ngx_cycle = &ngx_exit_cycle;
ngx_destroy_pool(cycle->pool);

View File

@ -1,11 +0,0 @@
--- nginx-1.2.1/src/core/ngx_resolver.c 2012-03-05 21:17:56.000000000 +0800
+++ nginx-1.2.1-patched/src/core/ngx_resolver.c 2012-06-01 17:55:55.861130605 +0800
@@ -987,7 +987,7 @@
nan = (query->nan_hi << 8) + query->nan_lo;
ngx_log_debug6(NGX_LOG_DEBUG_CORE, r->log, 0,
- "resolver DNS response %ui fl:%04Xui %ui/%ui/%ui/%ui",
+ "resolver DNS response %ui fl:%04Xui %ui/%ui/%ud/%ud",
ident, flags, nqs, nan,
(query->nns_hi << 8) + query->nns_lo,
(query->nar_hi << 8) + query->nar_lo);

View File

@ -1,26 +0,0 @@
diff -ur lz-nginx-1.2.1/nginx-1.2.1/src/core/nginx.h lz-nginx-1.2.1-patched/nginx-1.2.1/src/core/nginx.h
--- lz-nginx-1.2.1/nginx-1.2.1/src/core/nginx.h 2010-02-12 17:31:01.000000000 +0800
+++ lz-nginx-1.2.1-patched/nginx-1.2.1/src/core/nginx.h 2010-03-30 10:52:13.240702627 +0800
@@ -10,7 +10,7 @@
#define nginx_version 1002001
#define NGINX_VERSION "1.2.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.2.1-patched/nginx-1.2.1/src/core: nginx.h.orig
Only in lz-nginx-1.2.1-patched/nginx-1.2.1/src/core: nginx.h.rej
diff -ur lz-nginx-1.2.1/nginx-1.2.1/src/http/ngx_http_header_filter_module.c lz-nginx-1.2.1-patched/nginx-1.2.1/src/http/ngx_http_header_filter_module.c
--- lz-nginx-1.2.1/nginx-1.2.1/src/http/ngx_http_header_filter_module.c 2010-03-03 23:14:04.000000000 +0800
+++ lz-nginx-1.2.1-patched/nginx-1.2.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;

View File

@ -1,32 +0,0 @@
diff -ur nginx-1.2.1/src/http/ngx_http_upstream.c nginx-1.2.1-patched/src/http/ngx_http_upstream.c
--- nginx-1.2.1/src/http/ngx_http_upstream.c 2011-12-14 02:34:34.000000000 +0800
+++ nginx-1.2.1-patched/src/http/ngx_http_upstream.c 2012-03-21 21:20:17.333111806 +0800
@@ -1385,6 +1385,8 @@
/* 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,
@@ -1451,7 +1453,7 @@
#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 -ur nginx-1.2.1/src/http/ngx_http_upstream.h nginx-1.2.1-patched/src/http/ngx_http_upstream.h
--- nginx-1.2.1/src/http/ngx_http_upstream.h 2011-11-01 22:18:10.000000000 +0800
+++ nginx-1.2.1-patched/src/http/ngx_http_upstream.h 2012-03-21 21:18:21.041237173 +0800
@@ -313,6 +313,7 @@
unsigned buffering:1;
unsigned request_sent:1;
+ unsigned request_all_sent:1;
unsigned header_sent:1;
};

View File

@ -1,136 +0,0 @@
diff -ur nginx-1.2.3/src/http/ngx_http_core_module.c nginx-1.2.3-patched/src/http/ngx_http_core_module.c
--- nginx-1.2.3/src/http/ngx_http_core_module.c 2012-08-06 10:31:32.000000000 -0700
+++ nginx-1.2.3-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.3/src/http/ngx_http_request_body.c nginx-1.2.3-patched/src/http/ngx_http_request_body.c
--- nginx-1.2.3/src/http/ngx_http_request_body.c 2012-04-12 12:35:41.000000000 -0700
+++ nginx-1.2.3-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.3/src/http/ngx_http_request.c nginx-1.2.3-patched/src/http/ngx_http_request.c
--- nginx-1.2.3/src/http/ngx_http_request.c 2012-08-06 10:36:30.000000000 -0700
+++ nginx-1.2.3-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.3/src/http/ngx_http_request.h nginx-1.2.3-patched/src/http/ngx_http_request.h
--- nginx-1.2.3/src/http/ngx_http_request.h 2012-07-02 10:41:52.000000000 -0700
+++ nginx-1.2.3-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.3-patched/src/http: ngx_http_request.h.orig

View File

@ -1,42 +0,0 @@
diff -urp nginx-1.2.3/src/os/unix/ngx_channel.c nginx-1.2.3-patched/src/os/unix/ngx_channel.c
--- nginx-1.2.3/src/os/unix/ngx_channel.c 2012-01-18 07:07:43.000000000 -0800
+++ nginx-1.2.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.2.3/src/os/unix/ngx_process_cycle.c nginx-1.2.3-patched/src/os/unix/ngx_process_cycle.c
--- nginx-1.2.3/src/os/unix/ngx_process_cycle.c 2012-07-02 09:23:14.000000000 -0700
+++ nginx-1.2.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;

File diff suppressed because it is too large Load Diff

View File

@ -1,15 +0,0 @@
--- nginx-1.2.3/src/http/modules/ngx_http_proxy_module.c 2012-04-23 18:40:01.000000000 +0800
+++ nginx-1.2.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;
}
}

View File

@ -1,115 +0,0 @@
--- nginx-1.2.3/src/http/modules/ngx_http_log_module.c 2011-11-01 21:24:50.000000000 +0800
+++ nginx-1.2.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;

View File

@ -1,24 +0,0 @@
diff -ur nginx-1.2.3/auto/cc/gcc nginx-1.2.3-patched/auto/cc/gcc
--- nginx-1.2.3/auto/cc/gcc 2011-06-27 19:53:00.205737804 +0800
+++ nginx-1.2.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.2.3/auto/cc/icc nginx-1.2.3-patched/auto/cc/icc
--- nginx-1.2.3/auto/cc/icc 2011-06-27 19:52:56.370157068 +0800
+++ nginx-1.2.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"

Some files were not shown because too many files have changed in this diff Show More