httpd-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From r..@apache.org
Subject cvs commit: httpd-2.0/modules/filters mod_include.c
Date Thu, 02 Aug 2001 04:59:51 GMT
rbb         01/08/01 21:59:51

  Modified:    .        CHANGES
               modules/filters mod_include.c
  Log:
  Make the includes filter check return codes from filters lower in
  the filter chain.  If a lower level filter returns an error, then
  the request needs to stop immediately.  This allows mod_include to
  stop parsing data once a lower filter recognizes an error.
  PR:	8102
  
  Revision  Changes    Path
  1.271     +6 -0      httpd-2.0/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/CHANGES,v
  retrieving revision 1.270
  retrieving revision 1.271
  diff -u -r1.270 -r1.271
  --- CHANGES	2001/08/02 04:25:19	1.270
  +++ CHANGES	2001/08/02 04:59:50	1.271
  @@ -1,5 +1,11 @@
   Changes with Apache 2.0.23-dev
   
  +  *) Make the includes filter check return codes from filters lower in
  +     the filter chain.  If a lower level filter returns an error, then
  +     the request needs to stop immediately.  This allows mod_include to
  +     stop parsing data once a lower filter recognizes an error.
  +     [Ryan Bloom]
  +
     *) Add the ability to extend the methods that Apache understands
        and have those methods <limit>able in the httpd.conf. It uses 
        the same bit mask/shifted offset as the original HTTP methods 
  
  
  
  1.117     +19 -9     httpd-2.0/modules/filters/mod_include.c
  
  Index: mod_include.c
  ===================================================================
  RCS file: /home/cvs/httpd-2.0/modules/filters/mod_include.c,v
  retrieving revision 1.116
  retrieving revision 1.117
  diff -u -r1.116 -r1.117
  --- mod_include.c	2001/07/26 16:37:56	1.116
  +++ mod_include.c	2001/08/02 04:59:51	1.117
  @@ -2319,14 +2319,15 @@
   
   /* -------------------------- The main function --------------------------- */
   
  -static void send_parsed_content(apr_bucket_brigade **bb, request_rec *r, 
  -                                ap_filter_t *f)
  +static apr_status_t send_parsed_content(apr_bucket_brigade **bb, 
  +                                        request_rec *r, ap_filter_t *f)
   {
       include_ctx_t *ctx = f->ctx;
       apr_bucket *dptr = APR_BRIGADE_FIRST(*bb);
       apr_bucket *tmp_dptr;
       apr_bucket_brigade *tag_and_after;
       int ret;
  +    apr_status_t rv;
   
       if (r->args) {              /* add QUERY stuff to env cause it ain't yet */
           char *arg_copy = apr_pstrdup(r->pool, r->args);
  @@ -2384,7 +2385,10 @@
               else if ((tmp_dptr != NULL) && (ctx->bytes_parsed >= BYTE_COUNT_THRESHOLD))
{
                                  /* Send the large chunk of pre-tag bytes...  */
                   tag_and_after = apr_brigade_split(*bb, tmp_dptr);
  -                ap_pass_brigade(f->next, *bb);
  +                rv = ap_pass_brigade(f->next, *bb);
  +                if (rv != APR_SUCCESS) {
  +                    return rv;
  +                }
                   *bb  = tag_and_after;
                   dptr = tmp_dptr;
                   ctx->bytes_parsed = 0;
  @@ -2572,7 +2576,10 @@
               } while (dptr != APR_BRIGADE_SENTINEL(*bb));
           }
           else { /* Otherwise pass it along... */
  -            ap_pass_brigade(f->next, *bb);  /* No SSI tags in this brigade... */
  +            rv = ap_pass_brigade(f->next, *bb);  /* No SSI tags in this brigade... */
  +            if (rv != APR_SUCCESS) {
  +                return rv;
  +            }
               ctx->bytes_parsed = 0;
           }
       }
  @@ -2595,7 +2602,10 @@
                              /* Set aside tag, pass pre-tag... */
               tag_and_after = apr_brigade_split(*bb, ctx->head_start_bucket);
               ap_save_brigade(f, &ctx->ssi_tag_brigade, &tag_and_after, r->pool);
  -            ap_pass_brigade(f->next, *bb);
  +            rv = ap_pass_brigade(f->next, *bb);
  +            if (rv != APR_SUCCESS) {
  +                return rv;
  +            }
               ctx->bytes_parsed = 0;
           }
       }
  @@ -2661,6 +2671,7 @@
       request_rec *r = f->r;
       include_ctx_t *ctx = f->ctx;
       request_rec *parent;
  +    apr_status_t rv;
       include_dir_config *conf = 
                      (include_dir_config *)ap_get_module_config(r->per_dir_config,
                                                                 &include_module);
  @@ -2688,8 +2699,7 @@
               ctx->error_length = strlen(ctx->error_str);
           }
           else {
  -            ap_pass_brigade(f->next, b);
  -            return APR_ENOMEM;
  +            return ap_pass_brigade(f->next, b);
           }
       }
       else {
  @@ -2740,7 +2750,7 @@
        */
       apr_table_unset(f->r->headers_out, "Content-Length");
   
  -    send_parsed_content(&b, r, f);
  +    rv = send_parsed_content(&b, r, f);
   
       if (parent) {
   	/* signify that the sub request should not be killed */
  @@ -2748,7 +2758,7 @@
   	    NESTED_INCLUDE_MAGIC);
       }
   
  -    return APR_SUCCESS;
  +    return rv;
   }
   
   static void ap_register_include_handler(char *tag, include_handler_fn_t *func)
  
  
  

Mime
View raw message