expcov report - Generated Sat Oct 15 21:39:18 2016

 Index  Statistics  Last 
Directory./modules/http
Filenamehttp_filters.c
ModifiedTue Jul 7 08:37:16 2015

Pass Half Fail Excluded Total
Function
0
0.00%
21
100.00%
0
0.00%
21
100%
Expressions
0
0.00%
884
100.00%
0
0.00%
884
100%
Conditions
0
0.00%
0
0.00%
225
100.00%
0
0.00%
225
100%
MC/DC
0
0.00%
94
100.00%
0
0.00%
94
100%
Branches

if
0
0.00%
0
0.00%
136
100.00%
0
0.00%
136
100%
for
0
0.00%
0
0.00%
6
100.00%
0
0.00%
6
100%
while
0
0.00%
0
0.00%
12
100.00%
0
0.00%
12
100%
case
0
0.00%
0
0.00%
21
100.00%
0
0.00%
21
100%

1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements.  See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License.  You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/*
18 * http_filter.c --- HTTP routines which either filters or deal with filters.
19 */
20
21#include "apr.h"
22#include "apr_strings.h"
23#include "apr_buckets.h"
24#include "apr_lib.h"
25#include "apr_signal.h"
26
27#define APR_WANT_STDIO          /* for sscanf */
28#define APR_WANT_STRFUNC
29#define APR_WANT_MEMFUNC
30#include "apr_want.h"
31
32#define CORE_PRIVATE
33#include "util_filter.h"
34#include "ap_config.h"
35#include "httpd.h"
36#include "http_config.h"
37#include "http_core.h"
38#include "http_protocol.h"
39#include "http_main.h"
40#include "http_request.h"
41#include "http_vhost.h"
42#include "http_connection.h"
43#include "http_log.h"           /* For errors detected in basic auth common
44                                 * support code... */
45#include "apr_date.h"           /* For apr_date_parse_http and APR_DATE_BAD */
46#include "util_charset.h"
47#include "util_ebcdic.h"
48#include "util_time.h"
49
50#include "mod_core.h"
51
52#if APR_HAVE_STDARG_H
53#include <stdarg.h>
54#endif
55#if APR_HAVE_UNISTD_H
56#include <unistd.h>
57#endif
58
59typedef struct http_filter_ctx
60{
61    apr_off_t remaining;
62    apr_off_t limit;
63    apr_off_t limit_used;
64    apr_int32_t chunk_used;
65    apr_int32_t chunk_bws;
66    apr_int32_t chunkbits;
67    enum
68    {
69        BODY_NONE, /* streamed data */
70        BODY_LENGTH, /* data constrained by content length */
71        BODY_CHUNK, /* chunk expected */
72        BODY_CHUNK_PART, /* chunk digits */
73        BODY_CHUNK_EXT, /* chunk extension */
74        BODY_CHUNK_CR, /* got space(s) after digits, expect [CR]LF or ext */
75        BODY_CHUNK_LF, /* got CR after digits or ext, expect LF */
76        BODY_CHUNK_DATA, /* data constrained by chunked encoding */
77        BODY_CHUNK_END, /* chunked data terminating CRLF */
78        BODY_CHUNK_END_LF, /* got CR after data, expect LF */
79        BODY_CHUNK_TRAILER /* trailers */
80    } state;
81    unsigned int eos_sent :1;
82    apr_bucket_brigade *bb;
83} http_ctx_t;
84
85/* bail out if some error in the HTTP input filter happens */
86static apr_status_t bail_out_on_error : call=0
b
ail_out_on_error(http_ctx_t *ctx,
87                                      ap_filter_t *f,
88                                      int http_error)
89{
90    apr_bucket *e;
91    apr_bucket_brigade *bb = ctx : modules/http/http_filters.c line=86 column=51
c
tx-> : enter=0, leave=0
-
>bb : modules/http/http_filters.c line=82 column=25
b
b;
92
93    apr_brigade_cleanup : enter=0, leave=0

apr_brigade_cleanup : /usr/include/apr-1/apr_buckets.h line=679 column=27
a
pr_brigade_cleanup(bb : modules/http/http_filters.c line=91 column=25
b
b);
94
95    if : true=0, false=0
i
f (f : modules/http/http_filters.c line=87 column=52
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>proxyreq : include/httpd.h line=806 column=9
p
roxyreq == : true=0, false=0
=
= PROXYREQ_RESPONSE) {
96        switch : pass=0
s
witch (http_error : modules/http/http_filters.c line=88 column=43
h
ttp_error) {
97        case : true=0, false=0
c
ase HTTP_REQUEST_ENTITY_TOO_LARGE:
98            return : pass=0
r
eturn APR_ENOSPC;
99
100        case : true=0, false=0
c
ase HTTP_REQUEST_TIME_OUT:
101            return : pass=0
r
eturn APR_INCOMPLETE;
102
103        case : true=0, false=0
c
ase HTTP_NOT_IMPLEMENTED:
104            return : pass=0
r
eturn APR_ENOTIMPL;
105
106        default : true=0, false=0
d
efault:
107            return : pass=0
r
eturn APR_EGENERAL;
108        }
109    }
110
111    e : modules/http/http_filters.c line=90 column=17
e
 = : pass=0
=
 ap_bucket_error_create : enter=0, leave=0

ap_bucket_error_create : include/http_protocol.h line=668 column=26
a
p_bucket_error_create(http_error : modules/http/http_filters.c line=88 column=43
h
ttp_error,
112                               NULL, f : modules/http/http_filters.c line=87 column=52
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool,
113                               f : modules/http/http_filters.c line=87 column=52
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
114    APR_BRIGADE_INSERT_TAIL(bb : modules/http/http_filters.c line=91 column=25
b
b, e : modules/http/http_filters.c line=90 column=17
e
);
115    e : modules/http/http_filters.c line=90 column=17
e
 = : pass=0
=
 apr_bucket_eos_create : enter=0, leave=0

apr_bucket_eos_create : /usr/include/apr-1/apr_buckets.h line=1260 column=27
a
pr_bucket_eos_create(f : modules/http/http_filters.c line=87 column=52
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
116    APR_BRIGADE_INSERT_TAIL(bb : modules/http/http_filters.c line=91 column=25
b
b, e : modules/http/http_filters.c line=90 column=17
e
);
117    ctx : modules/http/http_filters.c line=86 column=51
c
tx-> : enter=0, leave=0
-
>eos_sent : modules/http/http_filters.c line=81 column=18
e
os_sent = : enter=0, leave=0
=
 1;
118    /* If chunked encoding / content-length are corrupt, we may treat parts
119     * of this request's body as the next one's headers.
120     * To be safe, disable keep-alive.
121     */
122    f : modules/http/http_filters.c line=87 column=52
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection-> : enter=0, leave=0
-
>keepalive : include/httpd.h line=1074 column=25
k
eepalive = : enter=0, leave=0
=
 AP_CONN_CLOSE : include/httpd.h line=1038 column=5
A
P_CONN_CLOSE;
123    return : pass=0
r
eturn ap_pass_brigade : enter=0, leave=0

ap_pass_brigade : include/util_filter.h line=312 column=26
a
p_pass_brigade(f : modules/http/http_filters.c line=87 column=52
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>output_filters : include/httpd.h line=990 column=25
o
utput_filters, bb : modules/http/http_filters.c line=91 column=25
b
b);
124}
125
126/**
127 * Parse a chunk line with optional extension, detect overflow.
128 * There are two error cases:
129 *  1) If the conversion would require too many bits, APR_EGENERAL is returned.
130 *  2) If the conversion used the correct number of bits, but an overflow
131 *     caused only the sign bit to flip, then APR_ENOSPC is returned.
132 * In general, any negative number can be considered an overflow error.
133 */
134static apr_status_t parse_chunk_size : call=0
p
arse_chunk_size(http_ctx_t *ctx, const char *buffer,
135                                     apr_size_t len, int linelimit)
136{
137    apr_size_t i = 0;
138
139    while : true=0, false=0
w
hile (i : modules/http/http_filters.c line=137 column=16
i
 < : true=0, false=0
<
 len : modules/http/http_filters.c line=135 column=49
l
en) {
140        char c = buffer : modules/http/http_filters.c line=134 column=67
b
uffer[] : enter=0, leave=0
[
i : modules/http/http_filters.c line=137 column=16
i
];
141
142        ap_xlate_proto_from_ascii(&c, 1);
143
144        /* handle CRLF after the chunk */
145        if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
BODY_CHUNK_END : modules/http/http_filters.c line=77 column=9
B
ODY_CHUNK_END
146                || : true=0, false=0
|
ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
BODY_CHUNK_END_LF : modules/http/http_filters.c line=78 column=9
B
ODY_CHUNK_END_LF) {
147            if : true=0, false=0
i
f (c : modules/http/http_filters.c line=140 column=14
c
 == : true=0, false=0
=
= LF) {
148                ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_CHUNK : modules/http/http_filters.c line=71 column=9
B
ODY_CHUNK;
149            }
150            else if : true=0, false=0
i
f (c : modules/http/http_filters.c line=140 column=14
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= CR && : true=0, false=0
&
ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
BODY_CHUNK_END : modules/http/http_filters.c line=77 column=9
B
ODY_CHUNK_END) {
151                ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_CHUNK_END_LF : modules/http/http_filters.c line=78 column=9
B
ODY_CHUNK_END_LF;
152            }
153            else {
154                /*
155                 * LF expected.
156                 */
157                return : pass=0
r
eturn APR_EINVAL;
158            }
159            i : modules/http/http_filters.c line=137 column=16
i
++ : pass=0
+
+;
160            continue : pass=0
c
ontinue;
161        }
162
163        /* handle start of the chunk */
164        if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
=
BODY_CHUNK : modules/http/http_filters.c line=71 column=9
B
ODY_CHUNK) {
165            if : true=0, false=0
i
f (! : true=0, false=0
!
apr_isxdigit(c : modules/http/http_filters.c line=140 column=14
c
)) {
166                /*
167                 * Detect invalid character at beginning. This also works for
168                 * empty chunk size lines.
169                 */
170                return : pass=0
r
eturn APR_EINVAL;
171            }
172            else {
173                ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_CHUNK_PART : modules/http/http_filters.c line=72 column=9
B
ODY_CHUNK_PART;
174            }
175            ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining = : enter=0, leave=0
=
 0;
176            ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>chunkbits : modules/http/http_filters.c line=66 column=17
c
hunkbits = : enter=0, leave=0
=
 sizeof(apr_off_t) * : pass=0
*
 8;
177            ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>chunk_used : modules/http/http_filters.c line=64 column=17
c
hunk_used = : enter=0, leave=0
=
 0;
178            ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>chunk_bws : modules/http/http_filters.c line=65 column=17
c
hunk_bws = : enter=0, leave=0
=
 0;
179        }
180
181        if : true=0, false=0
i
f (c : modules/http/http_filters.c line=140 column=14
c
 == : true=0, false=0
=
= LF) {
182            if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining) {
183                ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_CHUNK_DATA : modules/http/http_filters.c line=76 column=9
B
ODY_CHUNK_DATA;
184            }
185            else {
186                ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_CHUNK_TRAILER : modules/http/http_filters.c line=79 column=9
B
ODY_CHUNK_TRAILER;
187            }
188        }
189        else if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
=
BODY_CHUNK_LF : modules/http/http_filters.c line=75 column=9
B
ODY_CHUNK_LF) {
190            /*
191             * LF expected.
192             */
193            return : pass=0
r
eturn APR_EINVAL;
194        }
195        else if : true=0, false=0
i
f (c : modules/http/http_filters.c line=140 column=14
c
 == : true=0, false=0
=
= CR) {
196            ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_CHUNK_LF : modules/http/http_filters.c line=75 column=9
B
ODY_CHUNK_LF;
197        }
198        else if : true=0, false=0
i
f (c : modules/http/http_filters.c line=140 column=14
c
 == : true=0, false=0
=
= ';') {
199            ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_CHUNK_EXT : modules/http/http_filters.c line=73 column=9
B
ODY_CHUNK_EXT;
200        }
201        else if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
=
BODY_CHUNK_EXT : modules/http/http_filters.c line=73 column=9
B
ODY_CHUNK_EXT) {
202            /*
203             * Control chars (but tabs) are invalid.
204             */
205            if : true=0, false=0
i
f (c : modules/http/http_filters.c line=140 column=14
c
 != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '\t' && : true=0, false=0
&
& apr_iscntrl(c : modules/http/http_filters.c line=140 column=14
c
)) {
206                return : pass=0
r
eturn APR_EINVAL;
207            }
208        }
209        else if : true=0, false=0
i
f (c : modules/http/http_filters.c line=140 column=14
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ' ' || : true=0, false=0
|
c : modules/http/http_filters.c line=140 column=14
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\t') {
210            /* Be lenient up to 10 BWS (term from rfc7230 - 3.2.3).
211             */
212            ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_CHUNK_CR : modules/http/http_filters.c line=74 column=9
B
ODY_CHUNK_CR;
213            if : true=0, false=0
i
f (++ : pass=0
+
+ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>chunk_bws : modules/http/http_filters.c line=65 column=17
c
hunk_bws > : true=0, false=0
>
 10) {
214                return : pass=0
r
eturn APR_EINVAL;
215            }
216        }
217        else if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
=
BODY_CHUNK_CR : modules/http/http_filters.c line=74 column=9
B
ODY_CHUNK_CR) {
218            /*
219             * ';', CR or LF expected.
220             */
221            return : pass=0
r
eturn APR_EINVAL;
222        }
223        else if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
=
BODY_CHUNK_PART : modules/http/http_filters.c line=72 column=9
B
ODY_CHUNK_PART) {
224            int xvalue;
225
226            /* ignore leading zeros */
227            if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining && : true=0, false=0
&
c : modules/http/http_filters.c line=140 column=14
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '0') {
228                i : modules/http/http_filters.c line=137 column=16
i
++ : pass=0
+
+;
229                continue : pass=0
c
ontinue;
230            }
231
232            ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>chunkbits : modules/http/http_filters.c line=66 column=17
c
hunkbits -= : enter=0, leave=0
-
= 4;
233            if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>chunkbits : modules/http/http_filters.c line=66 column=17
c
hunkbits < : true=0, false=0
<
 0) {
234                /* overflow */
235                return : pass=0
r
eturn APR_ENOSPC;
236            }
237
238            if : true=0, false=0
i
f (c : modules/http/http_filters.c line=140 column=14
c
 >= : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
= '0' && : true=0, false=0
&
c : modules/http/http_filters.c line=140 column=14
c
 <= : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
= '9') {
239                xvalue : modules/http/http_filters.c line=224 column=17
x
value = : pass=0
=
 c : modules/http/http_filters.c line=140 column=14
c
 - : pass=0
-
 '0';
240            }
241            else if : true=0, false=0
i
f (c : modules/http/http_filters.c line=140 column=14
c
 >= : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
= 'A' && : true=0, false=0
&
c : modules/http/http_filters.c line=140 column=14
c
 <= : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
= 'F') {
242                xvalue : modules/http/http_filters.c line=224 column=17
x
value = : pass=0
=
 c : modules/http/http_filters.c line=140 column=14
c
 - : pass=0
-
 'A' + : pass=0
+
 0xa;
243            }
244            else if : true=0, false=0
i
f (c : modules/http/http_filters.c line=140 column=14
c
 >= : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
= 'a' && : true=0, false=0
&
c : modules/http/http_filters.c line=140 column=14
c
 <= : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
= 'f') {
245                xvalue : modules/http/http_filters.c line=224 column=17
x
value = : pass=0
=
 c : modules/http/http_filters.c line=140 column=14
c
 - : pass=0
-
 'a' + : pass=0
+
 0xa;
246            }
247            else {
248                /* bogus character */
249                return : pass=0
r
eturn APR_EINVAL;
250            }
251
252            ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining = : enter=0, leave=0
=
 (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining << : pass=0
<
< 4) | : pass=0
|
 xvalue : modules/http/http_filters.c line=224 column=17
