[nginx] Fixed ngx_open_cached_file() error handling.
Sergey Kandaurov
pluknet at nginx.com
Tue Mar 28 11:23:06 UTC 2017
details: http://hg.nginx.org/nginx/rev/3fb9b5eb75c0
branches:
changeset: 6948:3fb9b5eb75c0
user: Sergey Kandaurov <pluknet at nginx.com>
date: Tue Mar 28 14:21:38 2017 +0300
description:
Fixed ngx_open_cached_file() error handling.
If of.err is 0, it means that there was a memory allocation error
and no further logging and/or processing is needed. The of.failed
string can be only accessed if of.err is not 0.
diffstat:
src/http/modules/ngx_http_index_module.c | 6 +++---
src/http/modules/ngx_http_log_module.c | 5 +++++
src/http/ngx_http_core_module.c | 5 +++++
src/http/ngx_http_script.c | 6 ++++++
src/stream/ngx_stream_log_module.c | 5 +++++
5 files changed, 24 insertions(+), 3 deletions(-)
diffs (81 lines):
diff -r a8d7c9139831 -r 3fb9b5eb75c0 src/http/modules/ngx_http_index_module.c
--- a/src/http/modules/ngx_http_index_module.c Tue Mar 28 11:28:51 2017 +0300
+++ b/src/http/modules/ngx_http_index_module.c Tue Mar 28 14:21:38 2017 +0300
@@ -217,13 +217,13 @@ ngx_http_index_handler(ngx_http_request_
if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
!= NGX_OK)
{
- ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, of.err,
- "%s \"%s\" failed", of.failed, path.data);
-
if (of.err == 0) {
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
+ ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, of.err,
+ "%s \"%s\" failed", of.failed, path.data);
+
#if (NGX_HAVE_OPENAT)
if (of.err == NGX_EMLINK
|| of.err == NGX_ELOOP)
diff -r a8d7c9139831 -r 3fb9b5eb75c0 src/http/modules/ngx_http_log_module.c
--- a/src/http/modules/ngx_http_log_module.c Tue Mar 28 11:28:51 2017 +0300
+++ b/src/http/modules/ngx_http_log_module.c Tue Mar 28 14:21:38 2017 +0300
@@ -552,6 +552,11 @@ ngx_http_log_script_write(ngx_http_reque
if (ngx_open_cached_file(llcf->open_file_cache, &log, &of, r->pool)
!= NGX_OK)
{
+ if (of.err == 0) {
+ /* simulate successful logging */
+ return len;
+ }
+
ngx_log_error(NGX_LOG_CRIT, r->connection->log, ngx_errno,
"%s \"%s\" failed", of.failed, log.data);
/* simulate successful logging */
diff -r a8d7c9139831 -r 3fb9b5eb75c0 src/http/ngx_http_core_module.c
--- a/src/http/ngx_http_core_module.c Tue Mar 28 11:28:51 2017 +0300
+++ b/src/http/ngx_http_core_module.c Tue Mar 28 14:21:38 2017 +0300
@@ -1314,6 +1314,11 @@ ngx_http_core_try_files_phase(ngx_http_r
if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
!= NGX_OK)
{
+ if (of.err == 0) {
+ ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
+ return NGX_OK;
+ }
+
if (of.err != NGX_ENOENT
&& of.err != NGX_ENOTDIR
&& of.err != NGX_ENAMETOOLONG)
diff -r a8d7c9139831 -r 3fb9b5eb75c0 src/http/ngx_http_script.c
--- a/src/http/ngx_http_script.c Tue Mar 28 11:28:51 2017 +0300
+++ b/src/http/ngx_http_script.c Tue Mar 28 14:21:38 2017 +0300
@@ -1513,6 +1513,12 @@ ngx_http_script_file_code(ngx_http_scrip
if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
!= NGX_OK)
{
+ if (of.err == 0) {
+ e->ip = ngx_http_script_exit;
+ e->status = NGX_HTTP_INTERNAL_SERVER_ERROR;
+ return;
+ }
+
if (of.err != NGX_ENOENT
&& of.err != NGX_ENOTDIR
&& of.err != NGX_ENAMETOOLONG)
diff -r a8d7c9139831 -r 3fb9b5eb75c0 src/stream/ngx_stream_log_module.c
--- a/src/stream/ngx_stream_log_module.c Tue Mar 28 11:28:51 2017 +0300
+++ b/src/stream/ngx_stream_log_module.c Tue Mar 28 14:21:38 2017 +0300
@@ -443,6 +443,11 @@ ngx_stream_log_script_write(ngx_stream_s
s->connection->pool)
!= NGX_OK)
{
+ if (of.err == 0) {
+ /* simulate successful logging */
+ return len;
+ }
+
ngx_log_error(NGX_LOG_CRIT, s->connection->log, ngx_errno,
"%s \"%s\" failed", of.failed, log.data);
/* simulate successful logging */
More information about the nginx-devel
mailing list