@@ -100,6 +100,10 @@ typedef struct {
100100 mod_filter_chain * chain ;
101101} mod_filter_cfg ;
102102
103+ typedef struct {
104+ const char * range ;
105+ } mod_filter_ctx ;
106+
103107
104108static void filter_trace (apr_pool_t * pool , int debug , const char * fname ,
105109 apr_bucket_brigade * bb )
@@ -164,6 +168,8 @@ static int filter_lookup(ap_filter_t *f, ap_filter_rec_t *filter)
164168 request_rec * r = f -> r ;
165169 harness_ctx * ctx = f -> ctx ;
166170 provider_ctx * pctx ;
171+ mod_filter_ctx * rctx = ap_get_module_config (r -> request_config ,
172+ & filter_module );
167173
168174 /* Check registered providers in order */
169175 for (provider = filter -> providers ; provider ; provider = provider -> next ) {
@@ -307,8 +313,10 @@ static int filter_lookup(ap_filter_t *f, ap_filter_rec_t *filter)
307313 if (proto_flags & AP_FILTER_PROTO_NO_BYTERANGE ) {
308314 apr_table_unset (r -> headers_out , "Accept-Ranges" );
309315 }
310- else if (filter -> range ) {
311- apr_table_setn (r -> headers_in , "Range" , filter -> range );
316+ else if (rctx && rctx -> range ) {
317+ /* restore range header we saved earlier */
318+ apr_table_setn (r -> headers_in , "Range" , rctx -> range );
319+ rctx -> range = NULL ;
312320 }
313321#endif
314322 for (pctx = ctx -> init_ctx ; pctx ; pctx = pctx -> next ) {
@@ -709,6 +717,8 @@ static void filter_insert(request_rec *r)
709717 & filter_module );
710718#ifndef NO_PROTOCOL
711719 int ranges = 1 ;
720+ mod_filter_ctx * ctx = apr_pcalloc (r -> pool , sizeof (mod_filter_ctx ));
721+ ap_set_module_config (r -> request_config , & filter_module , ctx );
712722#endif
713723
714724 for (p = cfg -> chain ; p ; p = p -> next ) {
@@ -718,7 +728,7 @@ static void filter_insert(request_rec *r)
718728 if (ranges && (filter -> proto_flags
719729 & (AP_FILTER_PROTO_NO_BYTERANGE
720730 | AP_FILTER_PROTO_CHANGE_LENGTH ))) {
721- filter -> range = apr_table_get (r -> headers_in , "Range" );
731+ ctx -> range = apr_table_get (r -> headers_in , "Range" );
722732 apr_table_unset (r -> headers_in , "Range" );
723733 ranges = 0 ;
724734 }
0 commit comments