x
value;
253            if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining < : true=0, false=0
<
 0) {
254                /* overflow */
255                return : pass=0
r
eturn APR_ENOSPC;
256            }
257        }
258        else {
259            /* Should not happen */
260            return : pass=0
r
eturn APR_EGENERAL;
261        }
262
263        i : modules/http/http_filters.c line=137 column=16
i
++ : pass=0
+
+;
264    }
265
266    /* sanity check */
267    ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>chunk_used : modules/http/http_filters.c line=64 column=17
c
hunk_used += : enter=0, leave=0
+
len : modules/http/http_filters.c line=135 column=49
l
en;
268    if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>chunk_used : modules/http/http_filters.c line=64 column=17
c
hunk_used < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 0 || : true=0, false=0
|
ctx : modules/http/http_filters.c line=134 column=50
c
tx-> : enter=0, leave=0
-
>chunk_used : modules/http/http_filters.c line=64 column=17
c
hunk_used > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 linelimit : modules/http/http_filters.c line=135 column=58
l
inelimit) {
269        return : pass=0
r
eturn APR_ENOSPC;
270    }
271
272    return : pass=0
r
eturn APR_SUCCESS;
273}
274
275static apr_status_t read_chunked_trailers : call=0
r
ead_chunked_trailers(http_ctx_t *ctx, ap_filter_t *f,
276                                          apr_bucket_brigade *b, int merge)
277{
278    int rv;
279    apr_bucket *e;
280    request_rec *r = f : modules/http/http_filters.c line=275 column=73
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
;
281    apr_table_t *saved_headers_in = r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in;
282    int saved_status = r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus;
283
284    r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus = : enter=0, leave=0
=
 HTTP_OK;
285    r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in = : enter=0, leave=0
=
 r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>trailers_in : include/httpd.h line=1011 column=18
t
railers_in;
286    apr_table_clear : enter=0, leave=0

apr_table_clear : /usr/include/apr-1/apr_tables.h line=249 column=19
a
pr_table_clear(r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in);
287    ap_get_mime_headers : enter=0, leave=0

ap_get_mime_headers : include/http_protocol.h line=68 column=18
a
p_get_mime_headers(r : modules/http/http_filters.c line=280 column=18
r
);
288
289    if : true=0, false=0
i
f(r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus == : true=0, false=0
=
= HTTP_OK) {
290        r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus = : enter=0, leave=0
=
 saved_status : modules/http/http_filters.c line=282 column=9
s
aved_status;
291        e : modules/http/http_filters.c line=279 column=17
e
 = : pass=0
=
 apr_bucket_eos_create : enter=0, leave=0

apr_bucket_eos_create : /usr/include/apr-1/apr_buckets.h line=1260 column=27
a
pr_bucket_eos_create(f : modules/http/http_filters.c line=275 column=73
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
292        APR_BRIGADE_INSERT_TAIL(b : modules/http/http_filters.c line=276 column=63
b
e : modules/http/http_filters.c line=279 column=17
e
);
293        ctx : modules/http/http_filters.c line=275 column=55
c
tx-> : enter=0, leave=0
-
>eos_sent : modules/http/http_filters.c line=81 column=18
e
os_sent = : enter=0, leave=0
=
 1;
294        rv : modules/http/http_filters.c line=278 column=9
r
= : pass=0
=
 APR_SUCCESS;
295    }
296    else {
297        const char *error_notes = apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>notes : include/httpd.h line=910 column=18
n
otes,
298                                                "error-notes");
299        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_INFO, 0, r : modules/http/http_filters.c line=280 column=18
r
300                      "Error while reading HTTP trailer: %i%s%s",
301                      r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus, error_notes : modules/http/http_filters.c line=297 column=21
e
rror_notes conditional operator : true=0, false=0
?
 ": " : "",
302                      error_notes : modules/http/http_filters.c line=297 column=21
e
rror_notes conditional operator : true=0, false=0
?
 error_notes : modules/http/http_filters.c line=297 column=21
e
rror_notes : "");
303        rv : modules/http/http_filters.c line=278 column=9
r
= : pass=0
=
 APR_EINVAL;
304    }
305
306    if : true=0, false=0
i
f(! : true=0, false=0
!
merge : modules/http/http_filters.c line=276 column=70
m
erge) {
307        r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in = : enter=0, leave=0
=
 saved_headers_in : modules/http/http_filters.c line=281 column=18
s
aved_headers_in;
308    }
309    else {
310        r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in = : enter=0, leave=0
=
 apr_table_overlay : enter=0, leave=0

apr_table_overlay : /usr/include/apr-1/apr_tables.h line=346 column=28
a
pr_table_overlay(r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, saved_headers_in : modules/http/http_filters.c line=281 column=18
s
aved_headers_in,
311                r : modules/http/http_filters.c line=280 column=18
r
-> : enter=0, leave=0
-
>trailers_in : include/httpd.h line=1011 column=18
t
railers_in);
312    }
313
314    return : pass=0
r
eturn rv : modules/http/http_filters.c line=278 column=9
r
v;
315}
316
317/* This is the HTTP_INPUT filter for HTTP requests and responses from
318 * proxied servers (mod_proxy).  It handles chunked and content-length
319 * bodies.  This can only be inserted/used after the headers
320 * are successfully parsed.
321 */
322apr_status_t ap_http_filter : call=0
a
p_http_filter(ap_filter_t *f, apr_bucket_brigade *b,
323                            ap_input_mode_t mode, apr_read_type_e block,
324                            apr_off_t readbytes)
325{
326    core_server_config *conf;
327    apr_bucket *e;
328    http_ctx_t *ctx = f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>ctx : include/util_filter.h line=268 column=11
c
tx;
329    apr_status_t rv;
330    int http_error = HTTP_REQUEST_ENTITY_TOO_LARGE;
331    apr_bucket_brigade *bb;
332    int again;
333
334    conf : modules/http/http_filters.c line=326 column=25
c
onf = : pass=0
=
 (core_server_config *)
335        ap_get_module_config(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>server : include/httpd.h line=784 column=17
s
erver-> : enter=0, leave=0
-
>module_config : include/httpd.h line=1207 column=30
m
odule_config, &core_module : include/http_core.h line=345 column=31
c
ore_module);
336
337    /* just get out of the way of things we don't want. */
338    if : true=0, false=0
i
f (mode : modules/http/http_filters.c line=323 column=45
m
ode != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
AP_MODE_READBYTES : include/util_filter.h line=52 column=5
A
P_MODE_READBYTES && : true=0, false=0
&
mode : modules/http/http_filters.c line=323 column=45
m
ode != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
AP_MODE_GETLINE : include/util_filter.h line=57 column=5
A
P_MODE_GETLINE) {
339        return : pass=0
r
eturn ap_get_brigade : enter=0, leave=0

ap_get_brigade : include/util_filter.h line=298 column=26
a
p_get_brigade(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext, b : modules/http/http_filters.c line=322 column=65
b
mode : modules/http/http_filters.c line=323 column=45
m
ode, block : modules/http/http_filters.c line=323 column=67
b
lock, readbytes : modules/http/http_filters.c line=324 column=39
r
eadbytes);
340    }
341
342    if : true=0, false=0
i
f (! : true=0, false=0
!
ctx : modules/http/http_filters.c line=328 column=17
c
tx) {
343        const char *tenc, *lenp;
344        f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>ctx : include/util_filter.h line=268 column=11
c
tx = : enter=0, leave=0
=
 ctx : modules/http/http_filters.c line=328 column=17
c
tx = : pass=0
=
 apr_pcalloc(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, sizeof(*ctx));
345        ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_NONE : modules/http/http_filters.c line=69 column=9
B
ODY_NONE;
346        ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>bb : modules/http/http_filters.c line=82 column=25
b
= : enter=0, leave=0
=
 apr_brigade_create : enter=0, leave=0

apr_brigade_create : /usr/include/apr-1/apr_buckets.h line=658 column=35
a
pr_brigade_create(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
347        bb : modules/http/http_filters.c line=331 column=25
b
= : pass=0
=
 ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>bb : modules/http/http_filters.c line=82 column=25
b
b;
348
349        /* LimitRequestBody does not apply to proxied responses.
350         * Consider implementing this check in its own filter.
351         * Would adding a directive to limit the size of proxied
352         * responses be useful?
353         */
354        if : true=0, false=0
i
f (! : true=0, false=0
!
f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>proxyreq : include/httpd.h line=806 column=9
p
roxyreq) {
355            ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>limit : modules/http/http_filters.c line=62 column=15
l
imit = : enter=0, leave=0
=
 ap_get_limit_req_body : enter=0, leave=0

ap_get_limit_req_body : include/http_core.h line=251 column=23
a
p_get_limit_req_body(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
);
356        }
357        else {
358            ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>limit : modules/http/http_filters.c line=62 column=15
l
imit = : enter=0, leave=0
=
 0;
359        }
360
361        tenc : modules/http/http_filters.c line=343 column=21
t
enc = : pass=0
=
 apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in, "Transfer-Encoding");
362        lenp : modules/http/http_filters.c line=343 column=28
l
enp = : pass=0
=
 apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in, "Content-Length");
363
364        if : true=0, false=0
i
f (tenc : modules/http/http_filters.c line=343 column=21
t
enc) {
365            if : true=0, false=0
i
f (strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(tenc : modules/http/http_filters.c line=343 column=21
t
enc, "chunked") == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 0 /* fast path */
366                    || : true=0, false=0
|
MC/DC independently affect : true=0, false=0
ap_find_last_token : enter=0, leave=0

ap_find_last_token : include/httpd.h line=1441 column=17
aTF
p_find_last_token(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, tenc : modules/http/http_filters.c line=343 column=21
t
enc, "chunked")) {
367                ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_CHUNK : modules/http/http_filters.c line=71 column=9
B
ODY_CHUNK;
368            }
369            else if : true=0, false=0
i
f (f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>proxyreq : include/httpd.h line=806 column=9
p
roxyreq == : true=0, false=0
=
= PROXYREQ_RESPONSE) {
370                /* http://tools.ietf.org/html/draft-ietf-httpbis-p1-messaging-23
371                 * Section 3.3.3.3: "If a Transfer-Encoding header field is
372                 * present in a response and the chunked transfer coding is not
373                 * the final encoding, the message body length is determined by
374                 * reading the connection until it is closed by the server."
375                 */
376                ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_INFO, 0, f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
,
377                              "Unknown Transfer-Encoding: %s; "
378                              "using read-until-close", tenc : modules/http/http_filters.c line=343 column=21
t
enc);
379                tenc : modules/http/http_filters.c line=343 column=21
t
enc = : pass=0
=
 NULL;
380            }
381            else {
382                /* Something that isn't a HTTP request, unless some future
383                 * edition defines new transfer encodings, is unsupported.
384                 */
385                ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_INFO, 0, f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
,
386                              "Unknown Transfer-Encoding: %s", tenc : modules/http/http_filters.c line=343 column=21
t
enc);
387                return : pass=0
r
eturn bail_out_on_error : enter=0, leave=0

bail_out_on_error : modules/http/http_filters.c line=86 column=21
b
ail_out_on_error(ctx : modules/http/http_filters.c line=328 column=17
c
tx, f : modules/http/http_filters.c line=322 column=42
f
, HTTP_BAD_REQUEST);
388            }
389            lenp : modules/http/http_filters.c line=343 column=28
l
enp = : pass=0
=
 NULL;
390        }
391        if : true=0, false=0
i
f (lenp : modules/http/http_filters.c line=343 column=28
l
enp) {
392            char *endstr;
393
394            ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_LENGTH : modules/http/http_filters.c line=70 column=9
B
ODY_LENGTH;
395            errno = : pass=0
=
 0;
396
397            /* Protects against over/underflow, non-digit chars in the
398             * string (excluding leading space) (the endstr checks)
399             * and a negative number. */
400            if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0
apr_strtoff : enter=0, leave=0

apr_strtoff : /usr/include/apr-1/apr_strings.h line=317 column=27
aTF
pr_strtoff(&ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining, lenp : modules/http/http_filters.c line=343 column=28
l
enp, &endstr : modules/http/http_filters.c line=392 column=19
e
ndstr, 10)
401                || : true=0, false=0
|
endstr : modules/http/http_filters.c line=392 column=19
e
ndstr == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
lenp : modules/http/http_filters.c line=343 column=28
l
enp || : true=0, false=0
|
MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
endstr : modules/http/http_filters.c line=392 column=19
e
ndstr || : true=0, false=0
|
ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 0) {
402
403                ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining = : enter=0, leave=0
=
 0;
404                ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
,
405                              "Invalid Content-Length");
406
407                return : pass=0
r
eturn bail_out_on_error : enter=0, leave=0

bail_out_on_error : modules/http/http_filters.c line=86 column=21
b
ail_out_on_error(ctx : modules/http/http_filters.c line=328 column=17
c
tx, f : modules/http/http_filters.c line=322 column=42
f
, HTTP_BAD_REQUEST);
408            }
409
410            /* If we have a limit in effect and we know the C-L ahead of
411             * time, stop it here if it is invalid.
412             */
413            if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
txMC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>limit : modules/http/http_filters.c line=62 column=15
l
imit && : true=0, false=0
&
ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>limit : modules/http/http_filters.c line=62 column=15
l
imit < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining) {
414                ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
,
415                          "Requested content-length of %" APR_OFF_T_FMT
416                          " is larger than the configured limit"
417                          " of %" APR_OFF_T_FMT, ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining, ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>limit : modules/http/http_filters.c line=62 column=15
l
imit);
418                return : pass=0
r
eturn bail_out_on_error : enter=0, leave=0

bail_out_on_error : modules/http/http_filters.c line=86 column=21
b
ail_out_on_error(ctx : modules/http/http_filters.c line=328 column=17
c
tx, f : modules/http/http_filters.c line=322 column=42
f
, HTTP_REQUEST_ENTITY_TOO_LARGE);
419            }
420        }
421
422        /* If we don't have a request entity indicated by the headers, EOS.
423         * (BODY_NONE is a valid intermediate state due to trailers,
424         *  but it isn't a valid starting state.)
425         *
426         * RFC 2616 Section 4.4 note 5 states that connection-close
427         * is invalid for a request entity - request bodies must be
428         * denoted by C-L or T-E: chunked.
429         *
430         * Note that since the proxy uses this filter to handle the
431         * proxied *response*, proxy responses MUST be exempt.
432         */
433        if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
BODY_NONE : modules/http/http_filters.c line=69 column=9
B
ODY_NONE && : true=0, false=0
&
f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>proxyreq : include/httpd.h line=806 column=9
p
roxyreq != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= PROXYREQ_RESPONSE) {
434            e : modules/http/http_filters.c line=327 column=17
e
 = : pass=0
=
 apr_bucket_eos_create : enter=0, leave=0

apr_bucket_eos_create : /usr/include/apr-1/apr_buckets.h line=1260 column=27
a
pr_bucket_eos_create(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
435            APR_BRIGADE_INSERT_TAIL(b : modules/http/http_filters.c line=322 column=65
b
e : modules/http/http_filters.c line=327 column=17
e
);
436            ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>eos_sent : modules/http/http_filters.c line=81 column=18
e
os_sent = : enter=0, leave=0
=
 1;
437            return : pass=0
r
eturn APR_SUCCESS;
438        }
439
440        /* Since we're about to read data, send 100-Continue if needed.
441         * Only valid on chunked and C-L bodies where the C-L is > 0. */
442        if : true=0, false=0
i
f ((ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
BODY_CHUNK : modules/http/http_filters.c line=71 column=9
B
ODY_CHUNK || : true=0, false=0
|
|
443            (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
BODY_LENGTH : modules/http/http_filters.c line=70 column=9
B
ODY_LENGTH && : true=0, false=0
&
ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0)) && : true=0, false=0
&
&
444            f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>expecting_100 : include/httpd.h line=886 column=14
e
xpecting_100 && : true=0, false=0
&
f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>proto_num : include/httpd.h line=812 column=9
p
roto_num >= : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
= HTTP_VERSION(1,1) && : true=0, false=0
&
&
445            ! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>eos_sent : include/httpd.h line=1002 column=9
e
os_sent || : true=0, false=0
|
f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>bytes_sent : include/httpd.h line=862 column=15
b
ytes_sent)) {
446            if : true=0, false=0
i
f (! : true=0, false=0
!
ap_is_HTTP_SUCCESS(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus)) {
447                ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_NONE : modules/http/http_filters.c line=69 column=9
B
ODY_NONE;
448                ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>eos_sent : modules/http/http_filters.c line=81 column=18
e
os_sent = : enter=0, leave=0
=
 1;
449            }
450            else {
451                char *tmp;
452                int len;
453
454                /* if we send an interim response, we're no longer
455                 * in a state of expecting one.
456                 */
457                f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>expecting_100 : include/httpd.h line=886 column=14
e
xpecting_100 = : enter=0, leave=0
=
 0;
458                tmp : modules/http/http_filters.c line=451 column=23
t
mp = : pass=0
=
 apr_pstrcat : enter=0, leave=0

apr_pstrcat : /usr/include/apr-1/apr_strings.h line=139 column=28
a
pr_pstrcat(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, AP_SERVER_PROTOCOL, " ",
459                                  ap_get_status_line : enter=0, leave=0

ap_get_status_line : include/http_protocol.h line=397 column=26
a
p_get_status_line(100), CRLF CRLF, NULL);
460                len : modules/http/http_filters.c line=452 column=21
l
en = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(tmp : modules/http/http_filters.c line=451 column=23
t
mp);
461                ap_xlate_proto_to_ascii(tmp, len);
462                apr_brigade_cleanup : enter=0, leave=0

apr_brigade_cleanup : /usr/include/apr-1/apr_buckets.h line=679 column=27
a
pr_brigade_cleanup(bb : modules/http/http_filters.c line=331 column=25
b
b);
463                e : modules/http/http_filters.c line=327 column=17
e
 = : pass=0
=
 apr_bucket_pool_create : enter=0, leave=0

apr_bucket_pool_create : /usr/include/apr-1/apr_buckets.h line=1373 column=27
a
pr_bucket_pool_create(tmp : modules/http/http_filters.c line=451 column=23
t
mp, len : modules/http/http_filters.c line=452 column=21
l
en, f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool,
464                                           f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
465                APR_BRIGADE_INSERT_HEAD(bb : modules/http/http_filters.c line=331 column=25
b
b, e : modules/http/http_filters.c line=327 column=17
e
);
466                e : modules/http/http_filters.c line=327 column=17
e
 = : pass=0
=
 apr_bucket_flush_create : enter=0, leave=0

apr_bucket_flush_create : /usr/include/apr-1/apr_buckets.h line=1278 column=27
a
pr_bucket_flush_create(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
467                APR_BRIGADE_INSERT_TAIL(bb : modules/http/http_filters.c line=331 column=25
b
b, e : modules/http/http_filters.c line=327 column=17
e
);
468
469                rv : modules/http/http_filters.c line=329 column=18
r
= : pass=0
=
 ap_pass_brigade : enter=0, leave=0

ap_pass_brigade : include/util_filter.h line=312 column=26
a
p_pass_brigade(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>output_filters : include/httpd.h line=1099 column=25
o
utput_filters, bb : modules/http/http_filters.c line=331 column=25
b
b);
470                if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=329 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
471                    return : pass=0
r
eturn AP_FILTER_ERROR;
472                }
473            }
474        }
475    }
476
477    /* sanity check in case we're read twice */
478    if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>eos_sent : modules/http/http_filters.c line=81 column=18
e
os_sent) {
479        e : modules/http/http_filters.c line=327 column=17
e
 = : pass=0
=
 apr_bucket_eos_create : enter=0, leave=0

apr_bucket_eos_create : /usr/include/apr-1/apr_buckets.h line=1260 column=27
a
pr_bucket_eos_create(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
480        APR_BRIGADE_INSERT_TAIL(b : modules/http/http_filters.c line=322 column=65
b
e : modules/http/http_filters.c line=327 column=17
e
);
481        return : pass=0
r
eturn APR_SUCCESS;
482    }
483
484    do {
485        apr_brigade_cleanup : enter=0, leave=0

apr_brigade_cleanup : /usr/include/apr-1/apr_buckets.h line=679 column=27
a
pr_brigade_cleanup(b : modules/http/http_filters.c line=322 column=65
b
);
486        again : modules/http/http_filters.c line=332 column=9
a
gain = : pass=0
=
 0; /* until further notice */
487
488        /* read and handle the brigade */
489        switch : pass=0
s
witch (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate) {
490        case : true=0, false=0
c
ase BODY_CHUNK:
491        case : true=0, false=0
c
ase BODY_CHUNK_PART:
492        case : true=0, false=0
c
ase BODY_CHUNK_EXT:
493        case : true=0, false=0
c
ase BODY_CHUNK_CR:
494        case : true=0, false=0
c
ase BODY_CHUNK_LF:
495        case : true=0, false=0
c
ase BODY_CHUNK_END:
496        case : true=0, false=0
c
ase BODY_CHUNK_END_LF: {
497
498            rv : modules/http/http_filters.c line=329 column=18
r
= : pass=0
=
 ap_get_brigade : enter=0, leave=0

ap_get_brigade : include/util_filter.h line=298 column=26
a
p_get_brigade(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext, b : modules/http/http_filters.c line=322 column=65
b
AP_MODE_GETLINE : include/util_filter.h line=57 column=5
A
P_MODE_GETLINE, block : modules/http/http_filters.c line=323 column=67
b
lock, 0);
499
500            /* for timeout */
501            if : true=0, false=0
i
f (block : modules/http/http_filters.c line=323 column=67
b
lock == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
APR_NONBLOCK_READ : /usr/include/apr-1/apr_buckets.h line=59 column=5 APR_NONBLOCK_READ
502                    && : true=0, false=0
&
& ((rv : modules/http/http_filters.c line=329 column=18
r
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_SUCCESS && : true=0, false=0
&
& APR_BRIGADE_EMPTY(b : modules/http/http_filters.c line=322 column=65
b
))
503                            || : true=0, false=0
|
| (APR_STATUS_IS_EAGAIN(rv : modules/http/http_filters.c line=329 column=18
r
v)))) {
504                return : pass=0
r
eturn APR_EAGAIN;
505            }
506
507            if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=329 column=18
r
== : true=0, false=0
=
= APR_EOF) {
508                return : pass=0
r
eturn APR_INCOMPLETE;
509            }
510
511            if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=329 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
512                return : pass=0
r
eturn rv : modules/http/http_filters.c line=329 column=18
r
v;
513            }
514
515            e : modules/http/http_filters.c line=327 column=17
e
 = : pass=0
=
 APR_BRIGADE_FIRST(b : modules/http/http_filters.c line=322 column=65
b
);
516            while : true=0, false=0
w
hile (e : modules/http/http_filters.c line=327 column=17
e
 != : true=0, false=0
!
= APR_BRIGADE_SENTINEL(b : modules/http/http_filters.c line=322 column=65
b
)) {
517                const char *buffer;
518                apr_size_t len;
519
520                if : true=0, false=0
i
f (! : true=0, false=0
!
APR_BUCKET_IS_METADATA(e : modules/http/http_filters.c line=327 column=17
e
)) {
521                    int parsing = 0;
522
523                    rv : modules/http/http_filters.c line=329 column=18
r
= : pass=0
=
 apr_bucket_read(e : modules/http/http_filters.c line=327 column=17
e
, &buffer : modules/http/http_filters.c line=517 column=29
b
uffer, &len : modules/http/http_filters.c line=518 column=28
l
en, APR_BLOCK_READ : /usr/include/apr-1/apr_buckets.h line=58 column=5 APR_BLOCK_READ);
524
525                    if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=329 column=18
r
== : true=0, false=0
=
= APR_SUCCESS) {
526                        parsing : modules/http/http_filters.c line=521 column=25
p
arsing = : pass=0
=
 1;
527                        rv : modules/http/http_filters.c line=329 column=18
r
= : pass=0
=
 parse_chunk_size : enter=0, leave=0

parse_chunk_size : modules/http/http_filters.c line=134 column=21
p
arse_chunk_size(ctx : modules/http/http_filters.c line=328 column=17
c
tx, buffer : modules/http/http_filters.c line=517 column=29
b
uffer, len : modules/http/http_filters.c line=518 column=28
l
en,
528                                f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
-> : enter=0, leave=0
-
>server : include/httpd.h line=784 column=17
s
erver-> : enter=0, leave=0
-
>limit_req_fieldsize : include/httpd.h line=1237 column=9
l
imit_req_fieldsize);
529                    }
530                    if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=329 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
531                        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_INFO, rv : modules/http/http_filters.c line=329 column=18
r
v, f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
,
532                                      "Error reading/parsing chunk %s ",
533                                      (APR_ENOSPC == : true=0, false=0
=
rv : modules/http/http_filters.c line=329 column=18
r
v) conditional operator : true=0, false=0
?
 "(overflow)" : "");
534                        if : true=0, false=0
i
f (parsing : modules/http/http_filters.c line=521 column=25
p
arsing) {
535                            if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=329 column=18
r
!= : true=0, false=0
!
= APR_ENOSPC) {
536                                http_error : modules/http/http_filters.c line=330 column=9
h
ttp_error = : pass=0
=
 HTTP_BAD_REQUEST;
537                            }
538                            return : pass=0
r
eturn bail_out_on_error : enter=0, leave=0

bail_out_on_error : modules/http/http_filters.c line=86 column=21
b
ail_out_on_error(ctx : modules/http/http_filters.c line=328 column=17
c
tx, f : modules/http/http_filters.c line=322 column=42
f
http_error : modules/http/http_filters.c line=330 column=9
h
ttp_error);
539                        }
540                        return : pass=0
r
eturn rv : modules/http/http_filters.c line=329 column=18
r
v;
541                    }
542                }
543
544                apr_bucket_delete(e : modules/http/http_filters.c line=327 column=17
e
);
545                e : modules/http/http_filters.c line=327 column=17
e
 = : pass=0
