Created attachment 27332 [details] a fix The DEFLATE output filter contains this piece of code (as of server magic number 20110724) if (!ctx) { char *token; const char *encoding; /* Delay initialization until we have seen some data */ e = APR_BRIGADE_FIRST(bb); while (1) { apr_status_t rc; if (e == APR_BRIGADE_SENTINEL(bb)) return ap_pass_brigade(f->next, bb); if (APR_BUCKET_IS_EOS(e)) { ap_remove_output_filter(f); return ap_pass_brigade(f->next, bb); } if (APR_BUCKET_IS_METADATA(e)) continue; If there is no filter context yet and the passed brigade contains only a metadata bucket (a flush bucket for example) the "continue" statement is hit without changing "e". Hence, it enters an infinite loop. The last "if" statement should read as follows to fix the problem: if (APR_BUCKET_IS_METADATA(e)) { e = APR_BUCKET_NEXT(e); continue; }
Good catch. Fixed in r1152943. Added a test in r1152942. How common is the situation that there are (non-EOS) metadata buckets before any data buckets? In your opinion, is this bug a showstopper for the 2.3.14 beta release?
fixed in 2.4.1