From ffe4f114173468e2eb205448820c66af0863a9db Mon Sep 17 00:00:00 2001 From: Maxim Dounin Date: Thu, 15 Sep 2011 18:43:19 +0000 Subject: [PATCH] Upstream: r->upstream->length type change to off_t. Previous use of size_t may cause wierd effects on 32bit platforms with certain big responses transferred in unbuffered mode. Nuke "if (size > u->length)" check as it's not usefull anyway (preread body data isn't subject to this check) and now requires additional check for u->length being positive. --- src/http/modules/ngx_http_memcached_module.c | 2 +- src/http/ngx_http_upstream.c | 13 ++----------- src/http/ngx_http_upstream.h | 2 +- 3 files changed, 4 insertions(+), 13 deletions(-) diff --git a/src/http/modules/ngx_http_memcached_module.c b/src/http/modules/ngx_http_memcached_module.c index beafb6af8..cdc586964 100644 --- a/src/http/modules/ngx_http_memcached_module.c +++ b/src/http/modules/ngx_http_memcached_module.c @@ -407,7 +407,7 @@ ngx_http_memcached_filter(void *data, ssize_t bytes) u = ctx->request->upstream; b = &u->buffer; - if (u->length == ctx->rest) { + if (u->length == (ssize_t) ctx->rest) { if (ngx_strncmp(b->last, ngx_http_memcached_end + NGX_HTTP_MEMCACHED_END - ctx->rest, diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c index faf69ecd4..f3730a063 100644 --- a/src/http/ngx_http_upstream.c +++ b/src/http/ngx_http_upstream.c @@ -1942,12 +1942,7 @@ ngx_http_upstream_process_headers(ngx_http_request_t *r, ngx_http_upstream_t *u) r->headers_out.content_length_n = u->headers_in.content_length_n; - if (u->headers_in.content_length_n != -1) { - u->length = (size_t) u->headers_in.content_length_n; - - } else { - u->length = NGX_MAX_SIZE_T_VALUE; - } + u->length = u->headers_in.content_length_n; return NGX_OK; } @@ -2419,10 +2414,6 @@ ngx_http_upstream_process_non_buffered_request(ngx_http_request_t *r, size = b->end - b->last; - if (size > u->length) { - size = u->length; - } - if (size && upstream->read->ready) { n = upstream->recv(upstream, b->last, size); @@ -2519,7 +2510,7 @@ ngx_http_upstream_non_buffered_filter(void *data, ssize_t bytes) cl->buf->last = b->last; cl->buf->tag = u->output.tag; - if (u->length == NGX_MAX_SIZE_T_VALUE) { + if (u->length == -1) { return NGX_OK; } diff --git a/src/http/ngx_http_upstream.h b/src/http/ngx_http_upstream.h index fa848c0d3..c3f706e14 100644 --- a/src/http/ngx_http_upstream.h +++ b/src/http/ngx_http_upstream.h @@ -267,7 +267,7 @@ struct ngx_http_upstream_s { ngx_http_upstream_resolved_t *resolved; ngx_buf_t buffer; - size_t length; + off_t length; ngx_chain_t *out_bufs; ngx_chain_t *busy_bufs;