=
 APR_BRIGADE_FIRST(b : modules/http/http_filters.c line=322 column=65
b
);
546            }
547            again : modules/http/http_filters.c line=332 column=9
a
gain = : pass=0
=
 1; /* come around again */
548
549            if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
=
BODY_CHUNK_TRAILER : modules/http/http_filters.c line=79 column=9
B
ODY_CHUNK_TRAILER) {
550                /* Treat UNSET as DISABLE - trailers aren't merged by default */
551                return : pass=0
r
eturn read_chunked_trailers : enter=0, leave=0

read_chunked_trailers : modules/http/http_filters.c line=275 column=21
r
ead_chunked_trailers(ctx : modules/http/http_filters.c line=328 column=17
c
tx, f : modules/http/http_filters.c line=322 column=42
f
b : modules/http/http_filters.c line=322 column=65
b
,
552                            conf : modules/http/http_filters.c line=326 column=25
c
onf-> : enter=0, leave=0
-
>merge_trailers : include/http_core.h line=628 column=9
m
erge_trailers == : true=0, false=0
=
= AP_MERGE_TRAILERS_ENABLE);
553            }
554
555            break : pass=0
b
reak;
556        }
557        case : true=0, false=0
c
ase BODY_NONE:
558        case : true=0, false=0
c
ase BODY_LENGTH:
559        case : true=0, false=0
c
ase BODY_CHUNK_DATA: {
560
561            /* Ensure that the caller can not go over our boundary point. */
562            if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
BODY_NONE : modules/http/http_filters.c line=69 column=9
B
ODY_NONE && : true=0, false=0
&
ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 readbytes : modules/http/http_filters.c line=324 column=39
r
eadbytes) {
563                readbytes : modules/http/http_filters.c line=324 column=39
r
eadbytes = : pass=0
=
 ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining;
564            }
565            if : true=0, false=0
i
f (readbytes : modules/http/http_filters.c line=324 column=39
r
eadbytes > : true=0, false=0
>
 0) {
566                apr_off_t totalread;
567
568                rv : modules/http/http_filters.c line=329 column=18
r
= : pass=0
=
 ap_get_brigade : enter=0, leave=0

ap_get_brigade : include/util_filter.h line=298 column=26
a
p_get_brigade(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext, b : modules/http/http_filters.c line=322 column=65
b
mode : modules/http/http_filters.c line=323 column=45
m
ode, block : modules/http/http_filters.c line=323 column=67
b
lock, readbytes : modules/http/http_filters.c line=324 column=39
r
eadbytes);
569
570                /* for timeout */
571                if : true=0, false=0
i
f (block : modules/http/http_filters.c line=323 column=67
b
lock == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
APR_NONBLOCK_READ : /usr/include/apr-1/apr_buckets.h line=59 column=5 APR_NONBLOCK_READ
572                        && : true=0, false=0
&
& ((rv : modules/http/http_filters.c line=329 column=18
r
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_SUCCESS && : true=0, false=0
&
& APR_BRIGADE_EMPTY(b : modules/http/http_filters.c line=322 column=65
b
))
573                                || : true=0, false=0
|
| (APR_STATUS_IS_EAGAIN(rv : modules/http/http_filters.c line=329 column=18
r
v)))) {
574                    return : pass=0
r
eturn APR_EAGAIN;
575                }
576
577                if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=329 column=18
r
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_EOF && : true=0, false=0
&
ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
BODY_NONE : modules/http/http_filters.c line=69 column=9
B
ODY_NONE
578                        && : true=0, false=0
&
ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0) {
579                    return : pass=0
r
eturn APR_INCOMPLETE;
580                }
581
582                if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=329 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
583                    return : pass=0
r
eturn rv : modules/http/http_filters.c line=329 column=18
r
v;
584                }
585
586                /* How many bytes did we just read? */
587                apr_brigade_length : enter=0, leave=0

apr_brigade_length : /usr/include/apr-1/apr_buckets.h line=736 column=27
a
pr_brigade_length(b : modules/http/http_filters.c line=322 column=65
b
, 0, &totalread : modules/http/http_filters.c line=566 column=27
t
otalread);
588
589                /* If this happens, we have a bucket of unknown length.  Die because
590                 * it means our assumptions have changed. */
591                AP_DEBUG_ASSERT(totalread >= 0);
592
593                if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate != : true=0, false=0
!
BODY_NONE : modules/http/http_filters.c line=69 column=9
B
ODY_NONE) {
594                    ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining -= : enter=0, leave=0
-
totalread : modules/http/http_filters.c line=566 column=27
t
otalread;
595                    if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining > : true=0, false=0
>
 0) {
596                        e : modules/http/http_filters.c line=327 column=17
e
 = : pass=0
=
 APR_BRIGADE_LAST(b : modules/http/http_filters.c line=322 column=65
b
);
597                        if : true=0, false=0
i
f (APR_BUCKET_IS_EOS(e : modules/http/http_filters.c line=327 column=17
e
)) {
598                            apr_bucket_delete(e : modules/http/http_filters.c line=327 column=17
e
);
599                            return : pass=0
r
eturn APR_INCOMPLETE;
600                        }
601                    }
602                    else if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
=
BODY_CHUNK_DATA : modules/http/http_filters.c line=76 column=9
B
ODY_CHUNK_DATA) {
603                        /* next chunk please */
604                        ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate = : enter=0, leave=0
=
 BODY_CHUNK_END : modules/http/http_filters.c line=77 column=9
B
ODY_CHUNK_END;
605                        ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>chunk_used : modules/http/http_filters.c line=64 column=17
c
hunk_used = : enter=0, leave=0
=
 0;
606                    }
607                }
608
609                /* We have a limit in effect. */
610                if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>limit : modules/http/http_filters.c line=62 column=15
l
imit) {
611                    /* FIXME: Note that we might get slightly confused on
612                     * chunked inputs as we'd need to compensate for the chunk
613                     * lengths which may not really count.  This seems to be up
614                     * for interpretation.
615                     */
616                    ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>limit_used : modules/http/http_filters.c line=63 column=15
l
imit_used += : enter=0, leave=0
+
totalread : modules/http/http_filters.c line=566 column=27
t
otalread;
617                    if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>limit : modules/http/http_filters.c line=62 column=15
l
imit < : true=0, false=0
<
 ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>limit_used : modules/http/http_filters.c line=63 column=15
l
imit_used) {
618                        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_INFO, 0, f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
,
619                                      "Read content length of "
620                                      "%" APR_OFF_T_FMT " is larger than the "
621                                      "configured limit of %" APR_OFF_T_FMT,
622                                      ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>limit_used : modules/http/http_filters.c line=63 column=15
l
imit_used, ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>limit : modules/http/http_filters.c line=62 column=15
l
imit);
623                        return : pass=0
r
eturn bail_out_on_error : enter=0, leave=0

bail_out_on_error : modules/http/http_filters.c line=86 column=21
b
ail_out_on_error(ctx : modules/http/http_filters.c line=328 column=17
c
tx, f : modules/http/http_filters.c line=322 column=42
f
,
624                                                 HTTP_REQUEST_ENTITY_TOO_LARGE);
625                    }
626                }
627            }
628
629            /* If we have no more bytes remaining on a C-L request,
630             * save the caller a round trip to discover EOS.
631             */
632            if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
BODY_LENGTH : modules/http/http_filters.c line=70 column=9
B
ODY_LENGTH && : true=0, false=0
&
ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>remaining : modules/http/http_filters.c line=61 column=15
r
emaining == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 0) {
633                e : modules/http/http_filters.c line=327 column=17
e
 = : pass=0
=
 apr_bucket_eos_create : enter=0, leave=0

apr_bucket_eos_create : /usr/include/apr-1/apr_buckets.h line=1260 column=27
a
pr_bucket_eos_create(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
634                APR_BRIGADE_INSERT_TAIL(b : modules/http/http_filters.c line=322 column=65
b
e : modules/http/http_filters.c line=327 column=17
e
);
635                ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>eos_sent : modules/http/http_filters.c line=81 column=18
e
os_sent = : enter=0, leave=0
=
 1;
636            }
637
638            break : pass=0
b
reak;
639        }
640        case : true=0, false=0
c
ase BODY_CHUNK_TRAILER: {
641
642            rv : modules/http/http_filters.c line=329 column=18
r
= : pass=0
=
 ap_get_brigade : enter=0, leave=0

ap_get_brigade : include/util_filter.h line=298 column=26
a
p_get_brigade(f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext, b : modules/http/http_filters.c line=322 column=65
b
mode : modules/http/http_filters.c line=323 column=45
m
ode, block : modules/http/http_filters.c line=323 column=67
b
lock, readbytes : modules/http/http_filters.c line=324 column=39
r
eadbytes);
643
644            /* for timeout */
645            if : true=0, false=0
i
f (block : modules/http/http_filters.c line=323 column=67
b
lock == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
APR_NONBLOCK_READ : /usr/include/apr-1/apr_buckets.h line=59 column=5 APR_NONBLOCK_READ
646                    && : true=0, false=0
&
& ((rv : modules/http/http_filters.c line=329 column=18
r
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_SUCCESS && : true=0, false=0
&
& APR_BRIGADE_EMPTY(b : modules/http/http_filters.c line=322 column=65
b
))
647                            || : true=0, false=0
|
| (APR_STATUS_IS_EAGAIN(rv : modules/http/http_filters.c line=329 column=18
r
v)))) {
648                return : pass=0
r
eturn APR_EAGAIN;
649            }
650
651            if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=329 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
652                return : pass=0
r
eturn rv : modules/http/http_filters.c line=329 column=18
r
v;
653            }
654
655            break : pass=0
b
reak;
656        }
657        default : true=0, false=0
d
efault: {
658            /* Should not happen */
659            ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_INFO, 0, f : modules/http/http_filters.c line=322 column=42
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
,
660                          "Unexpected body state (%i)", (int)ctx : modules/http/http_filters.c line=328 column=17
c
tx-> : enter=0, leave=0
-
>state : modules/http/http_filters.c line=80 column=7
s
tate);
661            return : pass=0
r
eturn APR_EGENERAL;
662        }
663        }
664
665    } while : true=0, false=0
w
hile (again : modules/http/http_filters.c line=332 column=9
a
gain);
666
667    return : pass=0
r
eturn APR_SUCCESS;
668}
669
670typedef struct header_struct {
671    apr_pool_t *pool;
672    apr_bucket_brigade *bb;
673} header_struct;
674
675/* Send a single HTTP header field to the client.  Note that this function
676 * is used in calls to table_do(), so their interfaces are co-dependent.
677 * In other words, don't change this one without checking table_do in alloc.c.
678 * It returns true unless there was a write error of some kind.
679 */
680static int form_header_field : call=0
f
orm_header_field(header_struct *h,
681                             const char *fieldname, const char *fieldval)
682{
683#if APR_CHARSET_EBCDIC
684    char *headfield;
685    apr_size_t len;
686    apr_size_t name_len;
687    apr_size_t val_len;
688    char *next;
689
690    name_len = strlen(fieldname);
691    val_len = strlen(fieldval);
692    len = name_len + val_len + 4; /* 4 for ": " plus CRLF */
693    headfield = (char *)apr_palloc(h->pool, len + 1);
694    memcpy(headfield, fieldname, name_len);
695    next = headfield + name_len;
696    *next++ = ':';
697    *next++ = ' ';
698    memcpy(next, fieldval, val_len);
699    next += val_len;
700    *next++ = CR;
701    *next++ = LF;
702    *next = 0;
703    ap_xlate_proto_to_ascii(headfield, len);
704    apr_brigade_write(h->bb, NULL, NULL, headfield, len);
705#else
706    struct iovec vec[4];
707    struct iovec *v = vec : modules/http/http_filters.c line=706 column=18
v
ec;
708    v : modules/http/http_filters.c line=707 column=19
v
-> : enter=0, leave=0
-
>iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : enter=0, leave=0
=
 (void *)fieldname : modules/http/http_filters.c line=681 column=42
f
ieldname;
709    v : modules/http/http_filters.c line=707 column=19
v
-> : enter=0, leave=0
-
>iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len = : enter=0, leave=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(fieldname : modules/http/http_filters.c line=681 column=42
f
ieldname);
710    v : modules/http/http_filters.c line=707 column=19
v
++ : pass=0
+
+;
711    v : modules/http/http_filters.c line=707 column=19
v
-> : enter=0, leave=0
-
>iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : enter=0, leave=0
=
 ": ";
712    v : modules/http/http_filters.c line=707 column=19
v
-> : enter=0, leave=0
-
>iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len = : enter=0, leave=0
=
 sizeof(": ") - : pass=0
-
 1;
713    v : modules/http/http_filters.c line=707 column=19
v
++ : pass=0
+
+;
714    v : modules/http/http_filters.c line=707 column=19
v
-> : enter=0, leave=0
-
>iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : enter=0, leave=0
=
 (void *)fieldval : modules/http/http_filters.c line=681 column=65
f
ieldval;
715    v : modules/http/http_filters.c line=707 column=19
v
-> : enter=0, leave=0
-
>iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len = : enter=0, leave=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(fieldval : modules/http/http_filters.c line=681 column=65
f
ieldval);
716    v : modules/http/http_filters.c line=707 column=19
v
++ : pass=0
+
+;
717    v : modules/http/http_filters.c line=707 column=19
v
-> : enter=0, leave=0
-
>iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : enter=0, leave=0
=
 CRLF;
718    v : modules/http/http_filters.c line=707 column=19
v
-> : enter=0, leave=0
-
>iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len = : enter=0, leave=0
=
 sizeof(CRLF) - : pass=0
-
 1;
719    apr_brigade_writev : enter=0, leave=0

apr_brigade_writev : /usr/include/apr-1/apr_buckets.h line=823 column=27
a
pr_brigade_writev(h : modules/http/http_filters.c line=680 column=45
h
-> : enter=0, leave=0
-
>bb : modules/http/http_filters.c line=672 column=25
b
b, NULL, NULL, vec : modules/http/http_filters.c line=706 column=18
v
ec, 4);
720#endif /* !APR_CHARSET_EBCDIC */
721    return : pass=0
r
eturn 1;
722}
723
724/* This routine is called by apr_table_do and merges all instances of
725 * the passed field values into a single array that will be further
726 * processed by some later routine.  Originally intended to help split
727 * and recombine multiple Vary fields, though it is generic to any field
728 * consisting of comma/space-separated tokens.
729 */
730static int uniq_field_values : call=0
u
niq_field_values(void *d, const char *key, const char *val)
731{
732    apr_array_header_t *values;
733    char *start;
734    char *e;
735    char **strpp;
736    int  i;
737
738    values : modules/http/http_filters.c line=732 column=25
v
alues = : pass=0
=
 (apr_array_header_t *)d : modules/http/http_filters.c line=730 column=36
d
;
739
740    e : modules/http/http_filters.c line=734 column=11
e
 = : pass=0
=
 apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(values : modules/http/http_filters.c line=732 column=25
v
alues-> : enter=0, leave=0
-
>pool : /usr/include/apr-1/apr_tables.h line=54 column=17 pool, val : modules/http/http_filters.c line=730 column=68
v
al);
741
742    do {
743        /* Find a non-empty fieldname */
744
745        while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
e : modules/http/http_filters.c line=734 column=11
e
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ',' || : true=0, false=0
|
| apr_isspace(* dereference : enter=0, leave=0
*
e : modules/http/http_filters.c line=734 column=11
e
)) {
746            ++ : pass=0
+
+e : modules/http/http_filters.c line=734 column=11
e
;
747        }
748        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
e : modules/http/http_filters.c line=734 column=11
e
 == : true=0, false=0
=
= '\0') {
749            break : pass=0
b
reak;
750        }
751        start : modules/http/http_filters.c line=733 column=11
s
tart = : pass=0
=
 e : modules/http/http_filters.c line=734 column=11
