Welcome! Log In Create A New Profile

Advanced

[nginx] Cache: reset c->body_start when reading a variant on Vary mismatch.

Sergey Kandaurov
September 11, 2020 03:18PM
details: https://hg.nginx.org/nginx/rev/847fd35f94de
branches:
changeset: 7704:847fd35f94de
user: Sergey Kandaurov <pluknet@nginx.com>
date: Fri Aug 04 19:37:37 2017 +0300
description:
Cache: reset c->body_start when reading a variant on Vary mismatch.

Previously, a variant not present in shared memory and stored on disk using a
secondary key was read using c->body_start from a variant stored with a main
key. This could result in critical errors "cache file .. has too long header".

diffstat:

src/http/ngx_http_cache.h | 1 +
src/http/ngx_http_file_cache.c | 4 +++-
2 files changed, 4 insertions(+), 1 deletions(-)

diffs (32 lines):

diff -r da5e3f5b1673 -r 847fd35f94de src/http/ngx_http_cache.h
--- a/src/http/ngx_http_cache.h Wed Sep 02 23:13:36 2020 +0300
+++ b/src/http/ngx_http_cache.h Fri Aug 04 19:37:37 2017 +0300
@@ -80,6 +80,7 @@ struct ngx_http_cache_s {
ngx_str_t vary;
u_char variant[NGX_HTTP_CACHE_KEY_LEN];

+ size_t buffer_size;
size_t header_start;
size_t body_start;
off_t length;
diff -r da5e3f5b1673 -r 847fd35f94de src/http/ngx_http_file_cache.c
--- a/src/http/ngx_http_file_cache.c Wed Sep 02 23:13:36 2020 +0300
+++ b/src/http/ngx_http_file_cache.c Fri Aug 04 19:37:37 2017 +0300
@@ -294,6 +294,8 @@ ngx_http_file_cache_open(ngx_http_reques
cln->data = c;
}

+ c->buffer_size = c->body_start;
+
rc = ngx_http_file_cache_exists(cache, c);

ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
@@ -1230,7 +1232,7 @@ ngx_http_file_cache_reopen(ngx_http_requ

c->secondary = 1;
c->file.name.len = 0;
- c->body_start = c->buf->end - c->buf->start;
+ c->body_start = c->buffer_size;

ngx_memcpy(c->key, c->variant, NGX_HTTP_CACHE_KEY_LEN);

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[nginx] Cache: reset c->body_start when reading a variant on Vary mismatch.

Sergey Kandaurov 72 September 11, 2020 03:18PM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 68
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready