We'll give this patch a shot. Ron
> -----Original Message----- > From: Cliff Woolley [mailto:[EMAIL PROTECTED] > Sent: Wednesday, July 09, 2003 10:27 PM > To: Ron Park > Cc: [EMAIL PROTECTED] > Subject: Re: Two mod_include problems > > > yOn Wed, 9 Jul 2003, Ron Park wrote: > > > This problem revolves around the use of 'if' 'else' and 'elseif'. > > Originally, we thought the problem was related to <!--#else --> > > but later we found an troublesome <!--#if ... --> that lead to > > us finding the real culprit. > > Andre and I counter-propose the following patch for this > problem. Can you > please test it on your test cases? > > Also note that there's that one line at the bottom that sets > ctx->bytes_parsed=0, and we weren't sure if it should go > inside or outside > that if(). Comments? > > Thanks, > Cliff > > > > Index: mod_include.c > =================================================================== > RCS file: /home/cvs/httpd-2.0/modules/filters/mod_include.c,v > retrieving revision 1.233 > diff -u -d -r1.233 mod_include.c > --- mod_include.c 3 Feb 2003 17:53:01 -0000 1.233 > +++ mod_include.c 10 Jul 2003 02:24:25 -0000 > @@ -2956,7 +2956,7 @@ > /* If I am inside a conditional (if, elif, else) > that is false > * then I need to throw away anything contained in it. > */ > - if ((!(ctx->flags & FLAG_PRINTING)) && (tmp_dptr > != NULL) && > + if ((!(ctx->flags & FLAG_PRINTING)) && > (dptr != APR_BRIGADE_SENTINEL(*bb))) { > while ((dptr != APR_BRIGADE_SENTINEL(*bb)) && > (dptr != tmp_dptr)) { > @@ -3197,25 +3197,16 @@ > * once the whole tag has been found. > */ > if (ctx->state == PRE_HEAD) { > - /* Inside a false conditional (if, elif, else), so > toss it all... */ > - if ((dptr != APR_BRIGADE_SENTINEL(*bb)) && > - (!(ctx->flags & FLAG_PRINTING))) { > - apr_bucket *free_bucket; > - do { > - free_bucket = dptr; > - dptr = APR_BUCKET_NEXT (dptr); > - apr_bucket_delete(free_bucket); > - } while (dptr != APR_BRIGADE_SENTINEL(*bb)); > - } > - else { > - /* Otherwise pass it along... > + if (!APR_BRIGADE_EMPTY(*bb)) { > + /* Pass it along... > * No SSI tags in this brigade... */ > rv = ap_pass_brigade(f->next, *bb); > if (rv != APR_SUCCESS) { > return rv; > } > - ctx->bytes_parsed = 0; > } > + /* XXX: should this line go inside the if(!empty)? */ > + ctx->bytes_parsed = 0; > } > else if (ctx->state == PARSED) { /* Invalid > internal condition... */ > apr_bucket *content_head = NULL, *tmp_bkt; >
