You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Bill Stoddard <bi...@wstoddard.com> on 2002/01/02 20:27:49 UTC

Fw: cvs commit: httpd-2.0/modules/proxy proxy_util.c

Adam,
Could you try this out and report the results?  I'm guessing that an EOS bucket was being
encountered and removed from the brigade, leaving an empty brigade. APR_BRIGADE_FIRST then
returned a bogus bucket and we segfaulted when trying to read from that bogus bucket.

I think this code is more correct than the code it replaces. Only guessing that it will
prevent the segfault though.

Bill

----- Original Message -----
From: <st...@apache.org>
To: <ht...@apache.org>
Sent: Wednesday, January 02, 2002 2:12 PM
Subject: cvs commit: httpd-2.0/modules/proxy proxy_util.c


> stoddard    02/01/02 11:12:40
>
>   Modified:    modules/proxy proxy_util.c
>   Log:
>   Change the return code from APR_TIMEUP to APR_ECONNABORTED, which seems
>   to be a bit more descriptive. Move the check to inside the inner while()
>   loop and add an additional check for eos. If we get an EOS bucket, there
>   is no point in going further. Hopefully this will fix the last seg fault
>   in the function.
>
>   Revision  Changes    Path
>   1.76      +4 -5      httpd-2.0/modules/proxy/proxy_util.c
>
>   Index: proxy_util.c
>   ===================================================================
>   RCS file: /home/cvs/httpd-2.0/modules/proxy/proxy_util.c,v
>   retrieving revision 1.75
>   retrieving revision 1.76
>   diff -u -r1.75 -r1.76
>   --- proxy_util.c 31 Dec 2001 20:43:59 -0000 1.75
>   +++ proxy_util.c 2 Jan 2002 19:12:40 -0000 1.76
>   @@ -1020,13 +1020,12 @@
>                                                    &zero /* readline */))) {
>                return rv;
>            }
>   -        if (APR_BRIGADE_EMPTY(bb)) {
>   -            /* The connection aborted or timed out */
>   -            return APR_TIMEUP;
>   -        }
>   -
>            /* loop through each bucket */
>            while (!found) {
>   +            if (*eos || APR_BRIGADE_EMPTY(bb)) {
>   +                /* The connection aborted or timed out */
>   +                return APR_ECONNABORTED;
>   +            }
>                e = APR_BRIGADE_FIRST(bb);
>                if (APR_BUCKET_IS_EOS(e)) {
>                    *eos = 1;
>
>
>
>