]> granicus.if.org Git - apache/commitdiff
Fix bug where non-200 CGI responses will not send anything down filter chain.
authorJustin Erenkrantz <jerenkrantz@apache.org>
Wed, 10 Aug 2005 04:32:13 +0000 (04:32 +0000)
committerJustin Erenkrantz <jerenkrantz@apache.org>
Wed, 10 Aug 2005 04:32:13 +0000 (04:32 +0000)
This is most notable when mod_cache is used.  This has been used in production
on wiki.apache.org for a while now.

* modules/generators/mod_cgi.c
  (cgi_handler): When a non-zero value is returned by scan_script, set the
  status field and ensure that we have an EOS to send down the filer stack.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@231167 13f79535-47bb-0310-9956-ffa450edef68

modules/generators/mod_cgi.c

index 4bac9c3d476ab471acf589f676816646efe12487..463f076359578ed0029352234079925247c8ed20 100644 (file)
@@ -929,7 +929,18 @@ static int cgi_handler(request_rec *r)
         int ret;
 
         if ((ret = ap_scan_script_header_err_brigade(r, bb, sbuf))) {
-            return log_script(r, conf, ret, dbuf, sbuf, bb, script_err);
+            ret = log_script(r, conf, ret, dbuf, sbuf, bb, script_err);
+
+            /* Set our status. */
+            r->status = ret;
+
+            /* Pass EOS bucket down the filter chain. */
+            apr_brigade_cleanup(bb);
+            b = apr_bucket_eos_create(c->bucket_alloc);
+            APR_BRIGADE_INSERT_TAIL(bb, b);
+            ap_pass_brigade(r->output_filters, bb);
+
+            return ret;
         }
 
         location = apr_table_get(r->headers_out, "Location");