e
;
752        while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
e : modules/http/http_filters.c line=734 column=11
e
 != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '\0' && : true=0, false=0
&
* dereference : enter=0, leave=0
*
e : modules/http/http_filters.c line=734 column=11
e
 != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= ',' && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isspace(* dereference : enter=0, leave=0
*
e : modules/http/http_filters.c line=734 column=11
e
)) {
753            ++ : pass=0
+
+e : modules/http/http_filters.c line=734 column=11
e
;
754        }
755        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
e : modules/http/http_filters.c line=734 column=11
e
 != : true=0, false=0
!
= '\0') {
756            *e : modules/http/http_filters.c line=734 column=11
e
++ : pass=0
+
= : enter=0, leave=0
=
 '\0';
757        }
758
759        /* Now add it to values if it isn't already represented.
760         * Could be replaced by a ap_array_strcasecmp() if we had one.
761         */
762        for : true=0, false=0
f
or (i : modules/http/http_filters.c line=736 column=10
i
 = : pass=0
=
 0, strpp : modules/http/http_filters.c line=735 column=12
s
trpp = : pass=0
=
 (char **) values : modules/http/http_filters.c line=732 column=25
v
alues-> : enter=0, leave=0
-
>elts : /usr/include/apr-1/apr_tables.h line=62 column=11 elts; i : modules/http/http_filters.c line=736 column=10
i
 < : true=0, false=0
<
 values : modules/http/http_filters.c line=732 column=25
v
alues-> : enter=0, leave=0
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts;
763             ++ : pass=0
+
+i : modules/http/http_filters.c line=736 column=10
i
++ : pass=0
+
+strpp : modules/http/http_filters.c line=735 column=12
s
trpp) {
764            if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
strpp : modules/http/http_filters.c line=735 column=12
s
trpp && : true=0, false=0
&
strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(* dereference : enter=0, leave=0
*
strpp : modules/http/http_filters.c line=735 column=12
s
trpp, start : modules/http/http_filters.c line=733 column=11
s
tart) == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 0) {
765                break : pass=0
b
reak;
766            }
767        }
768        if : true=0, false=0
i
f (i : modules/http/http_filters.c line=736 column=10
i
 == : true=0, false=0
=
values : modules/http/http_filters.c line=732 column=25
v
alues-> : enter=0, leave=0
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts) {  /* if not found */
769            *(char **)apr_array_push : enter=0, leave=0

apr_array_push : /usr/include/apr-1/apr_tables.h line=121 column=21
a
pr_array_push(values : modules/http/http_filters.c line=732 column=25
v
alues) = : enter=0, leave=0
=
 start : modules/http/http_filters.c line=733 column=11
s
tart;
770        }
771    } while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
e : modules/http/http_filters.c line=734 column=11
e
 != : true=0, false=0
!
= '\0');
772
773    return : pass=0
r
eturn 1;
774}
775
776/*
777 * Since some clients choke violently on multiple Vary fields, or
778 * Vary fields with duplicate tokens, combine any multiples and remove
779 * any duplicates.
780 */
781static void fixup_vary : call=0
f
ixup_vary(request_rec *r)
782{
783    apr_array_header_t *varies;
784
785    varies : modules/http/http_filters.c line=783 column=25
v
aries = : pass=0
=
 apr_array_make : enter=0, leave=0

apr_array_make : /usr/include/apr-1/apr_tables.h line=111 column=35
a
pr_array_make(r : modules/http/http_filters.c line=781 column=37
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, 5, sizeof(char *));
786
787    /* Extract all Vary fields from the headers_out, separate each into
788     * its comma-separated fieldname values, and then add them to varies
789     * if not already present in the array.
790     */
791    apr_table_do : enter=0, leave=0

apr_table_do : /usr/include/apr-1/apr_tables.h line=382 column=25
a
pr_table_do((int (*)(void *, const char *, const char *))uniq_field_values : modules/http/http_filters.c line=730 column=12
u
niq_field_values,
792                 (void *) varies : modules/http/http_filters.c line=783 column=25
v
aries, r : modules/http/http_filters.c line=781 column=37
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Vary", NULL);
793
794    /* If we found any, replace old Vary fields with unique-ified value */
795
796    if : true=0, false=0
i
f (varies : modules/http/http_filters.c line=783 column=25
v
aries-> : enter=0, leave=0
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts > : true=0, false=0
>
 0) {
797        apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(r : modules/http/http_filters.c line=781 column=37
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Vary",
798                       apr_array_pstrcat : enter=0, leave=0

apr_array_pstrcat : /usr/include/apr-1/apr_tables.h line=211 column=21
a
pr_array_pstrcat(r : modules/http/http_filters.c line=781 column=37
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, varies : modules/http/http_filters.c line=783 column=25
v
aries, ','));
799    }
800}
801
802/* Send a request's HTTP response headers to the client.
803 */
804static apr_status_t send_all_header_fields : call=0
s
end_all_header_fields(header_struct *h,
805                                           const request_rec *r)
806{
807    const apr_array_header_t *elts;
808    const apr_table_entry_t *t_elt;
809    const apr_table_entry_t *t_end;
810    struct iovec *vec;
811    struct iovec *vec_next;
812
813    elts : modules/http/http_filters.c line=807 column=31
e
lts = : pass=0
=
 apr_table_elts : enter=0, leave=0

apr_table_elts : /usr/include/apr-1/apr_tables.h line=88 column=41
a
pr_table_elts(r : modules/http/http_filters.c line=805 column=63
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out);
814    if : true=0, false=0
i
f (elts : modules/http/http_filters.c line=807 column=31
e
lts-> : enter=0, leave=0
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts == : true=0, false=0
=
= 0) {
815        return : pass=0
r
eturn APR_SUCCESS;
816    }
817    t_elt : modules/http/http_filters.c line=808 column=30
t
_elt = : pass=0
=
 (const apr_table_entry_t *)(elts : modules/http/http_filters.c line=807 column=31
e
lts-> : enter=0, leave=0
-
>elts : /usr/include/apr-1/apr_tables.h line=62 column=11 elts);
818    t_end : modules/http/http_filters.c line=809 column=30
t
_end = : pass=0
=
 t_elt : modules/http/http_filters.c line=808 column=30
t
_elt + : pass=0
+
 elts : modules/http/http_filters.c line=807 column=31
e
lts-> : enter=0, leave=0
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts;
819    vec : modules/http/http_filters.c line=810 column=19
v
ec = : pass=0
=
 (struct iovec *)apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(h : modules/http/http_filters.c line=804 column=59
h
-> : enter=0, leave=0
-
>pool : modules/http/http_filters.c line=671 column=17
p
ool, 4 * : pass=0
*
 elts : modules/http/http_filters.c line=807 column=31
e
lts-> : enter=0, leave=0
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts * : pass=0
*
820                                     sizeof(struct iovec));
821    vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next = : pass=0
=
 vec : modules/http/http_filters.c line=810 column=19
v
ec;
822
823    /* For each field, generate
824     *    name ": " value CRLF
825     */
826    do {
827        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next-> : enter=0, leave=0
-
>iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : enter=0, leave=0
=
 (void*)(t_elt : modules/http/http_filters.c line=808 column=30
t
_elt-> : enter=0, leave=0
-
>key : /usr/include/apr-1/apr_tables.h line=73 column=11 key);
828        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next-> : enter=0, leave=0
-
>iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len = : enter=0, leave=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(t_elt : modules/http/http_filters.c line=808 column=30
t
_elt-> : enter=0, leave=0
-
>key : /usr/include/apr-1/apr_tables.h line=73 column=11 key);
829        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next++ : pass=0
+
+;
830        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next-> : enter=0, leave=0
-
>iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : enter=0, leave=0
=
 ": ";
831        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next-> : enter=0, leave=0
-
>iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len = : enter=0, leave=0
=
 sizeof(": ") - : pass=0
-
 1;
832        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next++ : pass=0
+
+;
833        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next-> : enter=0, leave=0
-
>iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : enter=0, leave=0
=
 (void*)(t_elt : modules/http/http_filters.c line=808 column=30
t
_elt-> : enter=0, leave=0
-
>val : /usr/include/apr-1/apr_tables.h line=77 column=11 val);
834        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next-> : enter=0, leave=0
-
>iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len = : enter=0, leave=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(t_elt : modules/http/http_filters.c line=808 column=30
t
_elt-> : enter=0, leave=0
-
>val : /usr/include/apr-1/apr_tables.h line=77 column=11 val);
835        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next++ : pass=0
+
+;
836        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next-> : enter=0, leave=0
-
>iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : enter=0, leave=0
=
 CRLF;
837        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next-> : enter=0, leave=0
-
>iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len = : enter=0, leave=0
=
 sizeof(CRLF) - : pass=0
-
 1;
838        vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next++ : pass=0
+
+;
839        t_elt : modules/http/http_filters.c line=808 column=30
t
_elt++ : pass=0
+
+;
840    } while : true=0, false=0
w
hile (t_elt : modules/http/http_filters.c line=808 column=30
t
_elt < : true=0, false=0
<
 t_end : modules/http/http_filters.c line=809 column=30
t
_end);
841
842#if APR_CHARSET_EBCDIC
843    {
844        apr_size_t len;
845        char *tmp = apr_pstrcatv(r->pool, vec, vec_next - vec, &len);
846        ap_xlate_proto_to_ascii(tmp, len);
847        return apr_brigade_write(h->bb, NULL, NULL, tmp, len);
848    }
849#else
850    return : pass=0
r
eturn apr_brigade_writev : enter=0, leave=0

apr_brigade_writev : /usr/include/apr-1/apr_buckets.h line=823 column=27
a
pr_brigade_writev(h : modules/http/http_filters.c line=804 column=59
h
-> : enter=0, leave=0
-
>bb : modules/http/http_filters.c line=672 column=25
b
b, NULL, NULL, vec : modules/http/http_filters.c line=810 column=19
v
ec, vec_next : modules/http/http_filters.c line=811 column=19
v
ec_next - : pass=0
-
 vec : modules/http/http_filters.c line=810 column=19
v
ec);
851#endif
852}
853
854/* Confirm that the status line is well-formed and matches r->status.
855 * If they don't match, a filter may have negated the status line set by a
856 * handler.
857 * Zap r->status_line if bad.
858 */
859static void validate_status_line : call=0
v
alidate_status_line(request_rec *r)
860{
861    char *end;
862
863    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=859 column=47
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>status_line : include/httpd.h line=820 column=17
s
tatus_line
864        && : true=0, false=0
&
& (strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(r : modules/http/http_filters.c line=859 column=47
r
-> : enter=0, leave=0
-
>status_line : include/httpd.h line=820 column=17
s
tatus_line) <= : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
= 4
865            || : true=0, false=0
|
apr_strtoi64 : enter=0, leave=0

apr_strtoi64 : /usr/include/apr-1/apr_strings.h line=335 column=26
a
pr_strtoi64(r : modules/http/http_filters.c line=859 column=47
r
-> : enter=0, leave=0
-
>status_line : include/httpd.h line=820 column=17
s
tatus_line, &end : modules/http/http_filters.c line=861 column=11
e
nd, 10) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
r : modules/http/http_filters.c line=859 column=47
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus
866            || : true=0, false=0
|
* dereference : enter=0, leave=0
*
end : modules/http/http_filters.c line=861 column=11
e
nd != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= ' '
867            || : true=0, false=0
|
| (end : modules/http/http_filters.c line=861 column=11
e
nd - : pass=0
-
 3) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
r : modules/http/http_filters.c line=859 column=47
r
-> : enter=0, leave=0
-
>status_line : include/httpd.h line=820 column=17
s
tatus_line)) {
868        r : modules/http/http_filters.c line=859 column=47
r
-> : enter=0, leave=0
-
>status_line : include/httpd.h line=820 column=17
s
tatus_line = : enter=0, leave=0
=
 NULL;
869    }
870}
871
872/*
873 * Determine the protocol to use for the response. Potentially downgrade
874 * to HTTP/1.0 in some situations and/or turn off keepalives.
875 *
876 * also prepare r->status_line.
877 */
878static void basic_http_header_check : call=0
b
asic_http_header_check(request_rec *r,
879                                    const char **protocol)
880{
881    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=878 column=50
r
-> : enter=0, leave=0
-
>assbackwards : include/httpd.h line=801 column=9
a
ssbackwards) {
882        /* no such thing as a response protocol */
883        return : pass=0
r
eturn;
884    }
885
886    validate_status_line : enter=0, leave=0

