mirror of
https://github.com/nginx/nginx.git
synced 2024-12-22 15:13:28 -06:00
nginx-0.3.41-RELEASE import
*) Feature: the -v switch. *) Bugfix: the segmentation fault may occurred if the SSI page has remote subrequests. *) Bugfix: in FastCGI handling. *) Bugfix: if the perl modules path was not set using --with-perl_modules_path=PATH or the "perl_modules", then the segmentation fault was occurred.
This commit is contained in:
parent
7d2d90ce71
commit
4ecb4d721d
@ -9,6 +9,52 @@
|
||||
<title lang="en">nginx changelog</title>
|
||||
|
||||
|
||||
<changes ver="0.3.41" date="21.04.2006">
|
||||
|
||||
<change type="feature">
|
||||
<para lang="ru">
|
||||
ËÌÀÞ -v.
|
||||
</para>
|
||||
<para lang="en">
|
||||
the -v switch.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
ÐÒÉ ×ËÌÀÞÅÎÉÉ × SSI ÕÄÁÌ£ÎÎÙÈ ÐÏÄÚÁÐÒÏÓÏ×
|
||||
ÍÏÇ ÐÒÏÉÚÏÊÔÉ segmentation fault.
|
||||
</para>
|
||||
<para lang="en">
|
||||
the segmentation fault may occurred if the SSI page has remote subrequests.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
× ÏÂÒÁÂÏÔËÅ FastCGI.
|
||||
</para>
|
||||
<para lang="en">
|
||||
in FastCGI handling.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
<change type="bugfix">
|
||||
<para lang="ru">
|
||||
ÅÓÌÉ ÐÕÔØ Ë ÐÅÒÌÏ×ÙÍ ÍÏÄÕÌÑÍ ÎÅ ÂÙÌ ÕËÁÚÁÎ Ó ÐÏÍÏÝØÀ
|
||||
--with-perl_modules_path=PATH ÉÌÉ ÄÉÒÅËÔÉ×Ù perl_modules,
|
||||
ÔÏ ÎÁ ÓÔÁÒÔÅ ÐÒÏÉÓÈÏÄÉÌ segmentation fault.
|
||||
</para>
|
||||
<para lang="en">
|
||||
if the perl modules path was not set using
|
||||
--with-perl_modules_path=PATH or the "perl_modules", then
|
||||
the segmentation fault was occurred.
|
||||
</para>
|
||||
</change>
|
||||
|
||||
</changes>
|
||||
|
||||
|
||||
<changes ver="0.3.40" date="19.04.2006">
|
||||
|
||||
<change type="feature">
|
||||
|
@ -175,6 +175,8 @@ ngx_module_t ngx_core_module = {
|
||||
|
||||
ngx_uint_t ngx_max_module;
|
||||
|
||||
static ngx_uint_t ngx_show_version;
|
||||
|
||||
static char *ngx_null_environ = NULL;
|
||||
|
||||
|
||||
@ -229,6 +231,17 @@ main(int argc, char *const *argv)
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (ngx_show_version) {
|
||||
ngx_write_fd(ngx_stderr_fileno, "nginx version: " NGINX_VER CRLF,
|
||||
sizeof("nginx version: " NGINX_VER CRLF) - 1);
|
||||
|
||||
#ifdef NGX_COMPILER
|
||||
ngx_write_fd(ngx_stderr_fileno, "built by " NGX_COMPILER CRLF,
|
||||
sizeof("built by " NGX_COMPILER CRLF) - 1);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (ngx_test_config) {
|
||||
log->log_level = NGX_LOG_INFO;
|
||||
}
|
||||
@ -472,6 +485,10 @@ ngx_getopt(ngx_cycle_t *cycle, int argc, char *const *argv)
|
||||
|
||||
switch (argv[i][1]) {
|
||||
|
||||
case 'v':
|
||||
ngx_show_version = 1;
|
||||
break;
|
||||
|
||||
case 't':
|
||||
ngx_test_config = 1;
|
||||
break;
|
||||
|
@ -8,7 +8,7 @@
|
||||
#define _NGINX_H_INCLUDED_
|
||||
|
||||
|
||||
#define NGINX_VER "nginx/0.3.40"
|
||||
#define NGINX_VER "nginx/0.3.41"
|
||||
|
||||
#define NGINX_VAR "NGINX"
|
||||
#define NGX_OLDPID_EXT ".oldbin"
|
||||
|
@ -198,6 +198,8 @@ ngx_log_init(void)
|
||||
|
||||
#if (NGX_WIN32)
|
||||
|
||||
ngx_stderr_fileno = GetStdHandle(STD_ERROR_HANDLE);
|
||||
|
||||
ngx_stderr.fd = ngx_open_file(NGX_ERROR_LOG_PATH, NGX_FILE_RDWR,
|
||||
NGX_FILE_CREATE_OR_OPEN|NGX_FILE_APPEND);
|
||||
|
||||
|
@ -116,10 +116,6 @@ ngx_http_dav_handler(ngx_http_request_t *r)
|
||||
return NGX_DECLINED;
|
||||
}
|
||||
|
||||
if (r->headers_in.content_length_n < 0) {
|
||||
return NGX_HTTP_BAD_REQUEST;
|
||||
}
|
||||
|
||||
r->request_body_in_file_only = 1;
|
||||
r->request_body_in_persistent_file = 1;
|
||||
r->request_body_delete_incomplete_file = 1;
|
||||
@ -312,6 +308,8 @@ ok:
|
||||
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
r->headers_out.content_length_n = 0;
|
||||
}
|
||||
|
||||
r->headers_out.status = status;
|
||||
|
@ -1173,6 +1173,11 @@ ngx_http_fastcgi_input_filter(ngx_event_pipe_t *p, ngx_buf_t *buf)
|
||||
if (f->type == NGX_HTTP_FASTCGI_STDERR) {
|
||||
|
||||
if (f->length) {
|
||||
|
||||
if (f->pos == f->last) {
|
||||
break;
|
||||
}
|
||||
|
||||
line.data = f->pos;
|
||||
|
||||
if (f->pos + f->length <= f->last) {
|
||||
@ -1212,6 +1217,10 @@ ngx_http_fastcgi_input_filter(ngx_event_pipe_t *p, ngx_buf_t *buf)
|
||||
|
||||
/* f->type == NGX_HTTP_FASTCGI_STDOUT */
|
||||
|
||||
if (f->pos == f->last) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (p->free) {
|
||||
b = p->free->buf;
|
||||
p->free = p->free->next;
|
||||
|
@ -86,6 +86,10 @@ ngx_http_static_handler(ngx_http_request_t *r)
|
||||
ngx_pool_cleanup_file_t *clnf;
|
||||
ngx_http_core_loc_conf_t *clcf;
|
||||
|
||||
if (r->method != NGX_HTTP_GET && r->method != NGX_HTTP_HEAD) {
|
||||
return NGX_HTTP_NOT_ALLOWED;
|
||||
}
|
||||
|
||||
if (r->uri.data[r->uri.len - 1] == '/') {
|
||||
return NGX_DECLINED;
|
||||
}
|
||||
@ -95,10 +99,6 @@ ngx_http_static_handler(ngx_http_request_t *r)
|
||||
return NGX_DECLINED;
|
||||
}
|
||||
|
||||
if (r->method != NGX_HTTP_GET && r->method != NGX_HTTP_HEAD) {
|
||||
return NGX_HTTP_NOT_ALLOWED;
|
||||
}
|
||||
|
||||
rc = ngx_http_discard_body(r);
|
||||
|
||||
if (rc != NGX_OK && rc != NGX_AGAIN) {
|
||||
|
@ -483,9 +483,11 @@ ngx_http_perl_init_interpreter(ngx_conf_t *cf, ngx_http_perl_main_conf_t *pmcf)
|
||||
}
|
||||
#endif
|
||||
|
||||
if (pmcf->modules.data) {
|
||||
if (ngx_conf_full_name(cf->cycle, &pmcf->modules) != NGX_OK) {
|
||||
return NGX_CONF_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
PERL_SYS_INIT(&ngx_argc, &ngx_argv);
|
||||
|
||||
|
@ -67,17 +67,18 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
|
||||
r->method_end = p - 1;
|
||||
m = r->request_start;
|
||||
|
||||
if (p - m == 3) {
|
||||
switch (p - m) {
|
||||
|
||||
case 3:
|
||||
if (m[0] == 'G' && m[1] == 'E' && m[2] == 'T') {
|
||||
r->method = NGX_HTTP_GET;
|
||||
|
||||
} else if (m[0] == 'P' && m[1] == 'U' && m[2] == 'T') {
|
||||
r->method = NGX_HTTP_PUT;
|
||||
}
|
||||
break;
|
||||
|
||||
} else if (p - m == 4) {
|
||||
|
||||
case 4:
|
||||
if (m[0] == 'P' && m[1] == 'O'
|
||||
&& m[2] == 'S' && m[3] == 'T')
|
||||
{
|
||||
@ -88,22 +89,23 @@ ngx_http_parse_request_line(ngx_http_request_t *r, ngx_buf_t *b)
|
||||
{
|
||||
r->method = NGX_HTTP_HEAD;
|
||||
}
|
||||
break;
|
||||
|
||||
} else if (p - m == 5) {
|
||||
|
||||
case 5:
|
||||
if (m[0] == 'M' && m[1] == 'K'
|
||||
&& m[2] == 'C' && m[3] == 'O' && m[4] == 'L')
|
||||
{
|
||||
r->method = NGX_HTTP_MKCOL;
|
||||
}
|
||||
break;
|
||||
|
||||
} else if (p - m == 6) {
|
||||
|
||||
case 6:
|
||||
if (m[0] == 'D' && m[1] == 'E' && m[2] == 'L'
|
||||
&& m[3] == 'E' && m[4] == 'T' && m[5] == 'E')
|
||||
{
|
||||
r->method = NGX_HTTP_DELETE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
state = sw_spaces_before_uri;
|
||||
|
@ -1218,7 +1218,9 @@ ngx_http_process_request_header(ngx_http_request_t *r)
|
||||
}
|
||||
}
|
||||
|
||||
if (r->method == NGX_HTTP_POST && r->headers_in.content_length_n == -1) {
|
||||
if (r->method & (NGX_HTTP_POST|NGX_HTTP_PUT)
|
||||
&& r->headers_in.content_length_n == -1)
|
||||
{
|
||||
ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
|
||||
"client sent POST method without \"Content-Length\" header");
|
||||
ngx_http_finalize_request(r, NGX_HTTP_LENGTH_REQUIRED);
|
||||
@ -1432,7 +1434,6 @@ ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
|
||||
}
|
||||
|
||||
ngx_http_finalize_request(r, ngx_http_special_response_handler(r, rc));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@ -2155,18 +2156,10 @@ static void
|
||||
ngx_http_close_request(ngx_http_request_t *r, ngx_int_t error)
|
||||
{
|
||||
ngx_connection_t *c;
|
||||
ngx_http_cleanup_t *cln;
|
||||
|
||||
c = r->connection;
|
||||
r = r->main;
|
||||
|
||||
for (cln = r->cleanup; cln; cln = cln->next) {
|
||||
if (cln->handler) {
|
||||
cln->handler(cln->data);
|
||||
}
|
||||
}
|
||||
|
||||
ngx_http_request_done(r, error);
|
||||
ngx_http_request_done(r->main, error);
|
||||
ngx_http_close_connection(c);
|
||||
}
|
||||
|
||||
@ -2177,6 +2170,7 @@ ngx_http_request_done(ngx_http_request_t *r, ngx_int_t error)
|
||||
ngx_log_t *log;
|
||||
ngx_uint_t i, n;
|
||||
struct linger linger;
|
||||
ngx_http_cleanup_t *cln;
|
||||
ngx_http_log_ctx_t *ctx;
|
||||
ngx_http_handler_pt *log_handler;
|
||||
ngx_http_core_loc_conf_t *clcf;
|
||||
@ -2191,6 +2185,12 @@ ngx_http_request_done(ngx_http_request_t *r, ngx_int_t error)
|
||||
return;
|
||||
}
|
||||
|
||||
for (cln = r->cleanup; cln; cln = cln->next) {
|
||||
if (cln->handler) {
|
||||
cln->handler(cln->data);
|
||||
}
|
||||
}
|
||||
|
||||
#if (NGX_STAT_STUB)
|
||||
|
||||
if (r->stat_reading) {
|
||||
|
@ -13,8 +13,9 @@
|
||||
ngx_int_t
|
||||
ngx_shm_alloc(ngx_shm_t *shm)
|
||||
{
|
||||
shm->addr = mmap(NULL, shm->size,
|
||||
PROT_READ|PROT_WRITE, MAP_ANON|MAP_SHARED, -1, 0);
|
||||
shm->addr = (u_char *) mmap(NULL, shm->size,
|
||||
PROT_READ|PROT_WRITE,
|
||||
MAP_ANON|MAP_SHARED, -1, 0);
|
||||
|
||||
if (shm->addr == MAP_FAILED) {
|
||||
ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno,
|
||||
@ -29,7 +30,7 @@ ngx_shm_alloc(ngx_shm_t *shm)
|
||||
void
|
||||
ngx_shm_free(ngx_shm_t *shm)
|
||||
{
|
||||
if (munmap(shm->addr, shm->size) == -1) {
|
||||
if (munmap((void *) shm->addr, shm->size) == -1) {
|
||||
ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno,
|
||||
"munmap(%p, %uz) failed", shm->addr, shm->size);
|
||||
}
|
||||
@ -50,7 +51,8 @@ ngx_shm_alloc(ngx_shm_t *shm)
|
||||
return NGX_ERROR;
|
||||
}
|
||||
|
||||
shm->addr = mmap(NULL, shm->size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
|
||||
shm->addr = (u_char *) mmap(NULL, shm->size, PROT_READ|PROT_WRITE,
|
||||
MAP_SHARED, fd, 0);
|
||||
|
||||
if (shm->addr == MAP_FAILED) {
|
||||
ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno,
|
||||
@ -69,7 +71,7 @@ ngx_shm_alloc(ngx_shm_t *shm)
|
||||
void
|
||||
ngx_shm_free(ngx_shm_t *shm)
|
||||
{
|
||||
if (munmap(shm->addr, shm->size) == -1) {
|
||||
if (munmap((void *) shm->addr, shm->size) == -1) {
|
||||
ngx_log_error(NGX_LOG_ALERT, shm->log, ngx_errno,
|
||||
"munmap(%p, %uz) failed", shm->addr, shm->size);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user