summaryrefslogtreecommitdiff
path: root/modules/experimental
diff options
context:
space:
mode:
Diffstat (limited to 'modules/experimental')
-rw-r--r--modules/experimental/mod_sedfilter.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/modules/experimental/mod_sedfilter.c b/modules/experimental/mod_sedfilter.c
index c93d0db4b7..13a96b538d 100644
--- a/modules/experimental/mod_sedfilter.c
+++ b/modules/experimental/mod_sedfilter.c
@@ -277,6 +277,7 @@ static apr_status_t sed_filter(ap_filter_t *f, apr_bucket_brigade *bb)
apr_status_t rv;
sed_module_ctx *ctx = f->ctx;
+
/*
* First time around? Create the saved bb that we used for each pass
* through. Note that we can also get here when we explicitly clear ctx,
@@ -289,6 +290,12 @@ static apr_status_t sed_filter(ap_filter_t *f, apr_bucket_brigade *bb)
}
/*
+ * Shortcircuit processing
+ */
+ if (APR_BRIGADE_EMPTY(bb))
+ return APR_SUCCESS;
+
+ /*
* Everything to be passed to the next filter goes in
* here, our pass brigade.
*/
@@ -323,8 +330,10 @@ static apr_status_t sed_filter(ap_filter_t *f, apr_bucket_brigade *bb)
while ((b = APR_BRIGADE_FIRST(bb)) && (b != APR_BRIGADE_SENTINEL(bb))) {
apr_brigade_length(passbb, 0, &blen);
if ((blen != -1) && (blen > AP_MIN_BYTES_TO_WRITE)) {
- ap_pass_brigade(f->next, passbb);
+ rv = ap_pass_brigade(f->next, passbb);
apr_brigade_cleanup(passbb);
+ if (rv != APR_SUCCESS)
+ return rv;
}
if (APR_BUCKET_IS_EOS(b)) {
/*
@@ -342,6 +351,7 @@ static apr_status_t sed_filter(ap_filter_t *f, apr_bucket_brigade *bb)
apr_brigade_cleanup(ctx->ctxbb);
APR_BUCKET_REMOVE(b);
APR_BRIGADE_INSERT_TAIL(passbb, b);
+ break;
}
else if (APR_BUCKET_IS_METADATA(b)) {
APR_BUCKET_REMOVE(b);