validate_status_line : modules/http/http_filters.c line=859 column=13
v
alidate_status_line(r : modules/http/http_filters.c line=878 column=50
r
);
887
888    if : true=0, false=0
i
f (! : true=0, false=0
!
r : modules/http/http_filters.c line=878 column=50
r
-> : enter=0, leave=0
-
>status_line : include/httpd.h line=820 column=17
s
tatus_line) {
889        r : modules/http/http_filters.c line=878 column=50
r
-> : enter=0, leave=0
-
>status_line : include/httpd.h line=820 column=17
s
tatus_line = : enter=0, leave=0
=
 ap_get_status_line : enter=0, leave=0

ap_get_status_line : include/http_protocol.h line=397 column=26
a
p_get_status_line(r : modules/http/http_filters.c line=878 column=50
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus);
890    }
891
892    /* Note that we must downgrade before checking for force responses. */
893    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=878 column=50
r
-> : enter=0, leave=0
-
>proto_num : include/httpd.h line=812 column=9
p
roto_num > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 HTTP_VERSION(1,0)
894        && : true=0, false=0
&
MC/DC independently affect : true=0, false=0
apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
aTF
pr_table_get(r : modules/http/http_filters.c line=878 column=50
r
-> : enter=0, leave=0
-
>subprocess_env : include/httpd.h line=908 column=18
s
ubprocess_env, "downgrade-1.0")) {
895        r : modules/http/http_filters.c line=878 column=50
r
-> : enter=0, leave=0
-
>proto_num : include/httpd.h line=812 column=9
p
roto_num = : enter=0, leave=0
=
 HTTP_VERSION(1,0);
896    }
897
898    /* kludge around broken browsers when indicated by force-response-1.0
899     */
900    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=878 column=50
r
-> : enter=0, leave=0
-
>proto_num : include/httpd.h line=812 column=9
p
roto_num == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= HTTP_VERSION(1,0)
901        && : true=0, false=0
&
MC/DC independently affect : true=0, false=0
apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
aTF
pr_table_get(r : modules/http/http_filters.c line=878 column=50
r
-> : enter=0, leave=0
-
>subprocess_env : include/httpd.h line=908 column=18
s
ubprocess_env, "force-response-1.0")) {
902        *protocol : modules/http/http_filters.c line=879 column=50
p
rotocol = : enter=0, leave=0
=
 "HTTP/1.0";
903        r : modules/http/http_filters.c line=878 column=50
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection-> : enter=0, leave=0
-
>keepalive : include/httpd.h line=1074 column=25
k
eepalive = : enter=0, leave=0
=
 AP_CONN_CLOSE : include/httpd.h line=1038 column=5
A
P_CONN_CLOSE;
904    }
905    else {
906        *protocol : modules/http/http_filters.c line=879 column=50
p
rotocol = : enter=0, leave=0
=
 AP_SERVER_PROTOCOL;
907    }
908
909}
910
911/* fill "bb" with a barebones/initial HTTP response header */
912static void basic_http_header : call=0
b
asic_http_header(request_rec *r, apr_bucket_brigade *bb,
913                              const char *protocol)
914{
915    char *date;
916    const char *server;
917    header_struct h;
918    struct iovec vec[4];
919
920    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>assbackwards : include/httpd.h line=801 column=9
a
ssbackwards) {
921        /* there are no headers to send */
922        return : pass=0
r
eturn;
923    }
924
925    /* Output the HTTP/1.x Status-Line and the Date and Server fields */
926
927    vec : modules/http/http_filters.c line=918 column=18
v
ec[] : enter=0, leave=0
[
0].iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : pass=0
=
 (void *)protocol : modules/http/http_filters.c line=913 column=43
p
rotocol;
928    vec : modules/http/http_filters.c line=918 column=18
v
ec[] : enter=0, leave=0
[
0].iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len  = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(protocol : modules/http/http_filters.c line=913 column=43
p
rotocol);
929    vec : modules/http/http_filters.c line=918 column=18
v
ec[] : enter=0, leave=0
[
1].iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : pass=0
=
 (void *)" ";
930    vec : modules/http/http_filters.c line=918 column=18
v
ec[] : enter=0, leave=0
[
1].iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len  = : pass=0
=
 sizeof(" ") - : pass=0
-
 1;
931    vec : modules/http/http_filters.c line=918 column=18
v
ec[] : enter=0, leave=0
[
2].iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : pass=0
=
 (void *)(r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>status_line : include/httpd.h line=820 column=17
s
tatus_line);
932    vec : modules/http/http_filters.c line=918 column=18
v
ec[] : enter=0, leave=0
[
2].iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len  = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>status_line : include/httpd.h line=820 column=17
s
tatus_line);
933    vec : modules/http/http_filters.c line=918 column=18
v
ec[] : enter=0, leave=0
[
3].iov_base : /usr/include/bits/uio.h line=46 column=11 iov_base = : pass=0
=
 (void *)CRLF;
934    vec : modules/http/http_filters.c line=918 column=18
v
ec[] : enter=0, leave=0
[
3].iov_len : /usr/include/bits/uio.h line=47 column=12 iov_len  = : pass=0
=
 sizeof(CRLF) - : pass=0
-
 1;
935#if APR_CHARSET_EBCDIC
936    {
937        char *tmp;
938        apr_size_t len;
939        tmp = apr_pstrcatv(r->pool, vec, 4, &len);
940        ap_xlate_proto_to_ascii(tmp, len);
941        apr_brigade_write(bb, NULL, NULL, tmp, len);
942    }
943#else
944    apr_brigade_writev : enter=0, leave=0

apr_brigade_writev : /usr/include/apr-1/apr_buckets.h line=823 column=27
a
pr_brigade_writev(bb : modules/http/http_filters.c line=912 column=67
b
b, NULL, NULL, vec : modules/http/http_filters.c line=918 column=18
v
ec, 4);
945#endif
946
947    h : modules/http/http_filters.c line=917 column=19
h
.pool : modules/http/http_filters.c line=671 column=17
p
ool = : pass=0
=
 r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool;
948    h : modules/http/http_filters.c line=917 column=19
h
.bb : modules/http/http_filters.c line=672 column=25
b
= : pass=0
=
 bb : modules/http/http_filters.c line=912 column=67
b
b;
949
950    /*
951     * keep the set-by-proxy server and date headers, otherwise
952     * generate a new server header / date header
953     */
954    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>proxyreq : include/httpd.h line=806 column=9
p
roxyreq != : true=0, false=0
!
= PROXYREQ_NONE) {
955        const char *proxy_date;
956
957        proxy_date : modules/http/http_filters.c line=955 column=21
p
roxy_date = : pass=0
=
 apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Date");
958        if : true=0, false=0
i
f (! : true=0, false=0
!
proxy_date : modules/http/http_filters.c line=955 column=21
p
roxy_date) {
959            /*
960             * proxy_date needs to be const. So use date for the creation of
961             * our own Date header and pass it over to proxy_date later to
962             * avoid a compiler warning.
963             */
964            date : modules/http/http_filters.c line=915 column=11
d
ate = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, APR_RFC822_DATE_LEN);
965            ap_recent_rfc822_date : enter=0, leave=0

ap_recent_rfc822_date : include/util_time.h line=84 column=26
a
p_recent_rfc822_date(date : modules/http/http_filters.c line=915 column=11
d
ate, r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>request_time : include/httpd.h line=817 column=16
r
equest_time);
966            proxy_date : modules/http/http_filters.c line=955 column=21
p
roxy_date = : pass=0
=
 date : modules/http/http_filters.c line=915 column=11
d
ate;
967        }
968        form_header_field : enter=0, leave=0

form_header_field : modules/http/http_filters.c line=680 column=12
f
orm_header_field(&h : modules/http/http_filters.c line=917 column=19
h
, "Date", proxy_date : modules/http/http_filters.c line=955 column=21
p
roxy_date);
969        server : modules/http/http_filters.c line=916 column=17
s
erver = : pass=0
=
 apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Server");
970        if : true=0, false=0
i
f (server : modules/http/http_filters.c line=916 column=17
s
erver) {
971            form_header_field : enter=0, leave=0

form_header_field : modules/http/http_filters.c line=680 column=12
f
orm_header_field(&h : modules/http/http_filters.c line=917 column=19
h
, "Server", server : modules/http/http_filters.c line=916 column=17
s
erver);
972        }
973    }
974    else {
975        date : modules/http/http_filters.c line=915 column=11
d
ate = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, APR_RFC822_DATE_LEN);
976        ap_recent_rfc822_date : enter=0, leave=0

ap_recent_rfc822_date : include/util_time.h line=84 column=26
a
p_recent_rfc822_date(date : modules/http/http_filters.c line=915 column=11
d
ate, r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>request_time : include/httpd.h line=817 column=16
r
equest_time);
977        form_header_field : enter=0, leave=0

form_header_field : modules/http/http_filters.c line=680 column=12
f
orm_header_field(&h : modules/http/http_filters.c line=917 column=19
h
, "Date", date : modules/http/http_filters.c line=915 column=11
d
ate);
978        form_header_field : enter=0, leave=0

form_header_field : modules/http/http_filters.c line=680 column=12
f
orm_header_field(&h : modules/http/http_filters.c line=917 column=19
h
, "Server", ap_get_server_banner : enter=0, leave=0

ap_get_server_banner : include/httpd.h line=445 column=26
a
p_get_server_banner());
979    }
980
981    /* unset so we don't send them again */
982    apr_table_unset : enter=0, leave=0

apr_table_unset : /usr/include/apr-1/apr_tables.h line=290 column=19
a
pr_table_unset(r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Date");        /* Avoid bogosity */
983    apr_table_unset : enter=0, leave=0

apr_table_unset : /usr/include/apr-1/apr_tables.h line=290 column=19
a
pr_table_unset(r : modules/http/http_filters.c line=912 column=44
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Server");
984}
985
986AP_DECLARE(void) ap_basic_http_header : call=0
a
p_basic_http_header(request_rec *r, apr_bucket_brigade *bb)
987{
988    const char *protocol;
989
990    basic_http_header_check : enter=0, leave=0

basic_http_header_check : modules/http/http_filters.c line=878 column=13
b
asic_http_header_check(r : modules/http/http_filters.c line=986 column=52
r
, &protocol : modules/http/http_filters.c line=988 column=17
p
rotocol);
991    basic_http_header : enter=0, leave=0

basic_http_header : modules/http/http_filters.c line=912 column=13
b
asic_http_header(r : modules/http/http_filters.c line=986 column=52
r
bb : modules/http/http_filters.c line=986 column=75
b
b, protocol : modules/http/http_filters.c line=988 column=17
p
rotocol);
992}
993
994/* Navigator versions 2.x, 3.x and 4.0 betas up to and including 4.0b2
995 * have a header parsing bug.  If the terminating \r\n occur starting
996 * at offset 256, 257 or 258 of output then it will not properly parse
997 * the headers.  Curiously it doesn't exhibit this problem at 512, 513.
998 * We are guessing that this is because their initial read of a new request
999 * uses a 256 byte buffer, and subsequent reads use a larger buffer.
1000 * So the problem might exist at different offsets as well.
1001 *
1002 * This should also work on keepalive connections assuming they use the
1003 * same small buffer for the first read of each new request.
1004 *
1005 * At any rate, we check the bytes written so far and, if we are about to
1006 * tickle the bug, we instead insert a bogus padding header.  Since the bug
1007 * manifests as a broken image in Navigator, users blame the server.  :(
1008 * It is more expensive to check the User-Agent than it is to just add the
1009 * bytes, so we haven't used the BrowserMatch feature here.
1010 */
1011static void terminate_header : call=0
t
erminate_header(apr_bucket_brigade *bb)
1012{
1013    char tmp[] = "X-Pad: avoid browser bug" CRLF;
1014    char crlf[] = CRLF;
1015    apr_off_t len;
1016    apr_size_t buflen;
1017
1018    (void) apr_brigade_length : enter=0, leave=0

apr_brigade_length : /usr/include/apr-1/apr_buckets.h line=736 column=27
a
pr_brigade_length(bb : modules/http/http_filters.c line=1011 column=50
b
b, 1, &len : modules/http/http_filters.c line=1015 column=15
l
en);
1019
1020    if : true=0, false=0
i
f (len : modules/http/http_filters.c line=1015 column=15
l
en >= : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
= 255 && : true=0, false=0
&
len : modules/http/http_filters.c line=1015 column=15
l
en <= : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
= 257) {
1021        buflen : modules/http/http_filters.c line=1016 column=16
b
uflen = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(tmp : modules/http/http_filters.c line=1013 column=10
t
mp);
1022        ap_xlate_proto_to_ascii(tmp, buflen);
1023        apr_brigade_write : enter=0, leave=0

apr_brigade_write : /usr/include/apr-1/apr_buckets.h line=810 column=27
a
pr_brigade_write(bb : modules/http/http_filters.c line=1011 column=50
b
b, NULL, NULL, tmp : modules/http/http_filters.c line=1013 column=10
t
mp, buflen : modules/http/http_filters.c line=1016 column=16
b
uflen);
1024    }
1025    buflen : modules/http/http_filters.c line=1016 column=16
b
uflen = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(crlf : modules/http/http_filters.c line=1014 column=10
c
rlf);
1026    ap_xlate_proto_to_ascii(crlf, buflen);
1027    apr_brigade_write : enter=0, leave=0

apr_brigade_write : /usr/include/apr-1/apr_buckets.h line=810 column=27
a
pr_brigade_write(bb : modules/http/http_filters.c line=1011 column=50
b
b, NULL, NULL, crlf : modules/http/http_filters.c line=1014 column=10
c
rlf, buflen : modules/http/http_filters.c line=1016 column=16
b
uflen);
1028}
1029
1030AP_DECLARE_NONSTD(int) ap_send_http_trace : call=0
a
p_send_http_trace(request_rec *r)
1031{
1032    core_server_config *conf;
1033    int rv;
1034    apr_bucket_brigade *bb;
1035    header_struct h;
1036    apr_bucket *b;
1037    int body;
1038    char *bodyread = NULL, *bodyoff;
1039    apr_size_t bodylen = 0;
1040    apr_size_t bodybuf;
1041    long res = -1; /* init to avoid gcc -Wall warning */
1042
1043    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>method_number : include/httpd.h line=831 column=9
m
ethod_number != : true=0, false=0
!
= M_TRACE) {
1044        return : pass=0
r
eturn DECLINED;
1045    }
1046
1047    /* Get the original request */
1048    while : true=0, false=0
w
hile (r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>prev : include/httpd.h line=789 column=18
p
rev) {
1049        r : modules/http/http_filters.c line=1030 column=56
r
 = : pass=0
=
 r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>prev : include/httpd.h line=789 column=18
p
rev;
1050    }
1051    conf : modules/http/http_filters.c line=1032 column=25
c
onf = : pass=0
=
 (core_server_config *)ap_get_module_config(r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>server : include/httpd.h line=784 column=17
s
erver-> : enter=0, leave=0
-
>module_config : include/httpd.h line=1207 column=30
m
odule_config,
1052                                                      &core_module : include/http_core.h line=345 column=31
c
ore_module);
1053
1054    if : true=0, false=0
i
f (conf : modules/http/http_filters.c line=1032 column=25
c
onf-> : enter=0, leave=0
-
>trace_enable : include/http_core.h line=624 column=9
t
race_enable == : true=0, false=0
=
= AP_TRACE_DISABLE) {
1055        apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>notes : include/httpd.h line=910 column=18
n
otes, "error-notes",
1056                      "TRACE denied by server configuration");
1057        return : pass=0
r
eturn HTTP_METHOD_NOT_ALLOWED;
1058    }
1059
1060    if : true=0, false=0
i
f (conf : modules/http/http_filters.c line=1032 column=25
c
onf-> : enter=0, leave=0
-
>trace_enable : include/http_core.h line=624 column=9
t
race_enable == : true=0, false=0
=
= AP_TRACE_EXTENDED)
1061        /* XX should be = REQUEST_CHUNKED_PASS */
1062        body : modules/http/http_filters.c line=1037 column=9
b
ody = : pass=0
=
 REQUEST_CHUNKED_DECHUNK;
1063    else
1064        body : modules/http/http_filters.c line=1037 column=9
b
ody = : pass=0
=
 REQUEST_NO_BODY;
1065
1066    if : true=0, false=0
i
f ((rv : modules/http/http_filters.c line=1033 column=9
r
= : pass=0
=
 ap_setup_client_block : enter=0, leave=0

ap_setup_client_block : include/http_protocol.h line=412 column=17
a
p_setup_client_block(r : modules/http/http_filters.c line=1030 column=56
r
body : modules/http/http_filters.c line=1037 column=9
b
ody))) {
1067        if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=1033 column=9
r
== : true=0, false=0
=
= HTTP_REQUEST_ENTITY_TOO_LARGE)
1068            apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>notes : include/httpd.h line=910 column=18
n
otes, "error-notes",
1069                          "TRACE with a request body is not allowed");
1070        return : pass=0
r
eturn rv : modules/http/http_filters.c line=1033 column=9
r
v;
1071    }
1072
1073    if : true=0, false=0
i
f (ap_should_client_block : enter=0, leave=0

ap_should_client_block : include/http_protocol.h line=422 column=17
a
p_should_client_block(r : modules/http/http_filters.c line=1030 column=56
r
)) {
1074
1075        if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining > : true=0, false=0
>
 0) {
1076            if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining > : true=0, false=0
>
 65536) {
1077                apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>notes : include/httpd.h line=910 column=18
n
otes, "error-notes",
1078                       "Extended TRACE request bodies cannot exceed 64k\n");
1079                return : pass=0
r
eturn HTTP_REQUEST_ENTITY_TOO_LARGE;
1080            }
1081            /* always 32 extra bytes to catch chunk header exceptions */
1082            bodybuf : modules/http/http_filters.c line=1040 column=16
b
odybuf = : pass=0
=
 (apr_size_t)r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining + : pass=0
+
 32;
1083        }
1084        else {
1085            /* Add an extra 8192 for chunk headers */
1086            bodybuf : modules/http/http_filters.c line=1040 column=16
b
odybuf = : pass=0
=
 73730;
1087        }
1088
1089        bodyoff : modules/http/http_filters.c line=1038 column=29
b
odyoff = : pass=0
=
 bodyread : modules/http/http_filters.c line=1038 column=11
