[PATCH] Image filter: large image handling

lanshun zhou zls.sogou at gmail.com
Wed Aug 28 02:40:37 UTC 2013


It's ok for me, thanks~
在 2013-8-28 上午6:43,"Maxim Dounin" <mdounin at mdounin.ru>写道:

> 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
>
> _______________________________________________
> nginx-devel mailing list
> nginx-devel at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx-devel/attachments/20130828/ad874284/attachment.html>


More information about the nginx-devel mailing list