[PATCH] Image filter: large image handling
Maxim Dounin
mdounin at mdounin.ru
Tue Aug 27 22:43:10 UTC 2013
Hello!
On Wed, Aug 28, 2013 at 12:21:27AM +0800, lanshun zhou wrote:
> # HG changeset patch
> # User Lanshun Zhou <zls.sogou at gmail.com>
> # Date 1377620347 -28800
> # Node ID 4fae04f332b489c85cdc116e6138a618372d3691
> # Parent d1403de4163100ec0c6c015e57f22384456870e3
> Image filter: large image handling.
>
> If Content-Length header is not set, and the image size is larger than the
> buffer size, client will hang until a timeout occurs.
>
> Now NGX_HTTP_UNSUPPORTED_MEDIA_TYPE is returned immediately.
>
> diff -r d1403de41631 -r 4fae04f332b4
> src/http/modules/ngx_http_image_filter_module.c
> --- a/src/http/modules/ngx_http_image_filter_module.c Tue Aug 27 17:37:15
> 2013 +0400
> +++ b/src/http/modules/ngx_http_image_filter_module.c Wed Aug 28 00:19:07
> 2013 +0800
> @@ -478,7 +478,14 @@
> "image buf: %uz", size);
>
> rest = ctx->image + ctx->length - p;
> - size = (rest < size) ? rest : size;
> + if (rest < size) {
> + ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
> + "image filter: too big response: >%z, "
> + "try to increase image_filter_buffer",
> + ctx->length);
> +
> + return NGX_ERROR;
> + }
Good catch, thnx.
I don't think the message should be different from one emitted with
Content-Length available though. What about something like this:
--- a/src/http/modules/ngx_http_image_filter_module.c
+++ b/src/http/modules/ngx_http_image_filter_module.c
@@ -478,7 +478,12 @@ ngx_http_image_read(ngx_http_request_t
"image buf: %uz", size);
rest = ctx->image + ctx->length - p;
- size = (rest < size) ? rest : size;
+
+ if (size > rest) {
+ ngx_log_error(NGX_LOG_ERR, r->connection->log, 0,
+ "image filter: too big response");
+ return NGX_ERROR;
+ }
p = ngx_cpymem(p, b->pos, size);
b->pos += size;
?
--
Maxim Dounin
http://nginx.org/en/donation.html
More information about the nginx-devel
mailing list