diff options
| author | Igor Sysoev <igor@sysoev.ru> | 2009-10-29 15:53:50 +0000 |
|---|---|---|
| committer | Igor Sysoev <igor@sysoev.ru> | 2009-10-29 15:53:50 +0000 |
| commit | 44fa8877c05d86c5a7f657231ced44c9e52c0c39 (patch) | |
| tree | 1bc3096ea0cda7a7f54a5ee4bf879aca773f78c8 /src | |
| parent | e8568076605f0240ba1f9a25a5ea3a8e1137334a (diff) | |
| download | nginx-44fa8877c05d86c5a7f657231ced44c9e52c0c39.tar.gz nginx-44fa8877c05d86c5a7f657231ced44c9e52c0c39.tar.bz2 | |
fix segfaults if no listen directive was set in default server {} block:
ngx_http_add_listen() uses server's connection_pool_size and
client_header_timeout values, therefore it must be called after
the values have been merged, the bug had been introduced in r3218
Diffstat (limited to 'src')
| -rw-r--r-- | src/http/ngx_http_core_module.c | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/src/http/ngx_http_core_module.c b/src/http/ngx_http_core_module.c index dc3736818..9cce2d547 100644 --- a/src/http/ngx_http_core_module.c +++ b/src/http/ngx_http_core_module.c @@ -2838,6 +2838,33 @@ ngx_http_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) /* TODO: it does not merge, it inits only */ + ngx_conf_merge_size_value(conf->connection_pool_size, + prev->connection_pool_size, 256); + ngx_conf_merge_size_value(conf->request_pool_size, + prev->request_pool_size, 4096); + ngx_conf_merge_msec_value(conf->client_header_timeout, + prev->client_header_timeout, 60000); + ngx_conf_merge_size_value(conf->client_header_buffer_size, + prev->client_header_buffer_size, 1024); + ngx_conf_merge_bufs_value(conf->large_client_header_buffers, + prev->large_client_header_buffers, + 4, ngx_pagesize); + + if (conf->large_client_header_buffers.size < conf->connection_pool_size) { + ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, + "the \"large_client_header_buffers\" size must be " + "equal to or bigger than \"connection_pool_size\""); + return NGX_CONF_ERROR; + } + + ngx_conf_merge_value(conf->ignore_invalid_headers, + prev->ignore_invalid_headers, 1); + + ngx_conf_merge_value(conf->merge_slashes, prev->merge_slashes, 1); + + ngx_conf_merge_value(conf->underscores_in_headers, + prev->underscores_in_headers, 0); + if (!conf->listen) { ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); @@ -2882,33 +2909,6 @@ ngx_http_core_merge_srv_conf(ngx_conf_t *cf, void *parent, void *child) sn->name.data = conf->server_name.data; } - ngx_conf_merge_size_value(conf->connection_pool_size, - prev->connection_pool_size, 256); - ngx_conf_merge_size_value(conf->request_pool_size, - prev->request_pool_size, 4096); - ngx_conf_merge_msec_value(conf->client_header_timeout, - prev->client_header_timeout, 60000); - ngx_conf_merge_size_value(conf->client_header_buffer_size, - prev->client_header_buffer_size, 1024); - ngx_conf_merge_bufs_value(conf->large_client_header_buffers, - prev->large_client_header_buffers, - 4, ngx_pagesize); - - if (conf->large_client_header_buffers.size < conf->connection_pool_size) { - ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, - "the \"large_client_header_buffers\" size must be " - "equal to or bigger than \"connection_pool_size\""); - return NGX_CONF_ERROR; - } - - ngx_conf_merge_value(conf->ignore_invalid_headers, - prev->ignore_invalid_headers, 1); - - ngx_conf_merge_value(conf->merge_slashes, prev->merge_slashes, 1); - - ngx_conf_merge_value(conf->underscores_in_headers, - prev->underscores_in_headers, 0); - return NGX_CONF_OK; } |