b
odyread = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, bodybuf : modules/http/http_filters.c line=1040 column=16
b
odybuf);
1090
1091        /* only while we have enough for a chunked header */
1092        while : true=0, false=0
w
hile ((! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
bodylen : modules/http/http_filters.c line=1039 column=16
b
odylen || : true=0, false=0
|
bodybuf : modules/http/http_filters.c line=1040 column=16
b
odybuf >= : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
= 32) && : true=0, false=0
&
&
1093               (res : modules/http/http_filters.c line=1041 column=10
r
es = : pass=0
=
 ap_get_client_block : enter=0, leave=0

ap_get_client_block : include/http_protocol.h line=433 column=18
a
p_get_client_block(r : modules/http/http_filters.c line=1030 column=56
r
bodyoff : modules/http/http_filters.c line=1038 column=29
b
odyoff, bodybuf : modules/http/http_filters.c line=1040 column=16
b
odybuf)) > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0) {
1094            bodylen : modules/http/http_filters.c line=1039 column=16
b
odylen += : pass=0
+
res : modules/http/http_filters.c line=1041 column=10
r
es;
1095            bodybuf : modules/http/http_filters.c line=1040 column=16
b
odybuf -= : pass=0
-
res : modules/http/http_filters.c line=1041 column=10
r
es;
1096            bodyoff : modules/http/http_filters.c line=1038 column=29
b
odyoff += : pass=0
+
res : modules/http/http_filters.c line=1041 column=10
r
es;
1097        }
1098        if : true=0, false=0
i
f (res : modules/http/http_filters.c line=1041 column=10
r
es > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0 && : true=0, false=0
&
bodybuf : modules/http/http_filters.c line=1040 column=16
b
odybuf < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 32) {
1099            /* discard_rest_of_request_body into our buffer */
1100            while : true=0, false=0
w
hile (ap_get_client_block : enter=0, leave=0

ap_get_client_block : include/http_protocol.h line=433 column=18
a
p_get_client_block(r : modules/http/http_filters.c line=1030 column=56
r
bodyread : modules/http/http_filters.c line=1038 column=11
b
odyread, bodylen : modules/http/http_filters.c line=1039 column=16
b
odylen) > : true=0, false=0
>
 0)
1101                ;
1102            apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>notes : include/httpd.h line=910 column=18
n
otes, "error-notes",
1103                   "Extended TRACE request bodies cannot exceed 64k\n");
1104            return : pass=0
r
eturn HTTP_REQUEST_ENTITY_TOO_LARGE;
1105        }
1106
1107        if : true=0, false=0
i
f (res : modules/http/http_filters.c line=1041 column=10
r
es < : true=0, false=0
<
 0) {
1108            return : pass=0
r
eturn HTTP_BAD_REQUEST;
1109        }
1110    }
1111
1112    ap_set_content_type : enter=0, leave=0

ap_set_content_type : include/http_protocol.h line=310 column=18
a
p_set_content_type(r : modules/http/http_filters.c line=1030 column=56
r
, "message/http");
1113
1114    /* Now we recreate the request, and echo it back */
1115
1116    bb : modules/http/http_filters.c line=1034 column=25
b
= : pass=0
=
 apr_brigade_create : enter=0, leave=0

apr_brigade_create : /usr/include/apr-1/apr_buckets.h line=658 column=35
a
pr_brigade_create(r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
1117#if APR_CHARSET_EBCDIC
1118    {
1119        char *tmp;
1120        apr_size_t len;
1121        len = strlen(r->the_request);
1122        tmp = apr_pmemdup(r->pool, r->the_request, len);
1123        ap_xlate_proto_to_ascii(tmp, len);
1124        apr_brigade_putstrs(bb, NULL, NULL, tmp, CRLF_ASCII, NULL);
1125    }
1126#else
1127    apr_brigade_putstrs : enter=0, leave=0

apr_brigade_putstrs : /usr/include/apr-1/apr_buckets.h line=861 column=34
a
pr_brigade_putstrs(bb : modules/http/http_filters.c line=1034 column=25
b
b, NULL, NULL, r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>the_request : include/httpd.h line=799 column=11
t
he_request, CRLF, NULL);
1128#endif
1129    h : modules/http/http_filters.c line=1035 column=19
h
.pool : modules/http/http_filters.c line=671 column=17
p
ool = : pass=0
=
 r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool;
1130    h : modules/http/http_filters.c line=1035 column=19
h
.bb : modules/http/http_filters.c line=672 column=25
b
= : pass=0
=
 bb : modules/http/http_filters.c line=1034 column=25
b
b;
1131    apr_table_do : enter=0, leave=0

apr_table_do : /usr/include/apr-1/apr_tables.h line=382 column=25
a
pr_table_do((int (*) (void *, const char *, const char *))
1132                 form_header_field : modules/http/http_filters.c line=680 column=12
f
orm_header_field, (void *) &h : modules/http/http_filters.c line=1035 column=19
h
r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in, NULL);
1133    apr_brigade_puts : enter=0, leave=0

apr_brigade_puts : /usr/include/apr-1/apr_buckets.h line=837 column=27
a
pr_brigade_puts(bb : modules/http/http_filters.c line=1034 column=25
b
b, NULL, NULL, CRLF_ASCII);
1134
1135    /* If configured to accept a body, echo the body */
1136    if : true=0, false=0
i
f (bodylen : modules/http/http_filters.c line=1039 column=16
b
odylen) {
1137        b : modules/http/http_filters.c line=1036 column=17
b
 = : pass=0
=
 apr_bucket_pool_create : enter=0, leave=0

apr_bucket_pool_create : /usr/include/apr-1/apr_buckets.h line=1373 column=27
a
pr_bucket_pool_create(bodyread : modules/http/http_filters.c line=1038 column=11
b
odyread, bodylen : modules/http/http_filters.c line=1039 column=16
b
odylen,
1138                                   r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, bb : modules/http/http_filters.c line=1034 column=25
b
b-> : enter=0, leave=0
-
>bucket_alloc : /usr/include/apr-1/apr_buckets.h line=275 column=25 bucket_alloc);
1139        APR_BRIGADE_INSERT_TAIL(bb : modules/http/http_filters.c line=1034 column=25
b
b, b : modules/http/http_filters.c line=1036 column=17
b
);
1140    }
1141
1142    ap_pass_brigade : enter=0, leave=0

ap_pass_brigade : include/util_filter.h line=312 column=26
a
p_pass_brigade(r : modules/http/http_filters.c line=1030 column=56
r
-> : enter=0, leave=0
-
>output_filters : include/httpd.h line=990 column=25
o
utput_filters,  bb : modules/http/http_filters.c line=1034 column=25
b
b);
1143
1144    return : pass=0
r
eturn DONE;
1145}
1146
1147typedef struct header_filter_ctx {
1148    int headers_sent;
1149} header_filter_ctx;
1150
1151AP_CORE_DECLARE_NONSTD(apr_status_t) ap_http_header_filter : call=0
a
p_http_header_filter(ap_filter_t *f,
1152                                                           apr_bucket_brigade *b)
1153{
1154    request_rec *r = f : modules/http/http_filters.c line=1151 column=73
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
;
1155    conn_rec *c = r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection;
1156    const char *clheader;
1157    const char *protocol;
1158    apr_bucket *e;
1159    apr_bucket_brigade *b2;
1160    header_struct h;
1161    header_filter_ctx *ctx = f : modules/http/http_filters.c line=1151 column=73
f
-> : enter=0, leave=0
-
>ctx : include/util_filter.h line=268 column=11
c
tx;
1162    const char *ctype;
1163    ap_bucket_error *eb = NULL;
1164
1165    AP_DEBUG_ASSERT(!r->main);
1166
1167    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>header_only : include/httpd.h line=808 column=9
h
eader_only) {
1168        if : true=0, false=0
i
f (! : true=0, false=0
!
ctx : modules/http/http_filters.c line=1161 column=24
c
tx) {
1169            ctx : modules/http/http_filters.c line=1161 column=24
c
tx = : pass=0
=
 f : modules/http/http_filters.c line=1151 column=73
f
-> : enter=0, leave=0
-
>ctx : include/util_filter.h line=268 column=11
c
tx = : enter=0, leave=0
=
 apr_pcalloc(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, sizeof(header_filter_ctx));
1170        }
1171        else if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=1161 column=24
c
tx-> : enter=0, leave=0
-
>headers_sent : modules/http/http_filters.c line=1148 column=9
h
eaders_sent) {
1172            apr_brigade_cleanup : enter=0, leave=0

apr_brigade_cleanup : /usr/include/apr-1/apr_buckets.h line=679 column=27
a
pr_brigade_cleanup(b : modules/http/http_filters.c line=1152 column=80
b
);
1173            return : pass=0
r
eturn OK;
1174        }
1175    }
1176
1177    for : true=0, false=0
f
or (e : modules/http/http_filters.c line=1158 column=17
e
 = : pass=0
=
 APR_BRIGADE_FIRST(b : modules/http/http_filters.c line=1152 column=80
b
);
1178         e : modules/http/http_filters.c line=1158 column=17
e
 != : true=0, false=0
!
= APR_BRIGADE_SENTINEL(b : modules/http/http_filters.c line=1152 column=80
b
);
1179         e : modules/http/http_filters.c line=1158 column=17
e
 = : pass=0
=
 APR_BUCKET_NEXT(e : modules/http/http_filters.c line=1158 column=17
e
))
1180    {
1181        if : true=0, false=0
i
f (AP_BUCKET_IS_ERROR(e : modules/http/http_filters.c line=1158 column=17
e
&& : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
eb : modules/http/http_filters.c line=1163 column=22
e
b) {
1182            eb : modules/http/http_filters.c line=1163 column=22
e
= : pass=0
=
 e : modules/http/http_filters.c line=1158 column=17
e
-> : enter=0, leave=0
-
>data : /usr/include/apr-1/apr_buckets.h line=244 column=11 data;
1183            continue : pass=0
c
ontinue;
1184        }
1185        /*
1186         * If we see an EOC bucket it is a signal that we should get out
1187         * of the way doing nothing.
1188         */
1189        if : true=0, false=0
i
f (AP_BUCKET_IS_EOC(e : modules/http/http_filters.c line=1158 column=17
e
)) {
1190            ap_remove_output_filter : enter=0, leave=0

ap_remove_output_filter : include/util_filter.h line=469 column=18
a
p_remove_output_filter(f : modules/http/http_filters.c line=1151 column=73
f
);
1191            return : pass=0
r
eturn ap_pass_brigade : enter=0, leave=0

ap_pass_brigade : include/util_filter.h line=312 column=26
a
p_pass_brigade(f : modules/http/http_filters.c line=1151 column=73
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext, b : modules/http/http_filters.c line=1152 column=80
b
);
1192        }
1193    }
1194    if : true=0, false=0
i
f (eb : modules/http/http_filters.c line=1163 column=22
e
b) {
1195        int status;
1196
1197        status : modules/http/http_filters.c line=1195 column=13
s
tatus = : pass=0
=
 eb : modules/http/http_filters.c line=1163 column=22
e
b-> : enter=0, leave=0
-
>status : include/http_protocol.h line=634 column=9
s
tatus;
1198        apr_brigade_cleanup : enter=0, leave=0

apr_brigade_cleanup : /usr/include/apr-1/apr_buckets.h line=679 column=27
a
pr_brigade_cleanup(b : modules/http/http_filters.c line=1152 column=80
b
);
1199        ap_die : enter=0, leave=0

ap_die : include/http_request.h line=250 column=18
a
p_die(status : modules/http/http_filters.c line=1195 column=13
s
tatus, r : modules/http/http_filters.c line=1154 column=18
r
);
1200        return : pass=0
r
eturn AP_FILTER_ERROR;
1201    }
1202
1203    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>assbackwards : include/httpd.h line=801 column=9
a
ssbackwards) {
1204        r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>sent_bodyct : include/httpd.h line=860 column=15
s
ent_bodyct = : enter=0, leave=0
=
 1;
1205        ap_remove_output_filter : enter=0, leave=0

ap_remove_output_filter : include/util_filter.h line=469 column=18
a
p_remove_output_filter(f : modules/http/http_filters.c line=1151 column=73
f
);
1206        return : pass=0
r
eturn ap_pass_brigade : enter=0, leave=0

ap_pass_brigade : include/util_filter.h line=312 column=26
a
p_pass_brigade(f : modules/http/http_filters.c line=1151 column=73
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext, b : modules/http/http_filters.c line=1152 column=80
b
);
1207    }
1208
1209    /*
1210     * Now that we are ready to send a response, we need to combine the two
1211     * header field tables into a single table.  If we don't do this, our
1212     * later attempts to set or unset a given fieldname might be bypassed.
1213     */
1214    if : true=0, false=0
i
f (! : true=0, false=0
!
apr_is_empty_table : enter=0, leave=0

apr_is_empty_table : /usr/include/apr-1/apr_tables.h line=95 column=18
a
pr_is_empty_table(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>err_headers_out : include/httpd.h line=906 column=18
e
rr_headers_out)) {
1215        r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out = : enter=0, leave=0
=
 apr_table_overlay : enter=0, leave=0

apr_table_overlay : /usr/include/apr-1/apr_tables.h line=346 column=28
a
pr_table_overlay(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>err_headers_out : include/httpd.h line=906 column=18
e
rr_headers_out,
1216                                           r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out);
1217    }
1218
1219    /*
1220     * Remove the 'Vary' header field if the client can't handle it.
1221     * Since this will have nasty effects on HTTP/1.1 caches, force
1222     * the response into HTTP/1.0 mode.
1223     *
1224     * Note: the force-response-1.0 should come before the call to
1225     *       basic_http_header_check()
1226     */
1227    if : true=0, false=0
i
f (apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>subprocess_env : include/httpd.h line=908 column=18
s
ubprocess_env, "force-no-vary") != : true=0, false=0
!
= NULL) {
1228        apr_table_unset : enter=0, leave=0

apr_table_unset : /usr/include/apr-1/apr_tables.h line=290 column=19
a
pr_table_unset(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Vary");
1229        r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>proto_num : include/httpd.h line=812 column=9
p
roto_num = : enter=0, leave=0
=
 HTTP_VERSION(1,0);
1230        apr_table_set : enter=0, leave=0

apr_table_set : /usr/include/apr-1/apr_tables.h line=269 column=19
a
pr_table_set(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>subprocess_env : include/httpd.h line=908 column=18
s
ubprocess_env, "force-response-1.0", "1");
1231    }
1232    else {
1233        fixup_vary : enter=0, leave=0

fixup_vary : modules/http/http_filters.c line=781 column=13
f
ixup_vary(r : modules/http/http_filters.c line=1154 column=18
r
);
1234    }
1235
1236    /*
1237     * Now remove any ETag response header field if earlier processing
1238     * says so (such as a 'FileETag None' directive).
1239     */
1240    if : true=0, false=0
i
f (apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>notes : include/httpd.h line=910 column=18
n
otes, "no-etag") != : true=0, false=0
!
= NULL) {
1241        apr_table_unset : enter=0, leave=0

apr_table_unset : /usr/include/apr-1/apr_tables.h line=290 column=19
a
pr_table_unset(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "ETag");
1242    }
1243
1244    /* determine the protocol and whether we should use keepalives. */
1245    basic_http_header_check : enter=0, leave=0

basic_http_header_check : modules/http/http_filters.c line=878 column=13
b
asic_http_header_check(r : modules/http/http_filters.c line=1154 column=18
r
, &protocol : modules/http/http_filters.c line=1157 column=17
p
rotocol);
1246    ap_set_keepalive : enter=0, leave=0

ap_set_keepalive : include/http_protocol.h line=118 column=17
a
p_set_keepalive(r : modules/http/http_filters.c line=1154 column=18
r
);
1247
1248    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>chunked : include/httpd.h line=869 column=9
c
hunked) {
1249        apr_table_mergen : enter=0, leave=0

apr_table_mergen : /usr/include/apr-1/apr_tables.h line=311 column=19
a
pr_table_mergen(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Transfer-Encoding", "chunked");
1250        apr_table_unset : enter=0, leave=0

apr_table_unset : /usr/include/apr-1/apr_tables.h line=290 column=19
a
pr_table_unset(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Content-Length");
1251    }
1252
1253    ctype : modules/http/http_filters.c line=1162 column=17
c
type = : pass=0
=
 ap_make_content_type : enter=0, leave=0

ap_make_content_type : include/http_protocol.h line=140 column=26
a
p_make_content_type(r : modules/http/http_filters.c line=1154 column=18
r
r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>content_type : include/httpd.h line=917 column=17
c
ontent_type);
1254    if : true=0, false=0
i
f (strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(ctype : modules/http/http_filters.c line=1162 column=17
c
type, NO_CONTENT_TYPE)) {
1255        apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Content-Type", ctype : modules/http/http_filters.c line=1162 column=17
c
type);
1256    }
1257
1258    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>content_encoding : include/httpd.h line=922 column=17
c
ontent_encoding) {
1259        apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Content-Encoding",
1260                       r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>content_encoding : include/httpd.h line=922 column=17
c
ontent_encoding);
1261    }
1262
1263    if : true=0, false=0
i
f (! : true=0, false=0
!
apr_is_empty_array : enter=0, leave=0

apr_is_empty_array : /usr/include/apr-1/apr_tables.h line=102 column=18
a
pr_is_empty_array(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>content_languages : include/httpd.h line=924 column=25
c
ontent_languages)) {
1264        int i;
1265        char *token;
1266        char **languages = (char **)(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>content_languages : include/httpd.h line=924 column=25
c
ontent_languages-> : enter=0, leave=0
-
>elts : /usr/include/apr-1/apr_tables.h line=62 column=11 elts);
1267        const char *field = apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Content-Language");
1268
1269        while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0

field : modules/http/http_filters.c line=1267 column=21
fTF
ield && : true=0, false=0
&
& (token : modules/http/http_filters.c line=1265 column=15
t
oken = : pass=0
=
 ap_get_list_item : enter=0, leave=0

ap_get_list_item : include/httpd.h line=1401 column=20
a
p_get_list_item(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, &field : modules/http/http_filters.c line=1267 column=21
f
ield)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= NULL) {
1270            for : true=0, false=0
f
or (i : modules/http/http_filters.c line=1264 column=13
i
 = : pass=0
=
 0; i : modules/http/http_filters.c line=1264 column=13
i
 < : true=0, false=0
<
 r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>content_languages : include/httpd.h line=924 column=25
c
ontent_languages-> : enter=0, leave=0
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts; ++ : pass=0
+
+i : modules/http/http_filters.c line=1264 column=13
i
) {
1271                if : true=0, false=0
i
f (! : true=0, false=0
!
strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(token : modules/http/http_filters.c line=1265 column=15
t
oken, languages : modules/http/http_filters.c line=1266 column=16
l
anguages[] : enter=0, leave=0
[
i : modules/http/http_filters.c line=1264 column=13
i
]))
1272                    break : pass=0
b
reak;
1273            }
1274            if : true=0, false=0
i
f (i : modules/http/http_filters.c line=1264 column=13
i
 == : true=0, false=0
=
r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>content_languages : include/httpd.h line=924 column=25
c
ontent_languages-> : enter=0, leave=0
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts) {
1275                *((char **) apr_array_push : enter=0, leave=0

apr_array_push : /usr/include/apr-1/apr_tables.h line=121 column=21
a
pr_array_push(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>content_languages : include/httpd.h line=924 column=25
c
ontent_languages)) = : enter=0, leave=0
=
 token : modules/http/http_filters.c line=1265 column=15
t
oken;
1276            }
1277        }
1278
1279        field : modules/http/http_filters.c line=1267 column=21
f
ield = : pass=0
=
 apr_array_pstrcat : enter=0, leave=0

apr_array_pstrcat : /usr/include/apr-1/apr_tables.h line=211 column=21
a
pr_array_pstrcat(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>content_languages : include/httpd.h line=924 column=25
c
ontent_languages, ',');
1280        apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Content-Language", field : modules/http/http_filters.c line=1267 column=21
f
ield);
1281    }
1282
1283    /*
1284     * Control cachability for non-cachable responses if not already set by
1285     * some other part of the server configuration.
1286     */
1287    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1154 column=18
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>no_cache : include/httpd.h line=935 column=9
n
o_cache && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Expires")) {
1288        char *date = apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, APR_RFC822_DATE_LEN);
1289        ap_recent_rfc822_date : enter=0, leave=0

