DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=21095>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=21095

SSI error





------- Additional Comments From [EMAIL PROTECTED]  2003-07-11 03:07 -------
Andre: you read my mind about the bucket_next() thing.  I was just about to 
point that 
out.  :)  An alternative would be to do: 
         if (len == 0) { /* end of pipe? */ 
-            break; 
+            apr_bucket *next_dptr = APR_BUCKET_NEXT(dptr); 
+            apr_bucket_delete(dptr); 
+            dptr = next_dptr; 
+            continue; 
         } 
 
OH!  But hang on.  There's a bug in both cases: if (dptr) becomes the sentinel 
we 
must not continue; we have to break.  Otherwise we'll segfault the next time 
through 
the loop when we try to call apr_bucket_read() on the sentinel.  That is, no 
doubt, why 
it was break; before -- a pipe bucket was probably always the last bucket in 
the 
brigade when we hit that case during the testing.  The code was wrong, but it 
would 
have worked in that instance. 
 
Try this patch instead: 
 
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       11 Jul 2003 03:03:25 -0000 
@@ -429,7 +429,13 @@ 
         } 
 
         if (len == 0) { /* end of pipe? */ 
-            break; 
+            apr_bucket *next_dptr = APR_BUCKET_NEXT(dptr); 
+            apr_bucket_delete(dptr); 
+            dptr = next_dptr; 
+            if (dptr == APR_BRIGADE_SENTINEL(bb)) { 
+                break; 
+            } 
+            continue; 
         } 
 
         /* Set our buffer to use. */ 
@@ -600,7 +606,13 @@ 
         } 
 
         if (len == 0) { /* end of pipe? */ 
-            break; 
+            apr_bucket *next_dptr = APR_BUCKET_NEXT(dptr); 
+            apr_bucket_delete(dptr); 
+            dptr = next_dptr; 
+            if (dptr == APR_BRIGADE_SENTINEL(bb)) { 
+                break; 
+            } 
+            continue; 
         } 
         if (dptr == ctx->tag_start_bucket) { 
             c = buf + ctx->tag_start_index;

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to