ap_escape_shell_cmd(r->pool, arg_copy));
}
- while (dptr != APR_BRIGADE_SENTINEL(*bb)) {
+ while (dptr != APR_BRIGADE_SENTINEL(*bb) || !APR_BUCKET_IS_EOS(dptr)) {
/* State to check for the STARTING_SEQUENCE. */
if ((ctx->state == PRE_HEAD) || (ctx->state == PARSE_HEAD)) {
int do_cleanup = 0;
}
}
+ /* We have nothing more to send, stop now. */
+ if (APR_BUCKET_IS_EOS(dptr)) {
+ /* We might have something saved that we never completed, but send
+ * down unparsed. This allows for <!-- at the end of files to be
+ * sent correctly. */
+ if (!APR_BRIGADE_EMPTY(ctx->ssi_tag_brigade)) {
+ APR_BRIGADE_CONCAT(ctx->ssi_tag_brigade, *bb);
+ return ap_pass_brigade(f->next, ctx->ssi_tag_brigade);
+ }
+ return ap_pass_brigade(f->next, *bb);
+ }
+
/* If I am in the middle of parsing an SSI tag then I need to set aside
* the pertinent trailing buckets and pass on the initial part of the
* brigade. The pertinent parts of the next brigades will be added to