ap_recent_rfc822_date : include/util_time.h line=84 column=26
a
p_recent_rfc822_date(date : modules/http/http_filters.c line=1288 column=15
d
ate, r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>request_time : include/httpd.h line=817 column=16
r
equest_time);
1290        apr_table_addn : enter=0, leave=0

apr_table_addn : /usr/include/apr-1/apr_tables.h line=336 column=19
a
pr_table_addn(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Expires", date : modules/http/http_filters.c line=1288 column=15
d
ate);
1291    }
1292
1293    /* This is a hack, but I can't find anyway around it.  The idea is that
1294     * we don't want to send out 0 Content-Lengths if it is a head request.
1295     * This happens when modules try to outsmart the server, and return
1296     * if they see a HEAD request.  Apache 1.3 handlers were supposed to
1297     * just return in that situation, and the core handled the HEAD.  In
1298     * 2.0, if a handler returns, then the core sends an EOS bucket down
1299     * the filter stack, and the content-length filter computes a C-L of
1300     * zero and that gets put in the headers, and we end up sending a
1301     * zero C-L to the client.  We can't just remove the C-L filter,
1302     * because well behaved 2.0 handlers will send their data down the stack,
1303     * and we will compute a real C-L for the head request. RBB
1304     */
1305    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1154 column=18
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>header_only : include/httpd.h line=808 column=9
h
eader_only
1306        && : true=0, false=0
&
& (clheader : modules/http/http_filters.c line=1156 column=17
c
lheader = : pass=0
MC/DC independently affect : true=0, false=0
=TF
 apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Content-Length"))
1307        && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(clheader : modules/http/http_filters.c line=1156 column=17
c
lheader, "0")) {
1308        apr_table_unset : enter=0, leave=0

apr_table_unset : /usr/include/apr-1/apr_tables.h line=290 column=19
a
pr_table_unset(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Content-Length");
1309    }
1310
1311    b2 : modules/http/http_filters.c line=1159 column=25
b
= : pass=0
=
 apr_brigade_create : enter=0, leave=0

apr_brigade_create : /usr/include/apr-1/apr_buckets.h line=658 column=35
a
pr_brigade_create(r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, c : modules/http/http_filters.c line=1155 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
1312    basic_http_header : enter=0, leave=0

basic_http_header : modules/http/http_filters.c line=912 column=13
b
asic_http_header(r : modules/http/http_filters.c line=1154 column=18
r
b2 : modules/http/http_filters.c line=1159 column=25
b
2, protocol : modules/http/http_filters.c line=1157 column=17
p
rotocol);
1313
1314    h : modules/http/http_filters.c line=1160 column=19
h
.pool : modules/http/http_filters.c line=671 column=17
p
ool = : pass=0
=
 r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool;
1315    h : modules/http/http_filters.c line=1160 column=19
h
.bb : modules/http/http_filters.c line=672 column=25
b
= : pass=0
=
 b2 : modules/http/http_filters.c line=1159 column=25
b
2;
1316
1317    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus == : true=0, false=0
=
= HTTP_NOT_MODIFIED) {
1318        apr_table_do : enter=0, leave=0

apr_table_do : /usr/include/apr-1/apr_tables.h line=382 column=25
a
pr_table_do((int (*)(void *, const char *, const char *)) form_header_field : modules/http/http_filters.c line=680 column=12
f
orm_header_field,
1319                     (void *) &h : modules/http/http_filters.c line=1160 column=19
h
r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out,
1320                     "Connection",
1321                     "Keep-Alive",
1322                     "ETag",
1323                     "Content-Location",
1324                     "Expires",
1325                     "Cache-Control",
1326                     "Vary",
1327                     "Warning",
1328                     "WWW-Authenticate",
1329                     "Proxy-Authenticate",
1330                     "Set-Cookie",
1331                     "Set-Cookie2",
1332                     NULL);
1333    }
1334    else {
1335        send_all_header_fields : enter=0, leave=0

send_all_header_fields : modules/http/http_filters.c line=804 column=21
s
end_all_header_fields(&h : modules/http/http_filters.c line=1160 column=19
h
r : modules/http/http_filters.c line=1154 column=18
r
);
1336    }
1337
1338    terminate_header : enter=0, leave=0

terminate_header : modules/http/http_filters.c line=1011 column=13
t
erminate_header(b2 : modules/http/http_filters.c line=1159 column=25
b
2);
1339
1340    ap_pass_brigade : enter=0, leave=0

ap_pass_brigade : include/util_filter.h line=312 column=26
a
p_pass_brigade(f : modules/http/http_filters.c line=1151 column=73
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext, b2 : modules/http/http_filters.c line=1159 column=25
b
2);
1341
1342    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>header_only : include/httpd.h line=808 column=9
h
eader_only) {
1343        apr_brigade_cleanup : enter=0, leave=0

apr_brigade_cleanup : /usr/include/apr-1/apr_buckets.h line=679 column=27
a
pr_brigade_cleanup(b : modules/http/http_filters.c line=1152 column=80
b
);
1344        ctx : modules/http/http_filters.c line=1161 column=24
c
tx-> : enter=0, leave=0
-
>headers_sent : modules/http/http_filters.c line=1148 column=9
h
eaders_sent = : enter=0, leave=0
=
 1;
1345        return : pass=0
r
eturn OK;
1346    }
1347
1348    r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>sent_bodyct : include/httpd.h line=860 column=15
s
ent_bodyct = : enter=0, leave=0
=
 1;         /* Whatever follows is real body stuff... */
1349
1350    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>chunked : include/httpd.h line=869 column=9
c
hunked) {
1351        /* We can't add this filter until we have already sent the headers.
1352         * If we add it before this point, then the headers will be chunked
1353         * as well, and that is just wrong.
1354         */
1355        ap_add_output_filter : enter=0, leave=0

ap_add_output_filter : include/util_filter.h line=432 column=27
a
p_add_output_filter("CHUNK", NULL, r : modules/http/http_filters.c line=1154 column=18
r
r : modules/http/http_filters.c line=1154 column=18
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection);
1356    }
1357
1358    /* Don't remove this filter until after we have added the CHUNK filter.
1359     * Otherwise, f->next won't be the CHUNK filter and thus the first
1360     * brigade won't be chunked properly.
1361     */
1362    ap_remove_output_filter : enter=0, leave=0

ap_remove_output_filter : include/util_filter.h line=469 column=18
a
p_remove_output_filter(f : modules/http/http_filters.c line=1151 column=73
f
);
1363    return : pass=0
r
eturn ap_pass_brigade : enter=0, leave=0

ap_pass_brigade : include/util_filter.h line=312 column=26
a
p_pass_brigade(f : modules/http/http_filters.c line=1151 column=73
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext, b : modules/http/http_filters.c line=1152 column=80
b
);
1364}
1365
1366/*
1367 * Map specific APR codes returned by the filter stack to HTTP error
1368 * codes, or the default status code provided. Use it as follows:
1369 *
1370 * return ap_map_http_request_error(rv, HTTP_BAD_REQUEST);
1371 *
1372 * If the filter has already handled the error, AP_FILTER_ERROR will
1373 * be returned, which is cleanly passed through.
1374 *
1375 * These mappings imply that the filter stack is reading from the
1376 * downstream client, the proxy will map these codes differently.
1377 */
1378AP_DECLARE(int) ap_map_http_request_error : call=0
a
p_map_http_request_error(apr_status_t rv, int status)
1379{
1380    switch : pass=0
s
witch (rv : modules/http/http_filters.c line=1378 column=56
r
v) {
1381    case : true=0, false=0
c
ase AP_FILTER_ERROR: {
1382        return : pass=0
r
eturn AP_FILTER_ERROR;
1383    }
1384    case : true=0, false=0
c
ase APR_ENOSPC: {
1385        return : pass=0
r
eturn HTTP_REQUEST_ENTITY_TOO_LARGE;
1386    }
1387    case : true=0, false=0
c
ase APR_ENOTIMPL: {
1388        return : pass=0
r
eturn HTTP_NOT_IMPLEMENTED;
1389    }
1390    case : true=0, false=0
c
ase APR_ETIMEDOUT: {
1391        return : pass=0
r
eturn HTTP_REQUEST_TIME_OUT;
1392    }
1393    default : true=0, false=0
d
efault: {
1394        return : pass=0
r
eturn status : modules/http/http_filters.c line=1378 column=64
s
tatus;
1395    }
1396    }
1397}
1398
1399/* In HTTP/1.1, any method can have a body.  However, most GET handlers
1400 * wouldn't know what to do with a request body if they received one.
1401 * This helper routine tests for and reads any message body in the request,
1402 * simply discarding whatever it receives.  We need to do this because
1403 * failing to read the request body would cause it to be interpreted
1404 * as the next request on a persistent connection.
1405 *
1406 * Since we return an error status if the request is malformed, this
1407 * routine should be called at the beginning of a no-body handler, e.g.,
1408 *
1409 *    if ((retval = ap_discard_request_body(r)) != OK) {
1410 *        return retval;
1411 *    }
1412 */
1413AP_DECLARE(int) ap_discard_request_body : call=0
a
p_discard_request_body(request_rec *r)
1414{
1415    apr_bucket_brigade *bb;
1416    int seen_eos;
1417    apr_status_t rv;
1418
1419    /* Sometimes we'll get in a state where the input handling has
1420     * detected an error where we want to drop the connection, so if
1421     * that's the case, don't read the data as that is what we're trying
1422     * to avoid.
1423     *
1424     * This function is also a no-op on a subrequest.
1425     */
1426    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1413 column=54
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>main : include/httpd.h line=793 column=18
m
ain || : true=0, false=0
|
r : modules/http/http_filters.c line=1413 column=54
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection-> : enter=0, leave=0
-
>keepalive : include/httpd.h line=1074 column=25
k
eepalive == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
AP_CONN_CLOSE : include/httpd.h line=1038 column=5
A
P_CONN_CLOSE || : true=0, false=0
|
|
1427        ap_status_drops_connection(r : modules/http/http_filters.c line=1413 column=54
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus)) {
1428        return : pass=0
r
eturn OK;
1429    }
1430
1431    bb : modules/http/http_filters.c line=1415 column=25
b
= : pass=0
=
 apr_brigade_create : enter=0, leave=0

apr_brigade_create : /usr/include/apr-1/apr_buckets.h line=658 column=35
a
pr_brigade_create(r : modules/http/http_filters.c line=1413 column=54
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, r : modules/http/http_filters.c line=1413 column=54
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
1432    seen_eos : modules/http/http_filters.c line=1416 column=9
s
een_eos = : pass=0
=
 0;
1433    do {
1434        apr_bucket *bucket;
1435
1436        rv : modules/http/http_filters.c line=1417 column=18
r
= : pass=0
=
 ap_get_brigade : enter=0, leave=0

ap_get_brigade : include/util_filter.h line=298 column=26
a
p_get_brigade(r : modules/http/http_filters.c line=1413 column=54
r
-> : enter=0, leave=0
-
>input_filters : include/httpd.h line=992 column=25
i
nput_filters, bb : modules/http/http_filters.c line=1415 column=25
b
b, AP_MODE_READBYTES : include/util_filter.h line=52 column=5
A
P_MODE_READBYTES,
1437                            APR_BLOCK_READ : /usr/include/apr-1/apr_buckets.h line=58 column=5 APR_BLOCK_READ, HUGE_STRING_LEN);
1438
1439        if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=1417 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
1440            apr_brigade_destroy : enter=0, leave=0

apr_brigade_destroy : /usr/include/apr-1/apr_buckets.h line=666 column=27
a
pr_brigade_destroy(bb : modules/http/http_filters.c line=1415 column=25
b
b);
1441            return : pass=0
r
eturn ap_map_http_request_error : enter=0, leave=0

ap_map_http_request_error : modules/http/http_filters.c line=1378 column=17
a
p_map_http_request_error(rv : modules/http/http_filters.c line=1417 column=18
r
v, HTTP_BAD_REQUEST);
1442        }
1443
1444        for : true=0, false=0
f
or (bucket : modules/http/http_filters.c line=1434 column=21
b
ucket = : pass=0
=
 APR_BRIGADE_FIRST(bb : modules/http/http_filters.c line=1415 column=25
b
b);
1445             bucket : modules/http/http_filters.c line=1434 column=21
b
ucket != : true=0, false=0
!
= APR_BRIGADE_SENTINEL(bb : modules/http/http_filters.c line=1415 column=25
b
b);
1446             bucket : modules/http/http_filters.c line=1434 column=21
b
ucket = : pass=0
=
 APR_BUCKET_NEXT(bucket : modules/http/http_filters.c line=1434 column=21
b
ucket))
1447        {
1448            const char *data;
1449            apr_size_t len;
1450
1451            if : true=0, false=0
i
f (APR_BUCKET_IS_EOS(bucket : modules/http/http_filters.c line=1434 column=21
b
ucket)) {
1452                seen_eos : modules/http/http_filters.c line=1416 column=9
s
een_eos = : pass=0
=
 1;
1453                break : pass=0
b
reak;
1454            }
1455
1456            /* These are metadata buckets. */
1457            if : true=0, false=0
i
f (bucket : modules/http/http_filters.c line=1434 column=21
b
ucket-> : enter=0, leave=0
-
>length : /usr/include/apr-1/apr_buckets.h line=234 column=16 length == : true=0, false=0
=
= 0) {
1458                continue : pass=0
c
ontinue;
1459            }
1460
1461            /* We MUST read because in case we have an unknown-length
1462             * bucket or one that morphs, we want to exhaust it.
1463             */
1464            rv : modules/http/http_filters.c line=1417 column=18
r
= : pass=0
=
 apr_bucket_read(bucket : modules/http/http_filters.c line=1434 column=21
b
ucket, &data : modules/http/http_filters.c line=1448 column=25
d
ata, &len : modules/http/http_filters.c line=1449 column=24
l
en, APR_BLOCK_READ : /usr/include/apr-1/apr_buckets.h line=58 column=5 APR_BLOCK_READ);
1465            if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=1417 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
1466                apr_brigade_destroy : enter=0, leave=0

apr_brigade_destroy : /usr/include/apr-1/apr_buckets.h line=666 column=27
a
pr_brigade_destroy(bb : modules/http/http_filters.c line=1415 column=25
b
b);
1467                return : pass=0
r
eturn HTTP_BAD_REQUEST;
1468            }
1469        }
1470        apr_brigade_cleanup : enter=0, leave=0

apr_brigade_cleanup : /usr/include/apr-1/apr_buckets.h line=679 column=27
a
pr_brigade_cleanup(bb : modules/http/http_filters.c line=1415 column=25
b
b);
1471    } while : true=0, false=0
w
hile (! : true=0, false=0
!
seen_eos : modules/http/http_filters.c line=1416 column=9
s
een_eos);
1472
1473    return : pass=0
r
eturn OK;
1474}
1475
1476/* Here we deal with getting the request message body from the client.
1477 * Whether or not the request contains a body is signaled by the presence
1478 * of a non-zero Content-Length or by a Transfer-Encoding: chunked.
1479 *
1480 * Note that this is more complicated than it was in Apache 1.1 and prior
1481 * versions, because chunked support means that the module does less.
1482 *
1483 * The proper procedure is this:
1484 *
1485 * 1. Call ap_setup_client_block() near the beginning of the request
1486 *    handler. This will set up all the necessary properties, and will
1487 *    return either OK, or an error code. If the latter, the module should
1488 *    return that error code. The second parameter selects the policy to
1489 *    apply if the request message indicates a body, and how a chunked
1490 *    transfer-coding should be interpreted. Choose one of
1491 *
1492 *    REQUEST_NO_BODY          Send 413 error if message has any body
1493 *    REQUEST_CHUNKED_ERROR    Send 411 error if body without Content-Length
1494 *    REQUEST_CHUNKED_DECHUNK  If chunked, remove the chunks for me.
1495 *    REQUEST_CHUNKED_PASS     If chunked, pass the chunk headers with body.
1496 *
1497 *    In order to use the last two options, the caller MUST provide a buffer
1498 *    large enough to hold a chunk-size line, including any extensions.
1499 *
1500 * 2. When you are ready to read a body (if any), call ap_should_client_block().
1501 *    This will tell the module whether or not to read input. If it is 0,
1502 *    the module should assume that there is no message body to read.
1503 *
1504 * 3. Finally, call ap_get_client_block in a loop. Pass it a buffer and its size.
1505 *    It will put data into the buffer (not necessarily a full buffer), and
1506 *    return the length of the input block. When it is done reading, it will
1507 *    return 0 if EOF, or -1 if there was an error.
1508 *    If an error occurs on input, we force an end to keepalive.
1509 *
1510 *    This step also sends a 100 Continue response to HTTP/1.1 clients if appropriate.
1511 */
1512
1513AP_DECLARE(int) ap_setup_client_block : call=0
a
p_setup_client_block(request_rec *r, int read_policy)
1514{
1515    const char *tenc = apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in, "Transfer-Encoding");
1516    const char *lenp = apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in, "Content-Length");
1517
1518    r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>read_body : include/httpd.h line=882 column=9
r
ead_body = : enter=0, leave=0
=
 read_policy : modules/http/http_filters.c line=1513 column=59
r
ead_policy;
1519    r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>read_chunked : include/httpd.h line=884 column=9
r
ead_chunked = : enter=0, leave=0
=
 0;
1520    r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining = : enter=0, leave=0
=
 0;
1521
1522    if : true=0, false=0
i
f (tenc : modules/http/http_filters.c line=1515 column=17
t
enc) {
1523        if : true=0, false=0
i
f (strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(tenc : modules/http/http_filters.c line=1515 column=17
t
enc, "chunked")) {
1524            ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, r : modules/http/http_filters.c line=1513 column=52
r
,
1525                          "Unknown Transfer-Encoding %s", tenc : modules/http/http_filters.c line=1515 column=17
t
enc);
1526            return : pass=0
r
eturn HTTP_NOT_IMPLEMENTED;
1527        }
1528        if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>read_body : include/httpd.h line=882 column=9
r
ead_body == : true=0, false=0
=
= REQUEST_CHUNKED_ERROR) {
1529            ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, r : modules/http/http_filters.c line=1513 column=52
r
,
1530                          "chunked Transfer-Encoding forbidden: %s", r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>uri : include/httpd.h line=946 column=11
u
ri);
1531            return : pass=0
r
eturn (lenp : modules/http/http_filters.c line=1516 column=17
l
enp) conditional operator : true=0, false=0
?
 HTTP_BAD_REQUEST : HTTP_LENGTH_REQUIRED;
1532        }
1533
1534        r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>read_chunked : include/httpd.h line=884 column=9
r
ead_chunked = : enter=0, leave=0
=
 1;
1535    }
1536    else if : true=0, false=0
i
f (lenp : modules/http/http_filters.c line=1516 column=17
l
enp) {
1537        char *endstr;
1538
1539        if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0
apr_strtoff : enter=0, leave=0

apr_strtoff : /usr/include/apr-1/apr_strings.h line=317 column=27
aTF
pr_strtoff(&r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining, lenp : modules/http/http_filters.c line=1516 column=17
l
enp, &endstr : modules/http/http_filters.c line=1537 column=15
e
ndstr, 10)
1540            || : true=0, false=0
|
MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
endstr : modules/http/http_filters.c line=1537 column=15
e
ndstr || : true=0, false=0
|
r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 0) {
1541            r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining = : enter=0, leave=0
=
 0;
1542            ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, r : modules/http/http_filters.c line=1513 column=52
r
,
1543                          "Invalid Content-Length");
1544            return : pass=0
r
eturn HTTP_BAD_REQUEST;
1545        }
1546    }
1547
1548    if : true=0, false=0
i
f ((r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>read_body : include/httpd.h line=882 column=9
r
ead_body == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= REQUEST_NO_BODY)
1549        && : true=0, false=0
&
& (r : modules/http/http_filters.c line=1513 column=52
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>read_chunked : include/httpd.h line=884 column=9
r
ead_chunked || : true=0, false=0
|
| (r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0))) {
1550        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, r : modules/http/http_filters.c line=1513 column=52
r
,
1551                      "%s with body is not allowed for %s", r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>method : include/httpd.h line=829 column=17
m
ethod, r : modules/http/http_filters.c line=1513 column=52
r
-> : enter=0, leave=0
-
>uri : include/httpd.h line=946 column=11
u
ri);
1552        return : pass=0
r
eturn HTTP_REQUEST_ENTITY_TOO_LARGE;
1553    }
1554
1555#ifdef AP_DEBUG
1556    {
1557        /* Make sure ap_getline() didn't leave any droppings. */
1558        core_request_config *req_cfg =
1559            (core_request_config *)ap_get_module_config(r->request_config,
1560                                                        &core_module);
1561        AP_DEBUG_ASSERT(APR_BRIGADE_EMPTY(req_cfg->bb));
1562    }
1563#endif
1564
1565    return : pass=0
r
eturn OK;
1566}
1567
1568AP_DECLARE(int) ap_should_client_block : call=0
a
p_should_client_block(request_rec *r)
1569{
1570    /* First check if we have already read the request body */
1571
1572    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1568 column=53
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>read_length : include/httpd.h line=878 column=15
r
ead_length || : true=0, false=0
|
| (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
r : modules/http/http_filters.c line=1568 column=53
r
-> : enter=0, leave=0
-
>read_chunked : include/httpd.h line=884 column=9
r
ead_chunked && : true=0, false=0
&
& (r : modules/http/http_filters.c line=1568 column=53
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining <= : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
= 0))) {
1573        return : pass=0
r
eturn 0;
1574    }
1575
1576    return : pass=0
r
eturn 1;
1577}
1578
1579/* get_client_block is called in a loop to get the request message body.
1580 * This is quite simple if the client includes a content-length
1581 * (the normal case), but gets messy if the body is chunked. Note that
1582 * r->remaining is used to maintain state across calls and that
1583 * r->read_length is the total number of bytes given to the caller
1584 * across all invocations.  It is messy because we have to be careful not
1585 * to read past the data provided by the client, since these reads block.
1586 * Returns 0 on End-of-body, -1 on error or premature chunk end.
1587 *
1588 */
1589AP_DECLARE(long) ap_get_client_block : call=0
a
p_get_client_block(request_rec *r, char *buffer,
1590                                     apr_size_t bufsiz)
1591{
1592    apr_status_t rv;
1593    apr_bucket_brigade *bb;
1594
1595    if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 0 || : true=0, false=0
|
| (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>read_chunked : include/httpd.h line=884 column=9
r
ead_chunked && : true=0, false=0
&
r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 0)) {
1596        return : pass=0
r
eturn 0;
1597    }
1598
1599    bb : modules/http/http_filters.c line=1593 column=25
b
= : pass=0
=
 apr_brigade_create : enter=0, leave=0

apr_brigade_create : /usr/include/apr-1/apr_buckets.h line=658 column=35
a
pr_brigade_create(r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
1600    if : true=0, false=0
i
f (bb : modules/http/http_filters.c line=1593 column=25
b
== : true=0, false=0
=
= NULL) {
1601        r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection-> : enter=0, leave=0
-
>keepalive : include/httpd.h line=1074 column=25
k
eepalive = : enter=0, leave=0
=
 AP_CONN_CLOSE : include/httpd.h line=1038 column=5
A
P_CONN_CLOSE;
1602        return : pass=0
r
eturn -1;
1603    }
1604
1605    rv : modules/http/http_filters.c line=1592 column=18
r
= : pass=0
=
 ap_get_brigade : enter=0, leave=0

ap_get_brigade : include/util_filter.h line=298 column=26
a
p_get_brigade(r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>input_filters : include/httpd.h line=992 column=25
i
nput_filters, bb : modules/http/http_filters.c line=1593 column=25
b
b, AP_MODE_READBYTES : include/util_filter.h line=52 column=5
A
P_MODE_READBYTES,
1606                        APR_BLOCK_READ : /usr/include/apr-1/apr_buckets.h line=58 column=5 APR_BLOCK_READ, bufsiz : modules/http/http_filters.c line=1590 column=49
b
ufsiz);
1607
1608    /* We lose the failure code here.  This is why ap_get_client_block should
1609     * not be used.
1610     */
1611    if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=1592 column=18
r
== : true=0, false=0
=
= AP_FILTER_ERROR) {
1612        /* AP_FILTER_ERROR means a filter has responded already,
1613         * we are DONE.
1614         */
1615        apr_brigade_destroy : enter=0, leave=0

apr_brigade_destroy : /usr/include/apr-1/apr_buckets.h line=666 column=27
a
pr_brigade_destroy(bb : modules/http/http_filters.c line=1593 column=25
b
b);
1616        return : pass=0
r
eturn -1;
1617    }
1618    if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=1592 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
1619        /* if we actually fail here, we want to just return and
1620         * stop trying to read data from the client.
1621         */
1622        r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection-> : enter=0, leave=0
-
>keepalive : include/httpd.h line=1074 column=25
k
eepalive = : enter=0, leave=0
=
 AP_CONN_CLOSE : include/httpd.h line=1038 column=5
A
P_CONN_CLOSE;
1623        apr_brigade_destroy : enter=0, leave=0

apr_brigade_destroy : /usr/include/apr-1/apr_buckets.h line=666 column=27
a
pr_brigade_destroy(bb : modules/http/http_filters.c line=1593 column=25
b
b);
1624        return : pass=0
r
eturn -1;
1625    }
1626
1627    /* If this fails, it means that a filter is written incorrectly and that
1628     * it needs to learn how to properly handle APR_BLOCK_READ requests by
1629     * returning data when requested.
1630     */
1631    AP_DEBUG_ASSERT(!APR_BRIGADE_EMPTY(bb));
1632
1633    /* Check to see if EOS in the brigade.
1634     *
1635     * If so, we have to leave a nugget for the *next* ap_get_client_block
1636     * call to return 0.
1637     */
1638    if : true=0, false=0
i
f (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb : modules/http/http_filters.c line=1593 column=25
b
b))) {
1639        if : true=0, false=0
i
f (r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>read_chunked : include/httpd.h line=884 column=9
r
ead_chunked) {
1640            r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining = : enter=0, leave=0
=
 -1;
1641        }
1642        else {
1643            r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>remaining : include/httpd.h line=876 column=15
r
emaining = : enter=0, leave=0
=
 0;
1644        }
1645    }
1646
1647    rv : modules/http/http_filters.c line=1592 column=18
r
= : pass=0
=
 apr_brigade_flatten : enter=0, leave=0

apr_brigade_flatten : /usr/include/apr-1/apr_buckets.h line=747 column=27
a
pr_brigade_flatten(bb : modules/http/http_filters.c line=1593 column=25
b
b, buffer : modules/http/http_filters.c line=1589 column=60
b
uffer, &bufsiz : modules/http/http_filters.c line=1590 column=49
b
ufsiz);
1648    if : true=0, false=0
i
f (rv : modules/http/http_filters.c line=1592 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
1649        apr_brigade_destroy : enter=0, leave=0

apr_brigade_destroy : /usr/include/apr-1/apr_buckets.h line=666 column=27
a
pr_brigade_destroy(bb : modules/http/http_filters.c line=1593 column=25
b
b);
1650        return : pass=0
r
eturn -1;
1651    }
1652
1653    /* XXX yank me? */
1654    r : modules/http/http_filters.c line=1589 column=51
r
-> : enter=0, leave=0
-
>read_length : include/httpd.h line=878 column=15
r
ead_length += : enter=0, leave=0
+
bufsiz : modules/http/http_filters.c line=1590 column=49
b
ufsiz;
1655
1656    apr_brigade_destroy : enter=0, leave=0

apr_brigade_destroy : /usr/include/apr-1/apr_buckets.h line=666 column=27
a
pr_brigade_destroy(bb : modules/http/http_filters.c line=1593 column=25
b
b);
1657    return : pass=0
r
eturn bufsiz : modules/http/http_filters.c line=1590 column=49
b
ufsiz;
1658}
1659
1660/* Context struct for ap_http_outerror_filter */
1661typedef struct {
1662    int seen_eoc;
1663} outerror_filter_ctx_t;
1664
1665/* Filter to handle any error buckets on output */
1666apr_status_t ap_http_outerror_filter : call=0
a
p_http_outerror_filter(ap_filter_t *f,
1667                                     apr_bucket_brigade *b)
1668{
1669    request_rec *r = f : modules/http/http_filters.c line=1666 column=51
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
;
1670    outerror_filter_ctx_t *ctx = (outerror_filter_ctx_t *)(f : modules/http/http_filters.c line=1666 column=51
f
-> : enter=0, leave=0
-
>ctx : include/util_filter.h line=268 column=11
c
tx);
1671    apr_bucket *e;
1672
1673    /* Create context if none is present */
1674    if : true=0, false=0
i
f (! : true=0, false=0
!
ctx : modules/http/http_filters.c line=1670 column=28
c
tx) {
1675        ctx : modules/http/http_filters.c line=1670 column=28
c
tx = : pass=0
=
 apr_pcalloc(r : modules/http/http_filters.c line=1669 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, sizeof(outerror_filter_ctx_t));
1676        f : modules/http/http_filters.c line=1666 column=51
f
-> : enter=0, leave=0
-
>ctx : include/util_filter.h line=268 column=11
c
tx = : enter=0, leave=0
=
 ctx : modules/http/http_filters.c line=1670 column=28
c
tx;
1677    }
1678    for : true=0, false=0
f
or (e : modules/http/http_filters.c line=1671 column=17
e
 = : pass=0
=
 APR_BRIGADE_FIRST(b : modules/http/http_filters.c line=1667 column=58
b
);
1679         e : modules/http/http_filters.c line=1671 column=17
e
 != : true=0, false=0
!
= APR_BRIGADE_SENTINEL(b : modules/http/http_filters.c line=1667 column=58
b
);
1680         e : modules/http/http_filters.c line=1671 column=17
e
 = : pass=0
=
 APR_BUCKET_NEXT(e : modules/http/http_filters.c line=1671 column=17
e
))
1681    {
1682        if : true=0, false=0
i
f (AP_BUCKET_IS_ERROR(e : modules/http/http_filters.c line=1671 column=17
e
)) {
1683            /*
1684             * Start of error handling state tree. Just one condition
1685             * right now :)
1686             */
1687            if : true=0, false=0
i
f (((ap_bucket_error *)(e : modules/http/http_filters.c line=1671 column=17
e
-> : enter=0, leave=0
-
>data : /usr/include/apr-1/apr_buckets.h line=244 column=11 data))-> : enter=0, leave=0
-
>status : include/http_protocol.h line=634 column=9
s
tatus == : true=0, false=0
=
= HTTP_BAD_GATEWAY) {
1688                /* stream aborted and we have not ended it yet */
1689                r : modules/http/http_filters.c line=1669 column=18
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection-> : enter=0, leave=0
-
>keepalive : include/httpd.h line=1074 column=25
k
eepalive = : enter=0, leave=0
=
 AP_CONN_CLOSE : include/httpd.h line=1038 column=5
A
P_CONN_CLOSE;
1690            }
1691            continue : pass=0
c
ontinue;
1692        }
1693        /* Detect EOC buckets and memorize this in the context. */
1694        if : true=0, false=0
i
f (AP_BUCKET_IS_EOC(e : modules/http/http_filters.c line=1671 column=17
e
)) {
1695            ctx : modules/http/http_filters.c line=1670 column=28
c
tx-> : enter=0, leave=0
-
>seen_eoc : modules/http/http_filters.c line=1662 column=9
s
een_eoc = : enter=0, leave=0
=
 1;
1696        }
1697    }
1698    /*
1699     * Remove all data buckets that are in a brigade after an EOC bucket
1700     * was seen, as an EOC bucket tells us that no (further) resource
1701     * and protocol data should go out to the client. OTOH meta buckets
1702     * are still welcome as they might trigger needed actions down in
1703     * the chain (e.g. in network filters like SSL).
1704     * Remark 1: It is needed to dump ALL data buckets in the brigade
1705     *           since an filter in between might have inserted data
1706     *           buckets BEFORE the EOC bucket sent by the original
1707     *           sender and we do NOT want this data to be sent.
1708     * Remark 2: Dumping all data buckets here does not necessarily mean
1709     *           that no further data is send to the client as:
1710     *           1. Network filters like SSL can still be triggered via
1711     *              meta buckets to talk with the client e.g. for a
1712     *              clean shutdown.
1713     *           2. There could be still data that was buffered before
1714     *              down in the chain that gets flushed by a FLUSH or an
1715     *              EOS bucket.
1716     */
1717    if : true=0, false=0
i
f (ctx : modules/http/http_filters.c line=1670 column=28
c
tx-> : enter=0, leave=0
-
>seen_eoc : modules/http/http_filters.c line=1662 column=9
s
een_eoc) {
1718        for : true=0, false=0
f
or (e : modules/http/http_filters.c line=1671 column=17
e
 = : pass=0
=
 APR_BRIGADE_FIRST(b : modules/http/http_filters.c line=1667 column=58
b
);
1719             e : modules/http/http_filters.c line=1671 column=17
e
 != : true=0, false=0
!
= APR_BRIGADE_SENTINEL(b : modules/http/http_filters.c line=1667 column=58
b
);
1720             e : modules/http/http_filters.c line=1671 column=17
e
 = : pass=0
=
 APR_BUCKET_NEXT(e : modules/http/http_filters.c line=1671 column=17
e
))
1721        {
1722            if : true=0, false=0
i
f (! : true=0, false=0
!
APR_BUCKET_IS_METADATA(e : modules/http/http_filters.c line=1671 column=17
e
)) {
1723                APR_BUCKET_REMOVE(e : modules/http/http_filters.c line=1671 column=17
e
);
1724            }
1725        }
1726    }
1727
1728    return : pass=0
r
eturn ap_pass_brigade : enter=0, leave=0

ap_pass_brigade : include/util_filter.h line=312 column=26
a
p_pass_brigade(f : modules/http/http_filters.c line=1666 column=51
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext,  b : modules/http/http_filters.c line=1667 column=58
b
);
1729}
1730
1731[EOF]


Generated by expcov