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

 Index  Statistics  Last 
Directory./server
Filenameutil.c
ModifiedSun Aug 4 02:35:21 2013

Pass Half Fail Excluded Total
Function
7
9.86%
64
90.14%
0
0.00%
71
100%
Expressions
55
3.11%
1711
96.89%
0
0.00%
1766
100%
Conditions
1
0.22%
11
2.43%
440
97.35%
0
0.00%
452
100%
MC/DC
0
0.00%
224
100.00%
0
0.00%
224
100%
Branches

if
0
0.00%
7
3.57%
189
96.43%
0
0.00%
196
100%
for
1
4.17%
0
0.00%
23
95.83%
0
0.00%
24
100%
while
1
2.04%
1
2.04%
47
95.92%
0
0.00%
49
100%
case
0
0.00%
0
0.00%
51
100.00%
0
0.00%
51
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 * util.c: string utility things
19 *
20 * 3/21/93 Rob McCool
21 * 1995-96 Many changes by the Apache Software Foundation
22 *
23 */
24
25/* Debugging aid:
26 * #define DEBUG            to trace all cfg_open*()/cfg_closefile() calls
27 * #define DEBUG_CFG_LINES  to trace every line read from the config files
28 */
29
30#include "apr.h"
31#include "apr_strings.h"
32#include "apr_lib.h"
33
34#define APR_WANT_STDIO
35#define APR_WANT_STRFUNC
36#include "apr_want.h"
37
38#if APR_HAVE_UNISTD_H
39#include <unistd.h>
40#endif
41#if APR_HAVE_NETDB_H
42#include <netdb.h>              /* for gethostbyname() */
43#endif
44
45#define CORE_PRIVATE
46
47#include "ap_config.h"
48#include "apr_base64.h"
49#include "httpd.h"
50#include "http_main.h"
51#include "http_log.h"
52#include "http_protocol.h"
53#include "http_config.h"
54#include "util_ebcdic.h"
55
56#ifdef HAVE_PWD_H
57#include <pwd.h>
58#endif
59#ifdef HAVE_GRP_H
60#include <grp.h>
61#endif
62
63/* A bunch of functions in util.c scan strings looking for certain characters.
64 * To make that more efficient we encode a lookup table.  The test_char_table
65 * is generated automatically by gen_test_char.c.
66 */
67#include "test_char.h"
68
69/* we assume the folks using this ensure 0 <= c < 256... which means
70 * you need a cast to (unsigned char) first, you can't just plug a
71 * char in here and get it to work, because if char is signed then it
72 * will first be sign extended.
73 */
74#define TEST_CHAR(c, f)        (test_char_table : server/test_char.h line=9 column=28 test_char_table[] : enter=102, leave=102
[
(unsigned)(c)] & : pass=102
&
 (f))
75
76/* Win32/NetWare/OS2 need to check for both forward and back slashes
77 * in ap_getparents() and ap_escape_url.
78 */
79#ifdef CASE_BLIND_FILESYSTEM
80#define IS_SLASH(s) ((s == '/') || (s == '\\'))
81#else
82#define IS_SLASH(s) (s == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '/')
83#endif
84
85/* same as APR_SIZE_MAX which doesn't appear until APR 1.3 */
86#define UTIL_SIZE_MAX (~ : pass=0
~
((apr_size_t)0))
87
88/*
89 * Examine a field value (such as a media-/content-type) string and return
90 * it sans any parameters; e.g., strip off any ';charset=foo' and the like.
91 */
92AP_DECLARE(char *) ap_field_noparam : call=0
a
p_field_noparam(apr_pool_t *p, const char *intype)
93{
94    const char *semi;
95
96    if : true=0, false=0
i
f (intype : server/util.c line=92 column=64
i
ntype == : true=0, false=0
=
= NULL) return : pass=0
r
eturn NULL;
97
98    semi : server/util.c line=94 column=17
s
emi = : pass=0
=
 ap_strchr_c(intype : server/util.c line=92 column=64
i
ntype, ';');
99    if : true=0, false=0
i
f (semi : server/util.c line=94 column=17
s
emi == : true=0, false=0
=
= NULL) {
100        return : pass=0
r
eturn apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(p : server/util.c line=92 column=49
p
intype : server/util.c line=92 column=64
i
ntype);
101    }
102    else {
103        while : true=0, false=0
w
hile ((semi : server/util.c line=94 column=17
s
emi > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 intype : server/util.c line=92 column=64
i
ntype) && : true=0, false=0
&
& apr_isspace(semi : server/util.c line=94 column=17
s
emi[] : enter=0, leave=0
[
-1])) {
104            semi : server/util.c line=94 column=17
s
emi-- : pass=0
-
-;
105        }
106        return : pass=0
r
eturn apr_pstrndup : enter=0, leave=0

apr_pstrndup : /usr/include/apr-1/apr_strings.h line=121 column=21
a
pr_pstrndup(p : server/util.c line=92 column=49
p
intype : server/util.c line=92 column=64
i
ntype, semi : server/util.c line=94 column=17
s
emi - : pass=0
-
 intype : server/util.c line=92 column=64
i
ntype);
107    }
108}
109
110AP_DECLARE(char *) ap_ht_time : call=0
a
p_ht_time(apr_pool_t *p, apr_time_t t, const char *fmt,
111                              int gmt)
112{
113    apr_size_t retcode;
114    char ts[MAX_STRING_LEN];
115    char tf[MAX_STRING_LEN];
116    apr_time_exp_t xt;
117
118    if : true=0, false=0
i
f (gmt : server/util.c line=111 column=35
g
mt) {
119        const char *f;
120        char *strp;
121
122        apr_time_exp_gmt : enter=0, leave=0

apr_time_exp_gmt : /usr/include/apr-1/apr_time.h line=144 column=27
a
pr_time_exp_gmt(&xt : server/util.c line=116 column=20
x
t, t : server/util.c line=110 column=57
t
);
123        /* Convert %Z to "GMT" and %z to "+0000";
124         * on hosts that do not have a time zone string in struct tm,
125         * strftime must assume its argument is local time.
126         */
127        for : true=0, false=0
f
or(strp : server/util.c line=120 column=15
s
trp = : pass=0
=
 tf : server/util.c line=115 column=10
t
f, f : server/util.c line=119 column=21
f
 = : pass=0
=
 fmt : server/util.c line=110 column=72
f
mt; strp : server/util.c line=120 column=15
s
trp < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 tf : server/util.c line=115 column=10
t
+ : pass=0
+
 sizeof(tf) - : pass=0
-
 6 && : true=0, false=0
&
& (*strp : server/util.c line=120 column=15
s
trp MC/DC independently affect : true=0, false=0
= : enter=0, leave=0
=TF
 * dereference : enter=0, leave=0
*
f : server/util.c line=119 column=21
f
)
128            ; f : server/util.c line=119 column=21
f
++ : pass=0
+
+, strp : server/util.c line=120 column=15
s
trp++ : pass=0
+
+) {
129            if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
f : server/util.c line=119 column=21
f
 != : true=0, false=0
!
= '%') continue : pass=0
c
ontinue;
130            switch : pass=0
s
witch (f : server/util.c line=119 column=21
f
[] : enter=0, leave=0
[
1]) {
131            case : true=0, false=0
c
ase '%':
132                *++ : pass=0
+
+strp : server/util.c line=120 column=15
s
trp = : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
++ : pass=0
+
+f : server/util.c line=119 column=21
f
;
133                break : pass=0
b
reak;
134            case : true=0, false=0
c
ase 'Z':
135                *strp : server/util.c line=120 column=15
s
trp++ : pass=0
+
= : enter=0, leave=0
=
 'G';
136                *strp : server/util.c line=120 column=15
s
trp++ : pass=0
+
= : enter=0, leave=0
=
 'M';
137                *strp : server/util.c line=120 column=15
s
trp = : enter=0, leave=0
=
 'T';
138                f : server/util.c line=119 column=21
f
++ : pass=0
+
+;
139                break : pass=0
b
reak;
140            case : true=0, false=0
c
ase 'z': /* common extension */
141                *strp : server/util.c line=120 column=15
s
trp++ : pass=0
+
= : enter=0, leave=0
=
 '+';
142                *strp : server/util.c line=120 column=15
s
trp++ : pass=0
+
= : enter=0, leave=0
=
 '0';
143                *strp : server/util.c line=120 column=15
s
trp++ : pass=0
+
= : enter=0, leave=0
=
 '0';
144                *strp : server/util.c line=120 column=15
s
trp++ : pass=0
+
= : enter=0, leave=0
=
 '0';
145                *strp : server/util.c line=120 column=15
s
trp = : enter=0, leave=0
=
 '0';
146                f : server/util.c line=119 column=21
f
++ : pass=0
+
+;
147                break : pass=0
b
reak;
148            }
149        }
150        *strp : server/util.c line=120 column=15
s
trp = : enter=0, leave=0
=
 '\0';
151        fmt : server/util.c line=110 column=72
f
mt = : pass=0
=
 tf : server/util.c line=115 column=10
t
f;
152    }
153    else {
154        apr_time_exp_lt : enter=0, leave=0

apr_time_exp_lt : /usr/include/apr-1/apr_time.h line=152 column=27
a
pr_time_exp_lt(&xt : server/util.c line=116 column=20
x
t, t : server/util.c line=110 column=57
t
);
155    }
156
157    /* check return code? */
158    apr_strftime : enter=0, leave=0

apr_strftime : /usr/include/apr-1/apr_time.h line=214 column=27
a
pr_strftime(ts : server/util.c line=114 column=10
t
s, &retcode : server/util.c line=113 column=16
r
etcode, MAX_STRING_LEN, fmt : server/util.c line=110 column=72
f
mt, &xt : server/util.c line=116 column=20
x
t);
159    ts : server/util.c line=114 column=10
t
s[MAX_STRING_LEN - : pass=0
-
 1] = : enter=0, leave=0
=
 '\0';
160    return : pass=0
r
eturn apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(p : server/util.c line=110 column=43
p
ts : server/util.c line=114 column=10
t
s);
161}
162
163/* Roy owes Rob beer. */
164/* Rob owes Roy dinner. */
165
166/* These legacy comments would make a lot more sense if Roy hadn't
167 * replaced the old later_than() routine with util_date.c.
168 *
169 * Well, okay, they still wouldn't make any sense.
170 */
171
172/* Match = 0, NoMatch = 1, Abort = -1
173 * Based loosely on sections of wildmat.c by Rich Salz
174 * Hmmm... shouldn't this really go component by component?
175 */
176AP_DECLARE(int) ap_strcmp_match : call=0
a
p_strcmp_match(const char *str, const char *expected)
177{
178    int x, y;
179
180    for : true=0, false=0
f
or (x : server/util.c line=178 column=9
x
 = : pass=0
=
 0, y : server/util.c line=178 column=12
y
 = : pass=0
=
 0; expected : server/util.c line=176 column=62
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=178 column=12
y
]; ++ : pass=0
+
+y : server/util.c line=178 column=12
y
++ : pass=0
+
+x : server/util.c line=178 column=9
x
) {
181        if : true=0, false=0
i
f ((! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
str : server/util.c line=176 column=45
s
tr[] : enter=0, leave=0
[
x : server/util.c line=178 column=9
x
]) && : true=0, false=0
&
& (expected : server/util.c line=176 column=62
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=178 column=12
y
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '*'))
182            return : pass=0
r
eturn -1;
183        if : true=0, false=0
i
f (expected : server/util.c line=176 column=62
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=178 column=12
y
== : true=0, false=0
=
= '*') {
184            while : true=0, false=0
w
hile (expected : server/util.c line=176 column=62
e
xpected[] : enter=0, leave=0
[
++ : pass=0
+
+y : server/util.c line=178 column=12
y
== : true=0, false=0
=
= '*');
185            if : true=0, false=0
i
f (! : true=0, false=0
!
expected : server/util.c line=176 column=62
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=178 column=12
y
])
186                return : pass=0
r
eturn 0;
187            while : true=0, false=0
w
hile (str : server/util.c line=176 column=45
s
tr[] : enter=0, leave=0
[
x : server/util.c line=178 column=9
x
]) {
188                int ret;
189                if : true=0, false=0
i
f ((ret : server/util.c line=188 column=21
r
et = : pass=0
=
 ap_strcmp_match : enter=0, leave=0

ap_strcmp_match : server/util.c line=176 column=17
a
p_strcmp_match(&str : server/util.c line=176 column=45
s
tr[] : enter=0, leave=0
[
x : server/util.c line=178 column=9
x
++ : pass=0
+
+], &expected : server/util.c line=176 column=62
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=178 column=12
y
])) != : true=0, false=0
!
= 1)
190                    return : pass=0
r
eturn ret : server/util.c line=188 column=21
r
et;
191            }
192            return : pass=0
r
eturn -1;
193        }
194        else if : true=0, false=0
i
f ((expected : server/util.c line=176 column=62
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=178 column=12
y
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '?') && : true=0, false=0
&
& (str : server/util.c line=176 column=45
s
tr[] : enter=0, leave=0
[
x : server/util.c line=178 column=9
x
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
expected : server/util.c line=176 column=62
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=178 column=12
y
]))
195            return : pass=0
r
eturn 1;
196    }
197    return : pass=0
r
eturn (str : server/util.c line=176 column=45
s
tr[] : enter=0, leave=0
[
x : server/util.c line=178 column=9
x
!= : true=0, false=0
!
= '\0');
198}
199
200AP_DECLARE(int) ap_strcasecmp_match : call=0
a
p_strcasecmp_match(const char *str, const char *expected)
201{
202    int x, y;
203
204    for : true=0, false=0
f
or (x : server/util.c line=202 column=9
x
 = : pass=0
=
 0, y : server/util.c line=202 column=12
y
 = : pass=0
=
 0; expected : server/util.c line=200 column=66
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=202 column=12
y
]; ++ : pass=0
+
+y : server/util.c line=202 column=12
y
++ : pass=0
+
+x : server/util.c line=202 column=9
x
) {
205        if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
str : server/util.c line=200 column=49
s
tr[] : enter=0, leave=0
[
x : server/util.c line=202 column=9
x
&& : true=0, false=0
&
expected : server/util.c line=200 column=66
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=202 column=12
y
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '*')
206            return : pass=0
r
eturn -1;
207        if : true=0, false=0
i
f (expected : server/util.c line=200 column=66
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=202 column=12
y
== : true=0, false=0
=
= '*') {
208            while : true=0, false=0
w
hile (expected : server/util.c line=200 column=66
e
xpected[] : enter=0, leave=0
[
++ : pass=0
+
+y : server/util.c line=202 column=12
y
== : true=0, false=0
=
= '*');
209            if : true=0, false=0
i
f (! : true=0, false=0
!
expected : server/util.c line=200 column=66
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=202 column=12
y
])
210                return : pass=0
r
eturn 0;
211            while : true=0, false=0
w
hile (str : server/util.c line=200 column=49
s
tr[] : enter=0, leave=0
[
x : server/util.c line=202 column=9
x
]) {
212                int ret;
213                if : true=0, false=0
i
f ((ret : server/util.c line=212 column=21
r
et = : pass=0
=
 ap_strcasecmp_match : enter=0, leave=0

ap_strcasecmp_match : server/util.c line=200 column=17
a
p_strcasecmp_match(&str : server/util.c line=200 column=49
s
tr[] : enter=0, leave=0
[
x : server/util.c line=202 column=9
x
++ : pass=0
+
+], &expected : server/util.c line=200 column=66
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=202 column=12
y
])) != : true=0, false=0
!
= 1)
214                    return : pass=0
r
eturn ret : server/util.c line=212 column=21
r
et;
215            }
216            return : pass=0
r
eturn -1;
217        }
218        else if : true=0, false=0
i
f (expected : server/util.c line=200 column=66
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=202 column=12
y
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '?'
219                 && : true=0, false=0
&
& apr_tolower(str : server/util.c line=200 column=49
s
tr[] : enter=0, leave=0
[
x : server/util.c line=202 column=9
x
]) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= apr_tolower(expected : server/util.c line=200 column=66
e
xpected[] : enter=0, leave=0
[
y : server/util.c line=202 column=12
y
]))
220            return : pass=0
r
eturn 1;
221    }
222    return : pass=0
r
eturn (str : server/util.c line=200 column=49
s
tr[] : enter=0, leave=0
[
x : server/util.c line=202 column=9
x
!= : true=0, false=0
!
= '\0');
223}
224
225/* We actually compare the canonical root to this root, (but we don't
226 * waste time checking the case), since every use of this function in
227 * httpd-2.1 tests if the path is 'proper', meaning we've already passed
228 * it through apr_filepath_merge, or we haven't.
229 */
230AP_DECLARE(int) ap_os_is_path_absolute : call=0
a
p_os_is_path_absolute(apr_pool_t *p, const char *dir)
231{
232    const char *newpath;
233    const char *ourdir = dir : server/util.c line=230 column=67
d
ir;
234    if : true=0, false=0
i
f (apr_filepath_root : enter=0, leave=0

apr_filepath_root : /usr/include/apr-1/apr_file_info.h line=336 column=27
a
pr_filepath_root(&newpath : server/util.c line=232 column=17
n
ewpath, &dir : server/util.c line=230 column=67
d
ir, 0, p : server/util.c line=230 column=52
p
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS
235            || : true=0, false=0
|
strncmp : enter=0, leave=0

strncmp : /usr/include/string.h line=146 column=12
s
trncmp(newpath : server/util.c line=232 column=17
n
ewpath, ourdir : server/util.c line=233 column=17
o
urdir, strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(newpath : server/util.c line=232 column=17
n
ewpath)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= 0) {
236        return : pass=0
r
eturn 0;
237    }
238    return : pass=0
r
eturn 1;
239}
240
241AP_DECLARE(int) ap_is_matchexp : call=0
a
p_is_matchexp(const char *str)
242{
243    register int x;
244
245    for : true=0, false=0
f
or (x : server/util.c line=243 column=18
x
 = : pass=0
=
 0; str : server/util.c line=241 column=44
s
tr[] : enter=0, leave=0
[
x : server/util.c line=243 column=18
x
]; x : server/util.c line=243 column=18
x
++ : pass=0
+
+)
246        if : true=0, false=0
i
f ((str : server/util.c line=241 column=44
s
tr[] : enter=0, leave=0
[
x : server/util.c line=243 column=18
x
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '*') || : true=0, false=0
|
| (str : server/util.c line=241 column=44
s
tr[] : enter=0, leave=0
[
x : server/util.c line=243 column=18
x
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '?'))
247            return : pass=0
r
eturn 1;
248    return : pass=0
r
eturn 0;
249}
250
251/*
252 * Here's a pool-based interface to the POSIX-esque ap_regcomp().
253 * Note that we return ap_regex_t instead of being passed one.
254 * The reason is that if you use an already-used ap_regex_t structure,
255 * the memory that you've already allocated gets forgotten, and
256 * regfree() doesn't clear it. So we don't allow it.
257 */
258
259static apr_status_t regex_cleanup : call=0
r
egex_cleanup(void *preg)
260{
261    ap_regfree : enter=0, leave=0

ap_regfree : include/ap_regex.h line=135 column=18
a
p_regfree((ap_regex_t *) preg : server/util.c line=259 column=41
p
reg);
262    return : pass=0
r
eturn APR_SUCCESS;
263}
264
265AP_DECLARE(ap_regex_t *) ap_pregcomp : call=0
a
p_pregcomp(apr_pool_t *p, const char *pattern,
266                                     int cflags)
267{
268    ap_regex_t *preg = apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=265 column=50
p
, sizeof *preg);
269
270    if : true=0, false=0
i
f (ap_regcomp : enter=0, leave=0

ap_regcomp : include/ap_regex.h line=107 column=17
a
p_regcomp(preg : server/util.c line=268 column=17
p
reg, pattern : server/util.c line=265 column=65
p
attern, cflags : server/util.c line=266 column=42
c
flags)) {
271        return : pass=0
r
eturn NULL;
272    }
273
274    apr_pool_cleanup_register : enter=0, leave=0

apr_pool_cleanup_register : /usr/include/apr-1/apr_pools.h line=603 column=19
a
pr_pool_cleanup_register(p : server/util.c line=265 column=50
p
, (void *) preg : server/util.c line=268 column=17
p
reg, regex_cleanup : server/util.c line=259 column=21
r
egex_cleanup,
275                              apr_pool_cleanup_null : /usr/include/apr-1/apr_pools.h line=682 column=34 apr_pool_cleanup_null);
276
277    return : pass=0
r
eturn preg : server/util.c line=268 column=17
p
reg;
278}
279
280AP_DECLARE(void) ap_pregfree : call=0
a
p_pregfree(apr_pool_t *p, ap_regex_t *reg)
281{
282    ap_regfree : enter=0, leave=0

ap_regfree : include/ap_regex.h line=135 column=18
a
p_regfree(reg : server/util.c line=280 column=57
r
eg);
283    apr_pool_cleanup_kill : enter=0, leave=0

apr_pool_cleanup_kill : /usr/include/apr-1/apr_pools.h line=638 column=19
a
pr_pool_cleanup_kill(p : server/util.c line=280 column=42
p
, (void *) reg : server/util.c line=280 column=57
r
eg, regex_cleanup : server/util.c line=259 column=21
r
egex_cleanup);
284}
285
286/*
287 * Similar to standard strstr() but we ignore case in this version.
288 * Based on the strstr() implementation further below.
289 */
290AP_DECLARE(char *) ap_strcasestr : call=0
a
p_strcasestr(const char *s1, const char *s2)
291{
292    char *p1, *p2;
293    if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
s2 : server/util.c line=290 column=62
s
== : true=0, false=0
=
= '\0') {
294        /* an empty s2 */
295        return : pass=0
r
eturn((char *)s1 : server/util.c line=290 column=46
s
1);
296    }
297    while : true=0, false=0
w
hile(1) {
298        for : true=0, false=0
f
or ( ; (* dereference : enter=0, leave=0
*
s1 : server/util.c line=290 column=46
s
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '\0') && : true=0, false=0
&
& (apr_tolower(* dereference : enter=0, leave=0
*
s1 : server/util.c line=290 column=46
s
1) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= apr_tolower(* dereference : enter=0, leave=0
*
s2 : server/util.c line=290 column=62
s
2)); s1 : server/util.c line=290 column=46
s
1++ : pass=0
+
+);
299        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
s1 : server/util.c line=290 column=46
s
== : true=0, false=0
=
= '\0') {
300            return : pass=0
r
eturn(NULL);
301        }
302        /* found first character of s2, see if the rest matches */
303        p1 : server/util.c line=292 column=11
p
= : pass=0
=
 (char *)s1 : server/util.c line=290 column=46
s
1;
304        p2 : server/util.c line=292 column=16
p
= : pass=0
=
 (char *)s2 : server/util.c line=290 column=62
s
2;
305        for : true=0, false=0
f
or (++ : pass=0
+
+p1 : server/util.c line=292 column=11
p
1, ++ : pass=0
+
+p2 : server/util.c line=292 column=16
p
2; apr_tolower(* dereference : enter=0, leave=0
*
p1 : server/util.c line=292 column=11
p
1) == : true=0, false=0
=
= apr_tolower(* dereference : enter=0, leave=0
*
p2 : server/util.c line=292 column=16
p
2); ++ : pass=0
+
+p1 : server/util.c line=292 column=11
p
1, ++ : pass=0
+
+p2 : server/util.c line=292 column=16
p
2) {
306            if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
p1 : server/util.c line=292 column=11
p
== : true=0, false=0
=
= '\0') {
307                /* both strings ended together */
308                return : pass=0
r
eturn((char *)s1 : server/util.c line=290 column=46
s
1);
309            }
310        }
311        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
p2 : server/util.c line=292 column=16
p
== : true=0, false=0
=
= '\0') {
312            /* second string ended, a match */
313            break : pass=0
b
reak;
314        }
315        /* didn't find a match here, try starting at next character in s1 */
316        s1 : server/util.c line=290 column=46
s
1++ : pass=0
+
+;
317    }
318    return : pass=0
r
eturn((char *)s1 : server/util.c line=290 column=46
s
1);
319}
320
321/*
322 * Returns an offsetted pointer in bigstring immediately after
323 * prefix. Returns bigstring if bigstring doesn't start with
324 * prefix or if prefix is longer than bigstring while still matching.
325 * NOTE: pointer returned is relative to bigstring, so we
326 * can use standard pointer comparisons in the calling function
327 * (eg: test if ap_stripprefix(a,b) == a)
328 */
329AP_DECLARE(const char *) ap_stripprefix : call=0
a
p_stripprefix(const char *bigstring,
330                                        const char *prefix)
331{
332    const char *p1;
333
334    if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
prefix : server/util.c line=330 column=53
p
refix == : true=0, false=0
=
= '\0')
335        return : pass=0
r
eturn bigstring : server/util.c line=329 column=53
b
igstring;
336
337    p1 : server/util.c line=332 column=17
p
= : pass=0
=
 bigstring : server/util.c line=329 column=53
b
igstring;
338    while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
p1 : server/util.c line=332 column=17
p
&& : true=0, false=0
&
MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
prefix : server/util.c line=330 column=53
p
refix) {
339        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
p1 : server/util.c line=332 column=17
p
1++ : pass=0
+
!= : true=0, false=0
!
* dereference : enter=0, leave=0
*
prefix : server/util.c line=330 column=53
p
refix++ : pass=0
+
+)
340            return : pass=0
r
eturn bigstring : server/util.c line=329 column=53
b
igstring;
341    }
342    if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
prefix : server/util.c line=330 column=53
p
refix == : true=0, false=0
=
= '\0')
343        return : pass=0
r
eturn p1 : server/util.c line=332 column=17
p
1;
344
345    /* hit the end of bigstring! */
346    return : pass=0
r
eturn bigstring : server/util.c line=329 column=53
b
igstring;
347}
348
349/* This function substitutes for $0-$9, filling in regular expression
350 * submatches. Pass it the same nmatch and pmatch arguments that you
351 * passed ap_regexec(). pmatch should not be greater than the maximum number
352 * of subexpressions - i.e. one more than the re_nsub member of ap_regex_t.
353 *
354 * input should be the string with the $-expressions, source should be the
355 * string that was matched against.
356 *
357 * It returns the substituted string, or NULL on error.
358 *
359 * Parts of this code are based on Henry Spencer's regsub(), from his
360 * AT&T V8 regexp package.
361 */
362
363static apr_status_t regsub_core : call=0
r
egsub_core(apr_pool_t *p, char **result,
364                                const char *input,
365                                const char *source, apr_size_t nmatch,
366                                ap_regmatch_t pmatch[], apr_size_t maxlen)
367{
368    const char *src = input : server/util.c line=364 column=45
i
nput;
369    char *dst;
370    char c;
371    apr_size_t no;
372    apr_size_t len = 0;
373
374    AP_DEBUG_ASSERT(result && p);
375    if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
source : server/util.c line=365 column=45
s
ource || : true=0, false=0
|
nmatch : server/util.c line=365 column=64
n
match> : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
AP_MAX_REG_MATCH)
376        return : pass=0
r
eturn APR_EINVAL;
377    if : true=0, false=0
i
f (! : true=0, false=0
!
nmatch : server/util.c line=365 column=64
n
match) {
378        len : server/util.c line=372 column=16
l
en = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(src : server/util.c line=368 column=17
s
rc);
379        if : true=0, false=0
i
f (maxlen : server/util.c line=366 column=68
m
axlen > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0 && : true=0, false=0
&
len : server/util.c line=372 column=16
l
en >= : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
maxlen : server/util.c line=366 column=68
m
axlen)
380            return : pass=0
r
eturn APR_ENOMEM;
381        *result : server/util.c line=363 column=55
r
esult = : enter=0, leave=0
=
 apr_pstrmemdup : enter=0, leave=0

apr_pstrmemdup : /usr/include/apr-1/apr_strings.h line=109 column=21
a
pr_pstrmemdup(p : server/util.c line=363 column=45
p
src : server/util.c line=368 column=17
s
rc, len : server/util.c line=372 column=16
l
en);
382        return : pass=0
r
eturn APR_SUCCESS;
383    }
384
385    /* First pass, find the size */
386    while : true=0, false=0
w
hile ((c : server/util.c line=370 column=10
c
 = : pass=0
=
 * dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc++ : pass=0
+
+) != : true=0, false=0
!
= '\0') {
387        if : true=0, false=0
i
f (c : server/util.c line=370 column=10
c
 == : true=0, false=0
=
= '&')
388            no : server/util.c line=371 column=16
n
= : pass=0
=
 0;
389        else if : true=0, false=0
i
f (c : server/util.c line=370 column=10
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '$' && : true=0, false=0
&
& apr_isdigit(* dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc))
390            no : server/util.c line=371 column=16
n
= : pass=0
=
 * dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc++ : pass=0
+
- : pass=0
-
 '0';
391        else
392            no : server/util.c line=371 column=16
n
= : pass=0
=
 AP_MAX_REG_MATCH;
393
394        if : true=0, false=0
i
f (no : server/util.c line=371 column=16
n
>= : true=0, false=0
>
= AP_MAX_REG_MATCH) {  /* Ordinary character. */
395            if : true=0, false=0
i
f (c : server/util.c line=370 column=10
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\' && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '$' || : true=0, false=0
|
* dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '&'))
396                src : server/util.c line=368 column=17
s
rc++ : pass=0
+
+;
397            len : server/util.c line=372 column=16
l
en++ : pass=0
+
+;
398        }
399        else if : true=0, false=0
i
f (no : server/util.c line=371 column=16
n
< : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 nmatch : server/util.c line=365 column=64
n
match && : true=0, false=0
&
pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_so : include/ap_regex.h line=93 column=9 rm_so < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_eo : include/ap_regex.h line=94 column=9 rm_eo) {
400            if : true=0, false=0
i
f (UTIL_SIZE_MAX - : pass=0
-
 len : server/util.c line=372 column=16
l
en <= : true=0, false=0
<
pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_eo : include/ap_regex.h line=94 column=9 rm_eo - : pass=0
-
 pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_so : include/ap_regex.h line=93 column=9 rm_so) {
401                ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_WARNING, 0, NULL,
402                             "integer overflow or out of memory condition." );
403                return : pass=0
r
eturn APR_ENOMEM;
404            }
405            len : server/util.c line=372 column=16
l
en += : pass=0
+
pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_eo : include/ap_regex.h line=94 column=9 rm_eo - : pass=0
-
 pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_so : include/ap_regex.h line=93 column=9 rm_so;
406        }
407
408    }
409
410    if : true=0, false=0
i
f (len : server/util.c line=372 column=16
l
en >= : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
maxlen : server/util.c line=366 column=68
m
axlen && : true=0, false=0
&
maxlen : server/util.c line=366 column=68
m
axlen > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0)
411        return : pass=0
r
eturn APR_ENOMEM;
412
413    *result : server/util.c line=363 column=55
r
esult = : enter=0, leave=0
=
 dst : server/util.c line=369 column=11
d
st = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=363 column=45
p
len : server/util.c line=372 column=16
l
en + : pass=0
+
 1);
414
415    /* Now actually fill in the string */
416
417    src : server/util.c line=368 column=17
s
rc = : pass=0
=
 input : server/util.c line=364 column=45
i
nput;
418
419    while : true=0, false=0
w
hile ((c : server/util.c line=370 column=10
c
 = : pass=0
=
 * dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc++ : pass=0
+
+) != : true=0, false=0
!
= '\0') {
420        if : true=0, false=0
i
f (c : server/util.c line=370 column=10
c
 == : true=0, false=0
=
= '&')
421            no : server/util.c line=371 column=16
n
= : pass=0
=
 0;
422        else if : true=0, false=0
i
f (c : server/util.c line=370 column=10
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '$' && : true=0, false=0
&
& apr_isdigit(* dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc))
423            no : server/util.c line=371 column=16
n
= : pass=0
=
 * dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc++ : pass=0
+
- : pass=0
-
 '0';
424        else
425            no : server/util.c line=371 column=16
n
= : pass=0
=
 AP_MAX_REG_MATCH;
426
427        if : true=0, false=0
i
f (no : server/util.c line=371 column=16
n
>= : true=0, false=0
>
= AP_MAX_REG_MATCH) {  /* Ordinary character. */
428            if : true=0, false=0
i
f (c : server/util.c line=370 column=10
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\' && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '$' || : true=0, false=0
|
* dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '&'))
429                c : server/util.c line=370 column=10
c
 = : pass=0
=
 * dereference : enter=0, leave=0
*
src : server/util.c line=368 column=17
s
rc++ : pass=0
+
+;
430            *dst : server/util.c line=369 column=11
d
st++ : pass=0
+
= : enter=0, leave=0
=
 c : server/util.c line=370 column=10
c
;
431        }
432        else if : true=0, false=0
i
f (no : server/util.c line=371 column=16
n
< : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 nmatch : server/util.c line=365 column=64
n
match && : true=0, false=0
&
pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_so : include/ap_regex.h line=93 column=9 rm_so < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_eo : include/ap_regex.h line=94 column=9 rm_eo) {
433            len : server/util.c line=372 column=16
l
en = : pass=0
=
 pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_eo : include/ap_regex.h line=94 column=9 rm_eo - : pass=0
-
 pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_so : include/ap_regex.h line=93 column=9 rm_so;
434            memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(dst : server/util.c line=369 column=11
d
st, source : server/util.c line=365 column=45
s
ource + : pass=0
+
 pmatch : server/util.c line=366 column=47
p
match[] : enter=0, leave=0
[
no : server/util.c line=371 column=16
n
o].rm_so : include/ap_regex.h line=93 column=9 rm_so, len : server/util.c line=372 column=16
l
en);
435            dst : server/util.c line=369 column=11
d
st += : pass=0
+
len : server/util.c line=372 column=16
l
en;
436        }
437
438    }
439    *dst : server/util.c line=369 column=11
d
st = : enter=0, leave=0
=
 '\0';
440
441    return : pass=0
r
eturn APR_SUCCESS;
442}
443
444#ifndef AP_PREGSUB_MAXLEN
445/* No API control so far in this released branch, so make it large */
446#define AP_PREGSUB_MAXLEN   (64 * : pass=0
*
 1024 * : pass=0
*
 1024)
447#endif
448AP_DECLARE(char *) ap_pregsub : call=0
a
p_pregsub(apr_pool_t *p, const char *input,
449                              const char *source, size_t nmatch,
450                              ap_regmatch_t pmatch[])
451{
452    char *result;
453    apr_status_t rc = regsub_core : enter=0, leave=0

regsub_core : server/util.c line=363 column=21
r
egsub_core(p : server/util.c line=448 column=43
p
, &result : server/util.c line=452 column=11
r
esult, input : server/util.c line=448 column=58
i
nput, source : server/util.c line=449 column=43
s
ource, nmatch : server/util.c line=449 column=58
n
match,
454                                  pmatch : server/util.c line=450 column=45
p
match, AP_PREGSUB_MAXLEN);
455    if : true=0, false=0
i
f (rc : server/util.c line=453 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS)
456        result : server/util.c line=452 column=11
r
esult = : pass=0
=
 NULL;
457    return : pass=0
r
eturn result : server/util.c line=452 column=11
r
esult;
458}
459
460AP_DECLARE(apr_status_t) ap_pregsub_ex : call=0
a
p_pregsub_ex(apr_pool_t *p, char **result,
461                                       const char *input, const char *source,
462                                       apr_size_t nmatch, ap_regmatch_t pmatch[],
463                                       apr_size_t maxlen)
464{
465    apr_status_t rc = regsub_core : enter=0, leave=0

regsub_core : server/util.c line=363 column=21
r
egsub_core(p : server/util.c line=460 column=52
p
result : server/util.c line=460 column=62
r
esult, input : server/util.c line=461 column=52
i
nput, source : server/util.c line=461 column=71
s
ource, nmatch : server/util.c line=462 column=51
n
match,
466                                  pmatch : server/util.c line=462 column=73
p
match, maxlen : server/util.c line=463 column=51
m
axlen);
467    if : true=0, false=0
i
f (rc : server/util.c line=465 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS)
468        *result : server/util.c line=460 column=62
r
esult = : enter=0, leave=0
=
 NULL;
469    return : pass=0
r
eturn rc : server/util.c line=465 column=18
r
c;
470}
471
472/*
473 * Parse .. so we don't compromise security
474 */
475AP_DECLARE(void) ap_getparents : call=0
a
p_getparents(char *name)
476{
477    char *next;
478    int l, w, first_dot;
479
480    /* Four paseses, as per RFC 1808 */
481    /* a) remove ./ path segments */
482    for : true=0, false=0
f
or (next : server/util.c line=477 column=11
n
ext = : pass=0
=
 name : server/util.c line=475 column=38
n
ame; MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
next : server/util.c line=477 column=11
n
ext && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
next : server/util.c line=477 column=11
n
ext != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '.'); next : server/util.c line=477 column=11
n
ext++ : pass=0
+
+) {
483    }
484
485    l : server/util.c line=478 column=9
l
 = : pass=0
=
 w : server/util.c line=478 column=12
w
 = : pass=0
=
 first_dot : server/util.c line=478 column=15
f
irst_dot = : pass=0
=
 next : server/util.c line=477 column=11
n
ext - : pass=0
-
 name : server/util.c line=475 column=38
n
ame;
486    while : true=0, false=0
w
hile (name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
!= : true=0, false=0
!
= '\0') {
487        if : true=0, false=0
i
f (name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '.' && : true=0, false=0
&
& IS_SLASH(name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
 + : pass=0
+
 1])
488            && : true=0, false=0
&
& (l : server/util.c line=478 column=9
l
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 0 || : true=0, false=0
|
| IS_SLASH(name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
 - : pass=0
-
 1])))
489            l : server/util.c line=478 column=9
l
 += : pass=0
+
= 2;
490        else
491            name : server/util.c line=475 column=38
n
ame[w : server/util.c line=478 column=12
w
++ : pass=0
+
+] = : enter=0, leave=0
=
 name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
++ : pass=0
+
+];
492    }
493
494    /* b) remove trailing . path, segment */
495    if : true=0, false=0
i
f (w : server/util.c line=478 column=12
w
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 1 && : true=0, false=0
&
name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
0] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '.')
496        w : server/util.c line=478 column=12
w
-- : pass=0
-
-;
497    else if : true=0, false=0
i
f (w : server/util.c line=478 column=12
w
 > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 1 && : true=0, false=0
&
name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
w : server/util.c line=478 column=12
w
 - : pass=0
-
 1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '.' && : true=0, false=0
&
& IS_SLASH(name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
w : server/util.c line=478 column=12
w
 - : pass=0
-
 2]))
498        w : server/util.c line=478 column=12
w
-- : pass=0
-
-;
499    name : server/util.c line=475 column=38
n
ame[w : server/util.c line=478 column=12
w
= : enter=0, leave=0
=
 '\0';
500
501    /* c) remove all xx/../ segments. (including leading ../ and /../) */
502    l : server/util.c line=478 column=9
l
 = : pass=0
=
 first_dot : server/util.c line=478 column=15
f
irst_dot;
503
504    while : true=0, false=0
w
hile (name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
!= : true=0, false=0
!
= '\0') {
505        if : true=0, false=0
i
f (name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '.' && : true=0, false=0
&
name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
 + : pass=0
+
 1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '.' && : true=0, false=0
&
& IS_SLASH(name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
 + : pass=0
+
 2])
506            && : true=0, false=0
&
& (l : server/util.c line=478 column=9
l
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 0 || : true=0, false=0
|
| IS_SLASH(name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
 - : pass=0
-
 1]))) {
507            register int m = l : server/util.c line=478 column=9
l
 + : pass=0
+
 3, n;
508
509            l : server/util.c line=478 column=9
l
 = : pass=0
=
 l : server/util.c line=478 column=9
l
 - : pass=0
-
 2;
510            if : true=0, false=0
i
f (l : server/util.c line=478 column=9
l
 >= : true=0, false=0
>
= 0) {
511                while : true=0, false=0
w
hile (l : server/util.c line=478 column=9
l
 >= : 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
IS_SLASH(name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
]))
512                    l : server/util.c line=478 column=9
l
-- : pass=0
-
-;
513                l : server/util.c line=478 column=9
l
++ : pass=0
+
+;
514            }
515            else
516                l : server/util.c line=478 column=9
l
 = : pass=0
=
 0;
517            n : server/util.c line=507 column=37
n
 = : pass=0
=
 l : server/util.c line=478 column=9
l
;
518            while : true=0, false=0
w
hile ((name : server/util.c line=475 column=38
n
ame[n : server/util.c line=507 column=37
n
= : enter=0, leave=0
=
 name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
m : server/util.c line=507 column=26
m
]))
519                (++ : pass=0
+
+n : server/util.c line=507 column=37
n
++ : pass=0
+
+m : server/util.c line=507 column=26
m
);
520        }
521        else
522            ++ : pass=0
+
+l : server/util.c line=478 column=9
l
;
523    }
524
525    /* d) remove trailing xx/.. segment. */
526    if : true=0, false=0
i
f (l : server/util.c line=478 column=9
l
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 2 && : true=0, false=0
&
name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
0] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '.' && : true=0, false=0
&
name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '.')
527        name : server/util.c line=475 column=38
n
ame[0] = : enter=0, leave=0
=
 '\0';
528    else if : true=0, false=0
i
f (l : server/util.c line=478 column=9
l
 > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 2 && : true=0, false=0
&
name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
 - : pass=0
-
 1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '.' && : true=0, false=0
&
name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
 - : pass=0
-
 2] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '.'
529             && : true=0, false=0
&
& IS_SLASH(name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
 - : pass=0
-
 3])) {
530        l : server/util.c line=478 column=9
l
 = : pass=0
=
 l : server/util.c line=478 column=9
l
 - : pass=0
-
 4;
531        if : true=0, false=0
i
f (l : server/util.c line=478 column=9
l
 >= : true=0, false=0
>
= 0) {
532            while : true=0, false=0
w
hile (l : server/util.c line=478 column=9
l
 >= : 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
IS_SLASH(name : server/util.c line=475 column=38
n
ame[] : enter=0, leave=0
[
l : server/util.c line=478 column=9
l
]))
533                l : server/util.c line=478 column=9
l
-- : pass=0
-
-;
534            l : server/util.c line=478 column=9
l
++ : pass=0
+
+;
535        }
536        else
537            l : server/util.c line=478 column=9
l
 = : pass=0
=
 0;
538        name : server/util.c line=475 column=38
n
ame[l : server/util.c line=478 column=9
l
= : enter=0, leave=0
=
 '\0';
539    }
540}
541
542AP_DECLARE(void) ap_no2slash : call=0
a
p_no2slash(char *name)
543{
544    char *d, *s;
545
546    s : server/util.c line=544 column=15
s
 = : pass=0
=
 d : server/util.c line=544 column=11
d
 = : pass=0
=
 name : server/util.c line=542 column=36
n
ame;
547
548#ifdef HAVE_UNC_PATHS
549    /* Check for UNC names.  Leave leading two slashes. */
550    if (s[0] == '/' && s[1] == '/')
551        *d++ = *s++;
552#endif
553
554    while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
s : server/util.c line=544 column=15
s
) {
555        if : true=0, false=0
i
f ((*d : server/util.c line=544 column=11
d
++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util.c line=544 column=15
s
== : true=0, false=0
=
= '/') {
556            do {
557                ++ : pass=0
+
+s : server/util.c line=544 column=15
s
;
558            } while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
s : server/util.c line=544 column=15
s
 == : true=0, false=0
=
= '/');
559        }
560        else {
561            ++ : pass=0
+
+s : server/util.c line=544 column=15
s
;
562        }
563    }
564    *d : server/util.c line=544 column=11
d
 = : enter=0, leave=0
=
 '\0';
565}
566
567
568/*
569 * copy at most n leading directories of s into d
570 * d should be at least as large as s plus 1 extra byte
571 * assumes n > 0
572 * the return value is the ever useful pointer to the trailing \0 of d
573 *
574 * MODIFIED FOR HAVE_DRIVE_LETTERS and NETWARE environments,
575 * so that if n == 0, "/" is returned in d with n == 1
576 * and s == "e:/test.html", "e:/" is returned in d
577 * *** See also directory_walk in modules/http/http_request.c
578
579 * examples:
580 *    /a/b, 0  ==> /  (true for all platforms)
581 *    /a/b, 1  ==> /
582 *    /a/b, 2  ==> /a/
583 *    /a/b, 3  ==> /a/b/
584 *    /a/b, 4  ==> /a/b/
585 *
586 *    c:/a/b 0 ==> /
587 *    c:/a/b 1 ==> c:/
588 *    c:/a/b 2 ==> c:/a/
589 *    c:/a/b 3 ==> c:/a/b
590 *    c:/a/b 4 ==> c:/a/b
591 */
592AP_DECLARE(char *) ap_make_dirstr_prefix : call=0
a
p_make_dirstr_prefix(char *d, const char *s, int n)
593{
594    if : true=0, false=0
i
f (n : server/util.c line=592 column=70
n
 < : true=0, false=0
<
 1) {
595        *d : server/util.c line=592 column=48
d
 = : enter=0, leave=0
=
 '/';
596        *++ : pass=0
+
+d : server/util.c line=592 column=48
d
 = : enter=0, leave=0
=
 '\0';
597        return : pass=0
r
eturn (d : server/util.c line=592 column=48
d
);
598    }
599
600    for (;;) {
601        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
s : server/util.c line=592 column=63
s
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\0' || : true=0, false=0
|
| (* dereference : enter=0, leave=0
*
s : server/util.c line=592 column=63
s
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '/' && : true=0, false=0
&
& (-- : pass=0
-
-n : server/util.c line=592 column=70
n
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 0)) {
602            *d : server/util.c line=592 column=48
d
 = : enter=0, leave=0
=
 '/';
603            break : pass=0
b
reak;
604        }
605        *d : server/util.c line=592 column=48
d
++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util.c line=592 column=63
s
++ : pass=0
+
+;
606    }
607    *++ : pass=0
+
+d : server/util.c line=592 column=48
d
 = : enter=0, leave=0
=
 0;
608    return : pass=0
r
eturn (d : server/util.c line=592 column=48
d
);
609}
610
611
612/*
613 * return the parent directory name including trailing / of the file s
614 */
615AP_DECLARE(char *) ap_make_dirstr_parent : call=0
a
p_make_dirstr_parent(apr_pool_t *p, const char *s)
616{
617    const char *last_slash = ap_strrchr_c(s : server/util.c line=615 column=69
s
, '/');
618    char *d;
619    int l;
620
621    if : true=0, false=0
i
f (last_slash : server/util.c line=617 column=17
l
ast_slash == : true=0, false=0
=
= NULL) {
622        return : pass=0
r
eturn apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(p : server/util.c line=615 column=54
p
, "");
623    }
624    l : server/util.c line=619 column=9
l
 = : pass=0
=
 (last_slash : server/util.c line=617 column=17
l
ast_slash - : pass=0
-
 s : server/util.c line=615 column=69
s
+ : pass=0
+
 1;
625    d : server/util.c line=618 column=11
d
 = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=615 column=54
p
l : server/util.c line=619 column=9
l
 + : pass=0
+
 1);
626    memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(d : server/util.c line=618 column=11
d
s : server/util.c line=615 column=69
s
l : server/util.c line=619 column=9
l
);
627    d : server/util.c line=618 column=11
d
[l : server/util.c line=619 column=9
l
= : enter=0, leave=0
=
 0;
628    return : pass=0
r
eturn (d : server/util.c line=618 column=11
d
);
629}
630
631
632AP_DECLARE(int) ap_count_dirs : call=0
a
p_count_dirs(const char *path)
633{
634    register int x, n;
635
636    for : true=0, false=0
f
or (x : server/util.c line=634 column=18
x
 = : pass=0
=
 0, n : server/util.c line=634 column=21
n
 = : pass=0
=
 0; path : server/util.c line=632 column=43
p
ath[] : enter=0, leave=0
[
x : server/util.c line=634 column=18
x
]; x : server/util.c line=634 column=18
x
++ : pass=0
+
+)
637        if : true=0, false=0
i
f (path : server/util.c line=632 column=43
p
ath[] : enter=0, leave=0
[
x : server/util.c line=634 column=18
x
== : true=0, false=0
=
= '/')
638            n : server/util.c line=634 column=21
n
++ : pass=0
+
+;
639    return : pass=0
r
eturn n : server/util.c line=634 column=21
n
;
640}
641
642AP_DECLARE(char *) ap_getword_nc : call=0
a
p_getword_nc(apr_pool_t *atrans, char **line, char stop)
643{
644    return : pass=0
r
eturn ap_getword : enter=0, leave=0

ap_getword : include/httpd.h line=1299 column=20
a
p_getword(atrans : server/util.c line=642 column=46
a
trans, (const char **) line : server/util.c line=642 column=61
l
ine, stop : server/util.c line=642 column=72
s
top);
645}
646
647AP_DECLARE(char *) ap_getword : call=0
a
p_getword(apr_pool_t *atrans, const char **line, char stop)
648{
649    const char *pos = * dereference : enter=0, leave=0
*
line : server/util.c line=647 column=64
l
ine;
650    int len;
651    char *res;
652
653    while : true=0, false=0
w
hile ((* dereference : enter=0, leave=0
*
pos : server/util.c line=649 column=17
p
os != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
stop : server/util.c line=647 column=75
s
top) && : true=0, false=0
&
MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
pos : server/util.c line=649 column=17
p
os) {
654        ++ : pass=0
+
+pos : server/util.c line=649 column=17
p
os;
655    }
656
657    len : server/util.c line=650 column=9
l
en = : pass=0
=
 pos : server/util.c line=649 column=17
p
os - : pass=0
-
 * dereference : enter=0, leave=0
*
line : server/util.c line=647 column=64
l
ine;
658    res : server/util.c line=651 column=11
r
es = : pass=0
=
 (char *)apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(atrans : server/util.c line=647 column=43
a
trans, len : server/util.c line=650 column=9
l
en + : pass=0
+
 1);
659    memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(res : server/util.c line=651 column=11
r
es, * dereference : enter=0, leave=0
*
line : server/util.c line=647 column=64
l
ine, len : server/util.c line=650 column=9
l
en);
660    res : server/util.c line=651 column=11
r
es[len : server/util.c line=650 column=9
l
en] = : enter=0, leave=0
=
 0;
661
662    if : true=0, false=0
i
f (stop : server/util.c line=647 column=75
s
top) {
663        while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
pos : server/util.c line=649 column=17
p
os == : true=0, false=0
=
stop : server/util.c line=647 column=75
s
top) {
664            ++ : pass=0
+
+pos : server/util.c line=649 column=17
p
os;
665        }
666    }
667    *line : server/util.c line=647 column=64
l
ine = : enter=0, leave=0
=
 pos : server/util.c line=649 column=17
p
os;
668
669    return : pass=0
r
eturn res : server/util.c line=651 column=11
r
es;
670}
671
672AP_DECLARE(char *) ap_getword_white_nc : call=0
a
p_getword_white_nc(apr_pool_t *atrans, char **line)
673{
674    return : pass=0
r
eturn ap_getword_white : enter=0, leave=0

ap_getword_white : include/httpd.h line=1318 column=20
a
p_getword_white(atrans : server/util.c line=672 column=52
a
trans, (const char **) line : server/util.c line=672 column=67
l
ine);
675}
676
677AP_DECLARE(char *) ap_getword_white : call=0
a
p_getword_white(apr_pool_t *atrans, const char **line)
678{
679    const char *pos = * dereference : enter=0, leave=0
*
line : server/util.c line=677 column=70
l
ine;
680    int len;
681    char *res;
682
683    while : true=0, false=0
w
hile (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isspace(* dereference : enter=0, leave=0
*
pos : server/util.c line=679 column=17
p
os) && : true=0, false=0
&
MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
pos : server/util.c line=679 column=17
p
os) {
684        ++ : pass=0
+
+pos : server/util.c line=679 column=17
p
os;
685    }
686
687    len : server/util.c line=680 column=9
l
en = : pass=0
=
 pos : server/util.c line=679 column=17
p
os - : pass=0
-
 * dereference : enter=0, leave=0
*
line : server/util.c line=677 column=70
l
ine;
688    res : server/util.c line=681 column=11
r
es = : pass=0
=
 (char *)apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(atrans : server/util.c line=677 column=49
a
trans, len : server/util.c line=680 column=9
l
en + : pass=0
+
 1);
689    memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(res : server/util.c line=681 column=11
r
es, * dereference : enter=0, leave=0
*
line : server/util.c line=677 column=70
l
ine, len : server/util.c line=680 column=9
l
en);
690    res : server/util.c line=681 column=11
r
es[len : server/util.c line=680 column=9
l
en] = : enter=0, leave=0
=
 0;
691
692    while : true=0, false=0
w
hile (apr_isspace(* dereference : enter=0, leave=0
*
pos : server/util.c line=679 column=17
p
os)) {
693        ++ : pass=0
+
+pos : server/util.c line=679 column=17
p
os;
694    }
695
696    *line : server/util.c line=677 column=70
l
ine = : enter=0, leave=0
=
 pos : server/util.c line=679 column=17
p
os;
697
698    return : pass=0
r
eturn res : server/util.c line=681 column=11
r
es;
699}
700
701AP_DECLARE(char *) ap_getword_nulls_nc : call=0
a
p_getword_nulls_nc(apr_pool_t *atrans, char **line,
702                                       char stop)
703{
704    return : pass=0
r
eturn ap_getword_nulls : enter=0, leave=0

ap_getword_nulls : include/httpd.h line=1338 column=20
a
p_getword_nulls(atrans : server/util.c line=701 column=52
a
trans, (const char **) line : server/util.c line=701 column=67
l
ine, stop : server/util.c line=702 column=45
s
top);
705}
706
707AP_DECLARE(char *) ap_getword_nulls : call=0
a
p_getword_nulls(apr_pool_t *atrans, const char **line,
708                                    char stop)
709{
710    const char *pos = ap_strchr_c(* dereference : enter=0, leave=0
*
line : server/util.c line=707 column=70
l
ine, stop : server/util.c line=708 column=42
s
top);
711    char *res;
712
713    if : true=0, false=0
i
f (! : true=0, false=0
!
pos : server/util.c line=710 column=17
p
os) {
714        res : server/util.c line=711 column=11
r
es = : pass=0
=
 apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(atrans : server/util.c line=707 column=49
a
trans, * dereference : enter=0, leave=0
*
line : server/util.c line=707 column=70
l
ine);
715        * dereference : enter=0, leave=0
*
line : server/util.c line=707 column=70
l
ine += : enter=0, leave=0
+
strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(* dereference : enter=0, leave=0
*
line : server/util.c line=707 column=70
l
ine);
716        return : pass=0
r
eturn res : server/util.c line=711 column=11
r
es;
717    }
718
719    res : server/util.c line=711 column=11
r
es = : pass=0
=
 apr_pstrndup : enter=0, leave=0

apr_pstrndup : /usr/include/apr-1/apr_strings.h line=121 column=21
a
pr_pstrndup(atrans : server/util.c line=707 column=49
a
trans, * dereference : enter=0, leave=0
*
line : server/util.c line=707 column=70
l
ine, pos : server/util.c line=710 column=17
p
os - : pass=0
-
 * dereference : enter=0, leave=0
*
line : server/util.c line=707 column=70
l
ine);
720
721    ++ : pass=0
+
+pos : server/util.c line=710 column=17
p
os;
722
723    *line : server/util.c line=707 column=70
l
ine = : enter=0, leave=0
=
 pos : server/util.c line=710 column=17
p
os;
724
725    return : pass=0
r
eturn res : server/util.c line=711 column=11
r
es;
726}
727
728/* Get a word, (new) config-file style --- quoted strings and backslashes
729 * all honored
730 */
731
732static char *substring_conf : call=0
s
ubstring_conf(apr_pool_t *p, const char *start, int len,
733                            char quote)
734{
735    char *result = apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=732 column=41
p
len : server/util.c line=732 column=67
l
en + : pass=0
+
 2);
736    char *resp = result : server/util.c line=735 column=11
r
esult;
737    int i;
738
739    for : true=0, false=0
f
or (i : server/util.c line=737 column=9
i
 = : pass=0
=
 0; i : server/util.c line=737 column=9
i
 < : true=0, false=0
<
 len : server/util.c line=732 column=67
l
en; ++ : pass=0
+
+i : server/util.c line=737 column=9
i
) {
740        if : true=0, false=0
i
f (start : server/util.c line=732 column=56
s
tart[] : enter=0, leave=0
[
i : server/util.c line=737 column=9
i
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\' && : true=0, false=0
&
& (start : server/util.c line=732 column=56
s
tart[] : enter=0, leave=0
[
i : server/util.c line=737 column=9
i
 + : pass=0
+
 1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\'
741                                 || : true=0, false=0
|
| (MC/DC independently affect : true=0, false=0

quote : server/util.c line=733 column=34
qTF
uote && : true=0, false=0
&
start : server/util.c line=732 column=56
s
tart[] : enter=0, leave=0
[
i : server/util.c line=737 column=9
i
 + : pass=0
+
 1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
quote : server/util.c line=733 column=34
q
uote)))
742            *resp : server/util.c line=736 column=11
r
esp++ : pass=0
+
= : enter=0, leave=0
=
 start : server/util.c line=732 column=56
s
tart[] : enter=0, leave=0
[
++ : pass=0
+
+i : server/util.c line=737 column=9
i
];
743        else
744            *resp : server/util.c line=736 column=11
r
esp++ : pass=0
+
= : enter=0, leave=0
=
 start : server/util.c line=732 column=56
s
tart[] : enter=0, leave=0
[
i : server/util.c line=737 column=9
i
];
745    }
746
747    *resp : server/util.c line=736 column=11
r
esp++ : pass=0
+
= : enter=0, leave=0
=
 '\0';
748#if RESOLVE_ENV_PER_TOKEN
749    return (char *)ap_resolve_env(p,result);
750#else
751    return : pass=0
r
eturn result : server/util.c line=735 column=11
r
esult;
752#endif
753}
754
755AP_DECLARE(char *) ap_getword_conf_nc : call=0
a
p_getword_conf_nc(apr_pool_t *p, char **line)
756{
757    return : pass=0
r
eturn ap_getword_conf : enter=0, leave=0

ap_getword_conf : include/httpd.h line=1358 column=20
a
p_getword_conf(p : server/util.c line=755 column=51
p
, (const char **) line : server/util.c line=755 column=61
l
ine);
758}
759
760AP_DECLARE(char *) ap_getword_conf : call=0
a
p_getword_conf(apr_pool_t *p, const char **line)
761{
762    const char *str = * dereference : enter=0, leave=0
*
line : server/util.c line=760 column=64
l
ine, *strend;
763    char *res;
764    char quote;
765
766    while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
str : server/util.c line=762 column=17
s
tr && : true=0, false=0
&
& apr_isspace(* dereference : enter=0, leave=0
*
str : server/util.c line=762 column=17
s
tr))
767        ++ : pass=0
+
+str : server/util.c line=762 column=17
s
tr;
768
769    if : true=0, false=0
i
f (! : true=0, false=0
!
* dereference : enter=0, leave=0
*
str : server/util.c line=762 column=17
s
tr) {
770        *line : server/util.c line=760 column=64
l
ine = : enter=0, leave=0
=
 str : server/util.c line=762 column=17
s
tr;
771        return : pass=0
r
eturn "";
772    }
773
774    if : true=0, false=0
i
f ((quote : server/util.c line=764 column=10
q
uote = : pass=0
=
 * dereference : enter=0, leave=0
*
str : server/util.c line=762 column=17
s
tr) == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '"' || : true=0, false=0
|
quote : server/util.c line=764 column=10
q
uote == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\'') {
775        strend : server/util.c line=762 column=31
s
trend = : pass=0
=
 str : server/util.c line=762 column=17
s
tr + : pass=0
+
 1;
776        while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
strend : server/util.c line=762 column=31
s
trend && : true=0, false=0
&
* dereference : enter=0, leave=0
*
strend : server/util.c line=762 column=31
s
trend != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
quote : server/util.c line=764 column=10
q
uote) {
777            if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
strend : server/util.c line=762 column=31
s
trend == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\' && : true=0, false=0
&
strend : server/util.c line=762 column=31
s
trendMC/DC independently affect : true=0, false=0
[] : enter=0, leave=0
[TF
1] && : true=0, false=0
&
&
778                (strend : server/util.c line=762 column=31
s
trend[] : enter=0, leave=0
[
1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
quote : server/util.c line=764 column=10
q
uote || : true=0, false=0
|
strend : server/util.c line=762 column=31
s
trend[] : enter=0, leave=0
[
1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\')) {
779                strend : server/util.c line=762 column=31
s
trend += : pass=0
+
= 2;
780            }
781            else {
782                ++ : pass=0
+
+strend : server/util.c line=762 column=31
s
trend;
783            }
784        }
785        res : server/util.c line=763 column=11
r
es = : pass=0
=
 substring_conf : enter=0, leave=0

substring_conf : server/util.c line=732 column=14
s
ubstring_conf(p : server/util.c line=760 column=48
p
str : server/util.c line=762 column=17
s
tr + : pass=0
+
 1, strend : server/util.c line=762 column=31
s
trend - : pass=0
-
 str : server/util.c line=762 column=17
s
tr - : pass=0
-
 1, quote : server/util.c line=764 column=10
q
uote);
786
787        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
strend : server/util.c line=762 column=31
s
trend == : true=0, false=0
=
quote : server/util.c line=764 column=10
q
uote)
788            ++ : pass=0
+
+strend : server/util.c line=762 column=31
s
trend;
789    }
790    else {
791        strend : server/util.c line=762 column=31
s
trend = : pass=0
=
 str : server/util.c line=762 column=17
s
tr;
792        while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
strend : server/util.c line=762 column=31
s
trend && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isspace(* dereference : enter=0, leave=0
*
strend : server/util.c line=762 column=31
s
trend))
793            ++ : pass=0
+
+strend : server/util.c line=762 column=31
s
trend;
794
795        res : server/util.c line=763 column=11
r
es = : pass=0
=
 substring_conf : enter=0, leave=0

substring_conf : server/util.c line=732 column=14
s
ubstring_conf(p : server/util.c line=760 column=48
p
str : server/util.c line=762 column=17
s
tr, strend : server/util.c line=762 column=31
s
trend - : pass=0
-
 str : server/util.c line=762 column=17
s
tr, 0);
796    }
797
798    while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
strend : server/util.c line=762 column=31
s
trend && : true=0, false=0
&
& apr_isspace(* dereference : enter=0, leave=0
*
strend : server/util.c line=762 column=31
s
trend))
799        ++ : pass=0
+
+strend : server/util.c line=762 column=31
s
trend;
800    *line : server/util.c line=760 column=64
l
ine = : enter=0, leave=0
=
 strend : server/util.c line=762 column=31
s
trend;
801    return : pass=0
r
eturn res : server/util.c line=763 column=11
r
es;
802}
803
804/* Check a string for any ${ENV} environment variable
805 * construct and replace each them by the value of
806 * that environment variable, if it exists. If the
807 * environment value does not exist, leave the ${ENV}
808 * construct alone; it means something else.
809 */
810AP_DECLARE(const char *) ap_resolve_env : call=0
a
p_resolve_env(apr_pool_t *p, const char * word)
811{
812# define SMALL_EXPANSION 5
813    struct sll {
814        struct sll *next;
815        const char *string;
816        apr_size_t len;
817    } *result, *current, sresult[SMALL_EXPANSION];
818    char *res_buf, *cp;
819    const char *s, *e, *ep;
820    unsigned spc;
821    apr_size_t outlen;
822
823    s : server/util.c line=819 column=17
s
 = : pass=0
=
 ap_strchr_c(word : server/util.c line=810 column=69
w
ord, '$');
824    if : true=0, false=0
i
f (! : true=0, false=0
!
s : server/util.c line=819 column=17
s
) {
825        return : pass=0
r
eturn word : server/util.c line=810 column=69
w
ord;
826    }
827
828    /* well, actually something to do */
829    ep : server/util.c line=819 column=25
e
= : pass=0
=
 word : server/util.c line=810 column=69
w
ord + : pass=0
+
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(word : server/util.c line=810 column=69
w
ord);
830    spc : server/util.c line=820 column=14
s
pc = : pass=0
=
 0;
831    result : server/util.c line=817 column=8
r
esult = : pass=0
=
 current : server/util.c line=817 column=17
c
urrent = : pass=0
=
 &(sresult : server/util.c line=817 column=26
s
result[] : enter=0, leave=0
[
spc : server/util.c line=820 column=14
s
pc++ : pass=0
+
+]);
832    current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>next : server/util.c line=814 column=21
n
ext = : enter=0, leave=0
=
 NULL;
833    current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>string : server/util.c line=815 column=21
s
tring = : enter=0, leave=0
=
 word : server/util.c line=810 column=69
w
ord;
834    current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en = : enter=0, leave=0
=
 s : server/util.c line=819 column=17
s
 - : pass=0
-
 word : server/util.c line=810 column=69
w
ord;
835    outlen : server/util.c line=821 column=16
o
utlen = : pass=0
=
 current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en;
836
837    do {
838        /* prepare next entry */
839        if : true=0, false=0
i
f (current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en) {
840            current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>next : server/util.c line=814 column=21
n
ext = : enter=0, leave=0
=
 (spc : server/util.c line=820 column=14
s
pc < : true=0, false=0
<
 SMALL_EXPANSION)
841                            conditional operator : true=0, false=0
?
 &(sresult : server/util.c line=817 column=26
s
result[] : enter=0, leave=0
[
spc : server/util.c line=820 column=14
s
pc++ : pass=0
+
+])
842                            : (struct sll *)apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=810 column=53
p
,
843                                                       sizeof(*current->next));
844            current : server/util.c line=817 column=17
c
urrent = : pass=0
=
 current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>next : server/util.c line=814 column=21
n
ext;
845            current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>next : server/util.c line=814 column=21
n
ext = : enter=0, leave=0
=
 NULL;
846            current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en = : enter=0, leave=0
=
 0;
847        }
848
849        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
s : server/util.c line=819 column=17
s
 == : true=0, false=0
=
= '$') {
850            if : true=0, false=0
i
f (s : server/util.c line=819 column=17
s
[] : enter=0, leave=0
[
1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '{' && : true=0, false=0
&
& (e : server/util.c line=819 column=21
e
 = : pass=0
MC/DC independently affect : true=0, false=0
=TF
 ap_strchr_c(s : server/util.c line=819 column=17
s
, '}'))) {
851                word : server/util.c line=810 column=69
w
ord = : pass=0
=
 getenv : enter=0, leave=0

getenv : /usr/include/stdlib.h line=567 column=14
g
etenv(apr_pstrndup : enter=0, leave=0

apr_pstrndup : /usr/include/apr-1/apr_strings.h line=121 column=21
a
pr_pstrndup(p : server/util.c line=810 column=53
p
s : server/util.c line=819 column=17
s
+ : pass=0
+
2, e : server/util.c line=819 column=21
e
- : pass=0
-
s : server/util.c line=819 column=17
s
- : pass=0
-
2));
852                if : true=0, false=0
i
f (word : server/util.c line=810 column=69
w
ord) {
853                    current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>string : server/util.c line=815 column=21
s
tring = : enter=0, leave=0
=
 word : server/util.c line=810 column=69
w
ord;
854                    current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en = : enter=0, leave=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(word : server/util.c line=810 column=69
w
ord);
855                    outlen : server/util.c line=821 column=16
o
utlen += : pass=0
+
current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en;
856                }
857                else {
858                    current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>string : server/util.c line=815 column=21
s
tring = : enter=0, leave=0
=
 s : server/util.c line=819 column=17
s
;
859                    current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en = : enter=0, leave=0
=
 e : server/util.c line=819 column=21
e
 - : pass=0
-
 s : server/util.c line=819 column=17
s
 + : pass=0
+
 1;
860                    outlen : server/util.c line=821 column=16
o
utlen += : pass=0
+
current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en;
861                }
862                s : server/util.c line=819 column=17
s
 = : pass=0
=
 e : server/util.c line=819 column=21
e
 + : pass=0
+
 1;
863            }
864            else {
865                current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>string : server/util.c line=815 column=21
s
tring = : enter=0, leave=0
=
 s : server/util.c line=819 column=17
s
++ : pass=0
+
+;
866                current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en = : enter=0, leave=0
=
 1;
867                ++ : pass=0
+
+outlen : server/util.c line=821 column=16
o
utlen;
868            }
869        }
870        else {
871            word : server/util.c line=810 column=69
w
ord = : pass=0
=
 s : server/util.c line=819 column=17
s
;
872            s : server/util.c line=819 column=17
s
 = : pass=0
=
 ap_strchr_c(s : server/util.c line=819 column=17
s
, '$');
873            current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>string : server/util.c line=815 column=21
s
tring = : enter=0, leave=0
=
 word : server/util.c line=810 column=69
w
ord;
874            current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en = : enter=0, leave=0
=
 s : server/util.c line=819 column=17
s
 conditional operator : true=0, false=0
?
 s : server/util.c line=819 column=17
s
 - : pass=0
-
 word : server/util.c line=810 column=69
w
ord : ep : server/util.c line=819 column=25
e
- : pass=0
-
 word : server/util.c line=810 column=69
w
ord;
875            outlen : server/util.c line=821 column=16
o
utlen += : pass=0
+
current : server/util.c line=817 column=17
c
urrent-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en;
876        }
877    } while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0

s : server/util.c line=819 column=17
sTF
 && : true=0, false=0
&
MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
s : server/util.c line=819 column=17
s
);
878
879    /* assemble result */
880    res_buf : server/util.c line=818 column=11
r
es_buf = : pass=0
=
 cp : server/util.c line=818 column=21
c
= : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=810 column=53
p
outlen : server/util.c line=821 column=16
o
utlen + : pass=0
+
 1);
881    do {
882        if : true=0, false=0
i
f (result : server/util.c line=817 column=8
r
esult-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en) {
883            memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(cp : server/util.c line=818 column=21
c
p, result : server/util.c line=817 column=8
r
esult-> : enter=0, leave=0
-
>string : server/util.c line=815 column=21
s
tring, result : server/util.c line=817 column=8
r
esult-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en);
884            cp : server/util.c line=818 column=21
c
+= : pass=0
+
result : server/util.c line=817 column=8
r
esult-> : enter=0, leave=0
-
>len : server/util.c line=816 column=20
l
en;
885        }
886        result : server/util.c line=817 column=8
r
esult = : pass=0
=
 result : server/util.c line=817 column=8
r
esult-> : enter=0, leave=0
-
>next : server/util.c line=814 column=21
n
ext;
887    } while : true=0, false=0
w
hile (result : server/util.c line=817 column=8
r
esult);
888    res_buf : server/util.c line=818 column=11
r
es_buf[outlen : server/util.c line=821 column=16
o
utlen] = : enter=0, leave=0
=
 '\0';
889
890    return : pass=0
r
eturn res_buf : server/util.c line=818 column=11
r
es_buf;
891}
892
893AP_DECLARE(int) ap_cfg_closefile : call=1
a
p_cfg_closefile(ap_configfile_t *cfp)
894{
895#ifdef DEBUG
896    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
897        "Done with config file %s", cfp->name);
898#endif
899    return : pass=1
r
eturn (cfp : server/util.c line=893 column=51
c
fp-> : enter=1, leave=1
-
>close : include/http_config.h line=262 column=11
c
lose == : true=0, false=1
=
= NULL) conditional operator : true=0, false=1
?
 0 : close : enter=1, leave=1

cfp : server/util.c line=893 column=51
close : include/http_config.h line=262 column=11
c
fp-> : enter=1, leave=1
-
>close : include/http_config.h line=262 column=11
c
lose(cfp : server/util.c line=893 column=51
c
fp-> : enter=1, leave=1
-
>param : include/http_config.h line=263 column=11
p
aram);
900}
901
902static apr_status_t cfg_close : call=0
c
fg_close(void *param)
903{
904    apr_file_t *cfp = (apr_file_t *) param : server/util.c line=902 column=37
p
aram;
905    return : pass=0
r
eturn (apr_file_close : enter=0, leave=0

apr_file_close : /usr/include/apr-1/apr_file_io.h line=243 column=27
a
pr_file_close(cfp : server/util.c line=904 column=17
c
fp));
906}
907
908static int cfg_getch : call=0
c
fg_getch(void *param)
909{
910    char ch;
911    apr_file_t *cfp = (apr_file_t *) param : server/util.c line=908 column=28
p
aram;
912    if : true=0, false=0
i
f (apr_file_getc : enter=0, leave=0

apr_file_getc : /usr/include/apr-1/apr_file_io.h line=526 column=27
a
pr_file_getc(&ch : server/util.c line=910 column=10
c
h, cfp : server/util.c line=911 column=17
c
fp) == : true=0, false=0
=
= APR_SUCCESS)
913        return : pass=0
r
eturn ch : server/util.c line=910 column=10
c
h;
914    return : pass=0
r
eturn (int)EOF;
915}
916
917static void *cfg_getstr : call=0
c
fg_getstr(void *buf, size_t bufsiz, void *param)
918{
919    apr_file_t *cfp = (apr_file_t *) param : server/util.c line=917 column=57
p
aram;
920    apr_status_t rv;
921    rv : server/util.c line=920 column=18
r
= : pass=0
=
 apr_file_gets : enter=0, leave=0

apr_file_gets : /usr/include/apr-1/apr_file_io.h line=542 column=27
a
pr_file_gets(buf : server/util.c line=917 column=31
b
uf, bufsiz : server/util.c line=917 column=43
b
ufsiz, cfp : server/util.c line=919 column=17
c
fp);
922    if : true=0, false=0
i
f (rv : server/util.c line=920 column=18
r
== : true=0, false=0
=
= APR_SUCCESS) {
923        return : pass=0
r
eturn buf : server/util.c line=917 column=31
b
uf;
924    }
925    return : pass=0
r
eturn NULL;
926}
927
928/* Open a ap_configfile_t as FILE, return open ap_configfile_t struct pointer */
929AP_DECLARE(apr_status_t) ap_pcfg_openfile : call=1
a
p_pcfg_openfile(ap_configfile_t **ret_cfg,
930                                          apr_pool_t *p, const char *name)
931{
932    ap_configfile_t *new_cfg;
933    apr_file_t *file = NULL;
934    apr_finfo_t finfo;
935    apr_status_t status;
936#ifdef DEBUG
937    char buf[120];
938#endif
939
940    if : true=0, false=1
i
f (name : server/util.c line=930 column=70
n
ame == : true=0, false=1
=
= NULL) {
941        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
942               "Internal error: pcfg_openfile() called with NULL filename");
943        return : pass=0
r
eturn APR_EBADF;
944    }
945
946    status : server/util.c line=935 column=18
s
tatus = : pass=1
=
 apr_file_open : enter=1, leave=1

apr_file_open : /usr/include/apr-1/apr_file_io.h line=235 column=27
a
pr_file_open(&file : server/util.c line=933 column=17
f
ile, name : server/util.c line=930 column=70
n
ame, APR_READ | : pass=1
|
 APR_BUFFERED,
947                           APR_OS_DEFAULT, p : server/util.c line=930 column=55
p
);
948#ifdef DEBUG
949    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
950                "Opening config file %s (%s)",
951                name, (status != APR_SUCCESS) ?
952                apr_strerror(status, buf, sizeof(buf)) : "successful");
953#endif
954    if : true=1, false=0
i
f (status : server/util.c line=935 column=18
s
tatus != : true=1, false=0
!
= APR_SUCCESS)
955        return : pass=1
r
eturn status : server/util.c line=935 column=18
s
tatus;
956
957    status : server/util.c line=935 column=18
s
tatus = : pass=0
=
 apr_file_info_get : enter=0, leave=0

apr_file_info_get : /usr/include/apr-1/apr_file_io.h line=848 column=27
a
pr_file_info_get(&finfo : server/util.c line=934 column=17
f
info, APR_FINFO_TYPE, file : server/util.c line=933 column=17
f
ile);
958    if : true=0, false=0
i
f (status : server/util.c line=935 column=18
s
tatus != : true=0, false=0
!
= APR_SUCCESS)
959        return : pass=0
r
eturn status : server/util.c line=935 column=18
s
tatus;
960
961    if : true=0, false=0
i
f (finfo : server/util.c line=934 column=17
f
info.filetype : /usr/include/apr-1/apr_file_info.h line=186 column=20 filetype != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
APR_REG : /usr/include/apr-1/apr_file_info.h line=64 column=5 APR_REG && : true=0, false=0
&
&
962#if defined(WIN32) || defined(OS2) || defined(NETWARE)
963        strcasecmp(apr_filepath_name_get(name), "nul") != 0) {
964#else
965        strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(name : server/util.c line=930 column=70
n
ame, "/dev/null") != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= 0) {
966#endif /* WIN32 || OS2 */
967        ap_log_error : enter=0, leave=0

ap_log_error : include/http_log.h line=171 column=18
a
p_log_error(APLOG_MARK, APLOG_ERR, 0, NULL,
968                     "Access to file %s denied by server: not a regular file",
969                     name : server/util.c line=930 column=70
n
ame);
970        apr_file_close : enter=0, leave=0

apr_file_close : /usr/include/apr-1/apr_file_io.h line=243 column=27
a
pr_file_close(file : server/util.c line=933 column=17
f
ile);
971        return : pass=0
r
eturn APR_EBADF;
972    }
973
974#ifdef WIN32
975    /* Some twisted character [no pun intended] at MS decided that a
976     * zero width joiner as the lead wide character would be ideal for
977     * describing Unicode text files.  This was further convoluted to
978     * another MSism that the same character mapped into utf-8, EF BB BF
979     * would signify utf-8 text files.
980     *
981     * Since MS configuration files are all protecting utf-8 encoded
982     * Unicode path, file and resource names, we already have the correct
983     * WinNT encoding.  But at least eat the stupid three bytes up front.
984     */
985    {
986        unsigned char buf[4];
987        apr_size_t len = 3;
988        status = apr_file_read(file, buf, &len);
989        if ((status != APR_SUCCESS) || (len < 3)
990              || memcmp(buf, "\xEF\xBB\xBF", 3) != 0) {
991            apr_off_t zero = 0;
992            apr_file_seek(file, APR_SET, &zero);
993        }
994    }
995#endif
996
997    new_cfg : server/util.c line=932 column=22
n
ew_cfg = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=930 column=55
p
, sizeof(*new_cfg));
998    new_cfg : server/util.c line=932 column=22
n
ew_cfg-> : enter=0, leave=0
-
>param : include/http_config.h line=263 column=11
p
aram = : enter=0, leave=0
=
 file : server/util.c line=933 column=17
f
ile;
999    new_cfg : server/util.c line=932 column=22
n
ew_cfg-> : enter=0, leave=0
-
>name : include/http_config.h line=264 column=17
n
ame = : enter=0, leave=0
=
 apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(p : server/util.c line=930 column=55
p
name : server/util.c line=930 column=70
n
ame);
1000    new_cfg : server/util.c line=932 column=22
n
ew_cfg-> : enter=0, leave=0
-
>getch : include/http_config.h line=259 column=11
g
etch = : enter=0, leave=0
=
 (int (*)(void *)) cfg_getch : server/util.c line=908 column=12
c
fg_getch;
1001    new_cfg : server/util.c line=932 column=22
n
ew_cfg-> : enter=0, leave=0
-
>getstr : include/http_config.h line=260 column=13
g
etstr = : enter=0, leave=0
=
 (void *(*)(void *, size_t, void *)) cfg_getstr : server/util.c line=917 column=14
c
fg_getstr;
1002    new_cfg : server/util.c line=932 column=22
n
ew_cfg-> : enter=0, leave=0
-
>close : include/http_config.h line=262 column=11
c
lose = : enter=0, leave=0
=
 (int (*)(void *)) cfg_close : server/util.c line=902 column=21
c
fg_close;
1003    new_cfg : server/util.c line=932 column=22
n
ew_cfg-> : enter=0, leave=0
-
>line_number : include/http_config.h line=265 column=14
l
ine_number = : enter=0, leave=0
=
 0;
1004    *ret_cfg : server/util.c line=929 column=61
r
et_cfg = : enter=0, leave=0
=
 new_cfg : server/util.c line=932 column=22
n
ew_cfg;
1005    return : pass=0
r
eturn APR_SUCCESS;
1006}
1007
1008
1009/* Allocate a ap_configfile_t handle with user defined functions and params */
1010AP_DECLARE(ap_configfile_t *) ap_pcfg_open_custom : call=1
a
p_pcfg_open_custom(apr_pool_t *p,
1011                       const char *descr,
1012                       void *param,
1013                       int(*getch)(void *param),
1014                       void *(*getstr) (void *buf, size_t bufsiz, void *param),
1015                       int(*close_func)(void *param))
1016{
1017    ap_configfile_t *new_cfg = apr_palloc : enter=1, leave=1

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=1010 column=63
p
, sizeof(*new_cfg));
1018#ifdef DEBUG
1019    ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
1020                 "Opening config handler %s", descr);
1021#endif
1022    new_cfg : server/util.c line=1017 column=22
n
ew_cfg-> : enter=1, leave=1
-
>param : include/http_config.h line=263 column=11
p
aram = : enter=1, leave=1
=
 param : server/util.c line=1012 column=30
p
aram;
1023    new_cfg : server/util.c line=1017 column=22
n
ew_cfg-> : enter=1, leave=1
-
>name : include/http_config.h line=264 column=17
n
ame = : enter=1, leave=1
=
 descr : server/util.c line=1011 column=36
d
escr;
1024    new_cfg : server/util.c line=1017 column=22
n
ew_cfg-> : enter=1, leave=1
-
>getch : include/http_config.h line=259 column=11
g
etch = : enter=1, leave=1
=
 getch : server/util.c line=1013 column=29
g
etch;
1025    new_cfg : server/util.c line=1017 column=22
n
ew_cfg-> : enter=1, leave=1
-
>getstr : include/http_config.h line=260 column=13
g
etstr = : enter=1, leave=1
=
 getstr : server/util.c line=1014 column=32
g
etstr;
1026    new_cfg : server/util.c line=1017 column=22
n
ew_cfg-> : enter=1, leave=1
-
>close : include/http_config.h line=262 column=11
c
lose = : enter=1, leave=1
=
 close_func : server/util.c line=1015 column=29
c
lose_func;
1027    new_cfg : server/util.c line=1017 column=22
n
ew_cfg-> : enter=1, leave=1
-
>line_number : include/http_config.h line=265 column=14
l
ine_number = : enter=1, leave=1
=
 0;
1028    return : pass=1
r
eturn new_cfg : server/util.c line=1017 column=22
n
ew_cfg;
1029}
1030
1031/* Read one character from a configfile_t */
1032AP_DECLARE(int) ap_cfg_getc : call=0
a
p_cfg_getc(ap_configfile_t *cfp)
1033{
1034    register int ch = getch : enter=0, leave=0

cfp : server/util.c line=1032 column=46
getch : include/http_config.h line=259 column=11
c
fp-> : enter=0, leave=0
-
>getch : include/http_config.h line=259 column=11
g
etch(cfp : server/util.c line=1032 column=46
c
fp-> : enter=0, leave=0
-
>param : include/http_config.h line=263 column=11
p
aram);
1035    if : true=0, false=0
i
f (ch : server/util.c line=1034 column=18
c
== : true=0, false=0
=
= LF)
1036        ++ : pass=0
+
+cfp : server/util.c line=1032 column=46
c
fp-> : enter=0, leave=0
-
>line_number : include/http_config.h line=265 column=14
l
ine_number;
1037    return : pass=0
r
eturn ch : server/util.c line=1034 column=18
c
h;
1038}
1039
1040/* Read one line from open ap_configfile_t, strip LF, increase line number */
1041/* If custom handler does not define a getstr() function, read char by char */
1042AP_DECLARE(int) ap_cfg_getline : call=1
a
p_cfg_getline(char *buf, size_t bufsize, ap_configfile_t *cfp)
1043{
1044    /* If a "get string" function is defined, use it */
1045    if : true=1, false=0
i
f (cfp : server/util.c line=1042 column=76
c
fp-> : enter=1, leave=1
-
>getstr : include/http_config.h line=260 column=13
g
etstr != : true=1, false=0
!
= NULL) {
1046        char *src, *dst;
1047        char *cp;
1048        char *cbuf = buf : server/util.c line=1042 column=38
b
uf;
1049        size_t cbufsize = bufsize : server/util.c line=1042 column=50
b
ufsize;
1050
1051        while : true=1, false=0
w
hile (1) {
1052            ++ : pass=1
+
+cfp : server/util.c line=1042 column=76
c
fp-> : enter=1, leave=1
-
>line_number : include/http_config.h line=265 column=14
l
ine_number;
1053            if : true=1, false=0
i
f (getstr : enter=1, leave=1

cfp : server/util.c line=1042 column=76
getstr : include/http_config.h line=260 column=13
c
fp-> : enter=1, leave=1
-
>getstr : include/http_config.h line=260 column=13
g
etstr(cbuf : server/util.c line=1048 column=15
c
buf, cbufsize : server/util.c line=1049 column=16
c
bufsize, cfp : server/util.c line=1042 column=76
c
fp-> : enter=1, leave=1
-
>param : include/http_config.h line=263 column=11
p
aram) == : true=1, false=0
=
= NULL)
1054                return : pass=1
r
eturn 1;
1055
1056            /*
1057             *  check for line continuation,
1058             *  i.e. match [^\\]\\[\r]\n only
1059             */
1060            cp : server/util.c line=1047 column=15
c
= : pass=0
=
 cbuf : server/util.c line=1048 column=15
c
buf;
1061            while : true=0, false=0
w
hile (cp : server/util.c line=1047 column=15
c
< : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 cbuf : server/util.c line=1048 column=15
c
buf+ : pass=0
+
cbufsize : server/util.c line=1049 column=16
c
bufsize && : true=0, false=0
&
* dereference : enter=0, leave=0
*
cp : server/util.c line=1047 column=15
c
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '\0')
1062                cp : server/util.c line=1047 column=15
c
p++ : pass=0
+
+;
1063            if : true=0, false=0
i
f (cp : server/util.c line=1047 column=15
c
> : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 cbuf : server/util.c line=1048 column=15
c
buf && : true=0, false=0
&
cp : server/util.c line=1047 column=15
c
p[] : enter=0, leave=0
[
-1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= LF) {
1064                cp : server/util.c line=1047 column=15
c
p-- : pass=0
-
-;
1065                if : true=0, false=0
i
f (cp : server/util.c line=1047 column=15
c
> : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 cbuf : server/util.c line=1048 column=15
c
buf && : true=0, false=0
&
cp : server/util.c line=1047 column=15
c
p[] : enter=0, leave=0
[
-1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= CR)
1066                    cp : server/util.c line=1047 column=15
c
p-- : pass=0
-
-;
1067                if : true=0, false=0
i
f (cp : server/util.c line=1047 column=15
c
> : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 cbuf : server/util.c line=1048 column=15
c
buf && : true=0, false=0
&
cp : server/util.c line=1047 column=15
c
p[] : enter=0, leave=0
[
-1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\') {
1068                    cp : server/util.c line=1047 column=15
c
p-- : pass=0
-
-;
1069                    if : true=0, false=0
i
f (! : true=0, false=0
!
(cp : server/util.c line=1047 column=15
c
> : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 cbuf : server/util.c line=1048 column=15
c
buf && : true=0, false=0
&
cp : server/util.c line=1047 column=15
c
p[] : enter=0, leave=0
[
-1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\')) {
1070                        /*
1071                         * line continuation requested -
1072                         * then remove backslash and continue
1073                         */
1074                        cbufsize : server/util.c line=1049 column=16
c
bufsize -= : pass=0
-
= (cp : server/util.c line=1047 column=15
c
p- : pass=0
-
cbuf : server/util.c line=1048 column=15
c
buf);
1075                        cbuf : server/util.c line=1048 column=15
c
buf = : pass=0
=
 cp : server/util.c line=1047 column=15
c
p;
1076                        continue : pass=0
c
ontinue;
1077                    }
1078                    else {
1079                        /*
1080                         * no real continuation because escaped -
1081                         * then just remove escape character
1082                         */
1083                        for : true=0, false=0
f
or ( ; cp : server/util.c line=1047 column=15
c
< : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 cbuf : server/util.c line=1048 column=15
c
buf+ : pass=0
+
cbufsize : server/util.c line=1049 column=16
c
bufsize && : true=0, false=0
&
* dereference : enter=0, leave=0
*
cp : server/util.c line=1047 column=15
c
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '\0'; cp : server/util.c line=1047 column=15
c
p++ : pass=0
+
+)
1084                            cp : server/util.c line=1047 column=15
c
p[0] = : enter=0, leave=0
=
 cp : server/util.c line=1047 column=15
c
p[] : enter=0, leave=0
[
1];
1085                    }
1086                }
1087            }
1088            break : pass=0
b
reak;
1089        }
1090
1091        /*
1092         * Leading and trailing white space is eliminated completely
1093         */
1094        src : server/util.c line=1046 column=15
s
rc = : pass=0
=
 buf : server/util.c line=1042 column=38
b
uf;
1095        while : true=0, false=0
w
hile (apr_isspace(* dereference : enter=0, leave=0
*
src : server/util.c line=1046 column=15
s
rc))
1096            ++ : pass=0
+
+src : server/util.c line=1046 column=15
s
rc;
1097        /* blast trailing whitespace */
1098        dst : server/util.c line=1046 column=21
d
st = : pass=0
=
 &src : server/util.c line=1046 column=15
s
rc[] : enter=0, leave=0
[
strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(src : server/util.c line=1046 column=15
s
rc)];
1099        while : true=0, false=0
w
hile (-- : pass=0
-
-dst : server/util.c line=1046 column=21
d
st >= : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
src : server/util.c line=1046 column=15
s
rc && : true=0, false=0
&
& apr_isspace(* dereference : enter=0, leave=0
*
dst : server/util.c line=1046 column=21
d
st))
1100            *dst : server/util.c line=1046 column=21
d
st = : enter=0, leave=0
=
 '\0';
1101        /* Zap leading whitespace by shifting */
1102        if : true=0, false=0
i
f (src : server/util.c line=1046 column=15
s
rc != : true=0, false=0
!
buf : server/util.c line=1042 column=38
b
uf)
1103            for : true=0, false=0
f
or (dst : server/util.c line=1046 column=21
d
st = : pass=0
=
 buf : server/util.c line=1042 column=38
b
uf; (*dst : server/util.c line=1046 column=21
d
st++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
src : server/util.c line=1046 column=15
s
rc++ : pass=0
+
+) != : true=0, false=0
!
= '\0'; )
1104                ;
1105
1106#ifdef DEBUG_CFG_LINES
1107        ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL, "Read config: %s", buf);
1108#endif
1109        return : pass=0
r
eturn 0;
1110    } else {
1111        /* No "get string" function defined; read character by character */
1112        register int c;
1113        register size_t i = 0;
1114
1115        buf : server/util.c line=1042 column=38
b
uf[0] = : enter=0, leave=0
=
 '\0';
1116        /* skip leading whitespace */
1117        do {
1118            c : server/util.c line=1112 column=22
c
 = : pass=0
=
 getch : enter=0, leave=0

cfp : server/util.c line=1042 column=76
getch : include/http_config.h line=259 column=11
c
fp-> : enter=0, leave=0
-
>getch : include/http_config.h line=259 column=11
g
etch(cfp : server/util.c line=1042 column=76
c
fp-> : enter=0, leave=0
-
>param : include/http_config.h line=263 column=11
p
aram);
1119        } while : true=0, false=0
w
hile (c : server/util.c line=1112 column=22
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\t' || : true=0, false=0
|
c : server/util.c line=1112 column=22
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ' ');
1120
1121        if : true=0, false=0
i
f (c : server/util.c line=1112 column=22
c
 == : true=0, false=0
=
= EOF)
1122            return : pass=0
r
eturn 1;
1123
1124        if : true=0, false=0
i
f(bufsize : server/util.c line=1042 column=50
b
ufsize < : true=0, false=0
<
 2) {
1125            /* too small, assume caller is crazy */
1126            return : pass=0
r
eturn 1;
1127        }
1128
1129        while : true=0, false=0
w
hile (1) {
1130            if : true=0, false=0
i
f ((c : server/util.c line=1112 column=22
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\t') || : true=0, false=0
|
| (c : server/util.c line=1112 column=22
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ' ')) {
1131                buf : server/util.c line=1042 column=38
b
uf[i : server/util.c line=1113 column=25
i
++ : pass=0
+
+] = : enter=0, leave=0
=
 ' ';
1132                while : true=0, false=0
w
hile ((c : server/util.c line=1112 column=22
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\t') || : true=0, false=0
|
| (c : server/util.c line=1112 column=22
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ' '))
1133                    c : server/util.c line=1112 column=22
c
 = : pass=0
=
 getch : enter=0, leave=0

cfp : server/util.c line=1042 column=76
getch : include/http_config.h line=259 column=11
c
fp-> : enter=0, leave=0
-
>getch : include/http_config.h line=259 column=11
g
etch(cfp : server/util.c line=1042 column=76
c
fp-> : enter=0, leave=0
-
>param : include/http_config.h line=263 column=11
p
aram);
1134            }
1135            if : true=0, false=0
i
f (c : server/util.c line=1112 column=22
c
 == : true=0, false=0
=
= CR) {
1136                /* silently ignore CR (_assume_ that a LF follows) */
1137                c : server/util.c line=1112 column=22
c
 = : pass=0
=
 getch : enter=0, leave=0

cfp : server/util.c line=1042 column=76
getch : include/http_config.h line=259 column=11
c
fp-> : enter=0, leave=0
-
>getch : include/http_config.h line=259 column=11
g
etch(cfp : server/util.c line=1042 column=76
c
fp-> : enter=0, leave=0
-
>param : include/http_config.h line=263 column=11
p
aram);
1138            }
1139            if : true=0, false=0
i
f (c : server/util.c line=1112 column=22
c
 == : true=0, false=0
=
= LF) {
1140                /* increase line number and return on LF */
1141                ++ : pass=0
+
+cfp : server/util.c line=1042 column=76
c
fp-> : enter=0, leave=0
-
>line_number : include/http_config.h line=265 column=14
l
ine_number;
1142            }
1143            if : true=0, false=0
i
f (c : server/util.c line=1112 column=22
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= EOF || : true=0, false=0
|
c : server/util.c line=1112 column=22
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 0x4 || : true=0, false=0
|
c : server/util.c line=1112 column=22
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= LF || : true=0, false=0
|
i : server/util.c line=1113 column=25
i
 >= : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
= (bufsize : server/util.c line=1042 column=50
b
ufsize - : pass=0
-
 2)) {
1144                /*
1145                 *  check for line continuation
1146                 */
1147                if : true=0, false=0
i
f (i : server/util.c line=1113 column=25
i
 > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0 && : true=0, false=0
&
buf : server/util.c line=1042 column=38
b
uf[] : enter=0, leave=0
[
i : server/util.c line=1113 column=25
i
- : pass=0
-
1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\') {
1148                    i : server/util.c line=1113 column=25
i
-- : pass=0
-
-;
1149                    if : true=0, false=0
i
f (! : true=0, false=0
!
(i : server/util.c line=1113 column=25
i
 > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0 && : true=0, false=0
&
buf : server/util.c line=1042 column=38
b
uf[] : enter=0, leave=0
[
i : server/util.c line=1113 column=25
i
- : pass=0
-
1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\')) {
1150                        /* line is continued */
1151                        c : server/util.c line=1112 column=22
c
 = : pass=0
=
 getch : enter=0, leave=0

cfp : server/util.c line=1042 column=76
getch : include/http_config.h line=259 column=11
c
fp-> : enter=0, leave=0
-
>getch : include/http_config.h line=259 column=11
g
etch(cfp : server/util.c line=1042 column=76
c
fp-> : enter=0, leave=0
-
>param : include/http_config.h line=263 column=11
p
aram);
1152                        continue : pass=0
c
ontinue;
1153                    }
1154                    /* else nothing needs be done because
1155                     * then the backslash is escaped and
1156                     * we just strip to a single one
1157                     */
1158                }
1159                /* blast trailing whitespace */
1160                while : true=0, false=0
w
hile (i : server/util.c line=1113 column=25
i
 > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 0 && : true=0, false=0
&
& apr_isspace(buf : server/util.c line=1042 column=38
b
uf[] : enter=0, leave=0
[
i : server/util.c line=1113 column=25
i
 - : pass=0
-
 1]))
1161                    -- : pass=0
-
-i : server/util.c line=1113 column=25
i
;
1162                buf : server/util.c line=1042 column=38
b
uf[i : server/util.c line=1113 column=25
i
= : enter=0, leave=0
=
 '\0';
1163#ifdef DEBUG_CFG_LINES
1164                ap_log_error(APLOG_MARK, APLOG_DEBUG, 0, NULL,
1165                             "Read config: %s", buf);
1166#endif
1167                return : pass=0
r
eturn 0;
1168            }
1169            buf : server/util.c line=1042 column=38
b
uf[i : server/util.c line=1113 column=25
i
= : enter=0, leave=0
=
 c : server/util.c line=1112 column=22
c
;
1170            ++ : pass=0
+
+i : server/util.c line=1113 column=25
i
;
1171            c : server/util.c line=1112 column=22
c
 = : pass=0
=
 getch : enter=0, leave=0

cfp : server/util.c line=1042 column=76
getch : include/http_config.h line=259 column=11
c
fp-> : enter=0, leave=0
-
>getch : include/http_config.h line=259 column=11
g
etch(cfp : server/util.c line=1042 column=76
c
fp-> : enter=0, leave=0
-
>param : include/http_config.h line=263 column=11
p
aram);
1172        }
1173    }
1174}
1175
1176/* Size an HTTP header field list item, as separated by a comma.
1177 * The return value is a pointer to the beginning of the non-empty list item
1178 * within the original string (or NULL if there is none) and the address
1179 * of field is shifted to the next non-comma, non-whitespace character.
1180 * len is the length of the item excluding any beginning whitespace.
1181 */
1182AP_DECLARE(const char *) ap_size_list_item : call=0
a
p_size_list_item(const char **field, int *len)
1183{
1184    const unsigned char *ptr = (const unsigned char *)* dereference : enter=0, leave=0
*
field : server/util.c line=1182 column=57
f
ield;
1185    const unsigned char *token;
1186    int in_qpair, in_qstr, in_com;
1187
1188    /* Find first non-comma, non-whitespace byte */
1189
1190    while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
ptr : server/util.c line=1184 column=26
p
tr == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ',' || : true=0, false=0
|
| apr_isspace(* dereference : enter=0, leave=0
*
ptr : server/util.c line=1184 column=26
p
tr))
1191        ++ : pass=0
+
+ptr : server/util.c line=1184 column=26
p
tr;
1192
1193    token : server/util.c line=1185 column=26
t
oken = : pass=0
=
 ptr : server/util.c line=1184 column=26
p
tr;
1194
1195    /* Find the end of this item, skipping over dead bits */
1196
1197    for : true=0, false=0
f
or (in_qpair : server/util.c line=1186 column=9
i
n_qpair = : pass=0
=
 in_qstr : server/util.c line=1186 column=19
i
n_qstr = : pass=0
=
 in_com : server/util.c line=1186 column=28
i
n_com = : pass=0
=
 0;
1198         MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
ptr : server/util.c line=1184 column=26
p
tr && : true=0, false=0
&
& (MC/DC independently affect : true=0, false=0

in_qpair : server/util.c line=1186 column=9
iTF
n_qpair || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_qstr : server/util.c line=1186 column=19
iTF
n_qstr || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_com : server/util.c line=1186 column=28
iTF
n_com || : true=0, false=0
|
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1184 column=26
p
tr != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= ',');
1199         ++ : pass=0
+
+ptr : server/util.c line=1184 column=26
p
tr) {
1200
1201        if : true=0, false=0
i
f (in_qpair : server/util.c line=1186 column=9
i
n_qpair) {
1202            in_qpair : server/util.c line=1186 column=9
i
n_qpair = : pass=0
=
 0;
1203        }
1204        else {
1205            switch : pass=0
s
witch (* dereference : enter=0, leave=0
*
ptr : server/util.c line=1184 column=26
p
tr) {
1206                case : true=0, false=0
c
ase '\\': in_qpair : server/util.c line=1186 column=9
i
n_qpair = : pass=0
=
 1;      /* quoted-pair         */
1207                           break : pass=0
b
reak;
1208                case : true=0, false=0
c
ase '"' : if : true=0, false=0
i
f (! : true=0, false=0
!
in_com : server/util.c line=1186 column=28
i
n_com)       /* quoted string delim */
1209                               in_qstr : server/util.c line=1186 column=19
i
n_qstr = : pass=0
=
 ! : true=0, false=0
!
in_qstr : server/util.c line=1186 column=19
i
n_qstr;
1210                           break : pass=0
b
reak;
1211                case : true=0, false=0
c
ase '(' : if : true=0, false=0
i
f (! : true=0, false=0
!
in_qstr : server/util.c line=1186 column=19
i
n_qstr)      /* comment (may nest)  */
1212                               ++ : pass=0
+
+in_com : server/util.c line=1186 column=28
i
n_com;
1213                           break : pass=0
b
reak;
1214                case : true=0, false=0
c
ase ')' : if : true=0, false=0
i
f (in_com : server/util.c line=1186 column=28
i
n_com)        /* end comment         */
1215                               -- : pass=0
-
-in_com : server/util.c line=1186 column=28
i
n_com;
1216                           break : pass=0
b
reak;
1217                default : true=0, false=0
d
efault  : break : pass=0
b
reak;
1218            }
1219        }
1220    }
1221
1222    if : true=0, false=0
i
f ((*len : server/util.c line=1182 column=69
l
en = : enter=0, leave=0
=
 (ptr : server/util.c line=1184 column=26
p
tr - : pass=0
-
 token : server/util.c line=1185 column=26
t
oken)) == : true=0, false=0
=
= 0) {
1223        *field : server/util.c line=1182 column=57
f
ield = : enter=0, leave=0
=
 (const char *)ptr : server/util.c line=1184 column=26
p
tr;
1224        return : pass=0
r
eturn NULL;
1225    }
1226
1227    /* Advance field pointer to the next non-comma, non-white byte */
1228
1229    while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
ptr : server/util.c line=1184 column=26
p
tr == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ',' || : true=0, false=0
|
| apr_isspace(* dereference : enter=0, leave=0
*
ptr : server/util.c line=1184 column=26
p
tr))
1230        ++ : pass=0
+
+ptr : server/util.c line=1184 column=26
p
tr;
1231
1232    *field : server/util.c line=1182 column=57
f
ield = : enter=0, leave=0
=
 (const char *)ptr : server/util.c line=1184 column=26
p
tr;
1233    return : pass=0
r
eturn (const char *)token : server/util.c line=1185 column=26
t
oken;
1234}
1235
1236/* Retrieve an HTTP header field list item, as separated by a comma,
1237 * while stripping insignificant whitespace and lowercasing anything not in
1238 * a quoted string or comment.  The return value is a new string containing
1239 * the converted list item (or NULL if none) and the address pointed to by
1240 * field is shifted to the next non-comma, non-whitespace.
1241 */
1242AP_DECLARE(char *) ap_get_list_item : call=0
a
p_get_list_item(apr_pool_t *p, const char **field)
1243{
1244    const char *tok_start;
1245    const unsigned char *ptr;
1246    unsigned char *pos;
1247    char *token;
1248    int addspace = 0, in_qpair = 0, in_qstr = 0, in_com = 0, tok_len = 0;
1249
1250    /* Find the beginning and maximum length of the list item so that
1251     * we can allocate a buffer for the new string and reset the field.
1252     */
1253    if : true=0, false=0
i
f ((tok_start : server/util.c line=1244 column=17
t
ok_start = : pass=0
=
 ap_size_list_item : enter=0, leave=0

ap_size_list_item : server/util.c line=1182 column=26
a
p_size_list_item(field : server/util.c line=1242 column=65
f
ield, &tok_len : server/util.c line=1248 column=62
t
ok_len)) == : true=0, false=0
=
= NULL) {
1254        return : pass=0
r
eturn NULL;
1255    }
1256    token : server/util.c line=1247 column=11
t
oken = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=1242 column=49
p
tok_len : server/util.c line=1248 column=62
t
ok_len + : pass=0
+
 1);
1257
1258    /* Scan the token again, but this time copy only the good bytes.
1259     * We skip extra whitespace and any whitespace around a '=', '/',
1260     * or ';' and lowercase normal characters not within a comment,
1261     * quoted-string or quoted-pair.
1262     */
1263    for : true=0, false=0
f
or (ptr : server/util.c line=1245 column=26
p
tr = : pass=0
=
 (const unsigned char *)tok_start : server/util.c line=1244 column=17
t
ok_start, pos : server/util.c line=1246 column=20
p
os = : pass=0
=
 (unsigned char *)token : server/util.c line=1247 column=11
t
oken;
1264         MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
ptr : server/util.c line=1245 column=26
p
tr && : true=0, false=0
&
& (MC/DC independently affect : true=0, false=0

in_qpair : server/util.c line=1248 column=23
iTF
n_qpair || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_qstr : server/util.c line=1248 column=37
iTF
n_qstr || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_com : server/util.c line=1248 column=50
iTF
n_com || : true=0, false=0
|
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= ',');
1265         ++ : pass=0
+
+ptr : server/util.c line=1245 column=26
p
tr) {
1266
1267        if : true=0, false=0
i
f (in_qpair : server/util.c line=1248 column=23
i
n_qpair) {
1268            in_qpair : server/util.c line=1248 column=23
i
n_qpair = : pass=0
=
 0;
1269            *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr;
1270        }
1271        else {
1272            switch : pass=0
s
witch (* dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr) {
1273                case : true=0, false=0
c
ase '\\': in_qpair : server/util.c line=1248 column=23
i
n_qpair = : pass=0
=
 1;
1274                           if : true=0, false=0
i
f (addspace : server/util.c line=1248 column=9
a
ddspace == : true=0, false=0
=
= 1)
1275                               *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
1276                           *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr;
1277                           addspace : server/util.c line=1248 column=9
a
ddspace = : pass=0
=
 0;
1278                           break : pass=0
b
reak;
1279                case : true=0, false=0
c
ase '"' : if : true=0, false=0
i
f (! : true=0, false=0
!
in_com : server/util.c line=1248 column=50
i
n_com)
1280                               in_qstr : server/util.c line=1248 column=37
i
n_qstr = : pass=0
=
 ! : true=0, false=0
!
in_qstr : server/util.c line=1248 column=37
i
n_qstr;
1281                           if : true=0, false=0
i
f (addspace : server/util.c line=1248 column=9
a
ddspace == : true=0, false=0
=
= 1)
1282                               *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
1283                           *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr;
1284                           addspace : server/util.c line=1248 column=9
a
ddspace = : pass=0
=
 0;
1285                           break : pass=0
b
reak;
1286                case : true=0, false=0
c
ase '(' : if : true=0, false=0
i
f (! : true=0, false=0
!
in_qstr : server/util.c line=1248 column=37
i
n_qstr)
1287                               ++ : pass=0
+
+in_com : server/util.c line=1248 column=50
i
n_com;
1288                           if : true=0, false=0
i
f (addspace : server/util.c line=1248 column=9
a
ddspace == : true=0, false=0
=
= 1)
1289                               *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
1290                           *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr;
1291                           addspace : server/util.c line=1248 column=9
a
ddspace = : pass=0
=
 0;
1292                           break : pass=0
b
reak;
1293                case : true=0, false=0
c
ase ')' : if : true=0, false=0
i
f (in_com : server/util.c line=1248 column=50
i
n_com)
1294                               -- : pass=0
-
-in_com : server/util.c line=1248 column=50
i
n_com;
1295                           *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr;
1296                           addspace : server/util.c line=1248 column=9
a
ddspace = : pass=0
=
 0;
1297                           break : pass=0
b
reak;
1298                case : true=0, false=0
c
ase ' ' :
1299                case : true=0, false=0
c
ase '\t': if : true=0, false=0
i
f (addspace : server/util.c line=1248 column=9
a
ddspace)
1300                               break : pass=0
b
reak;
1301                           if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

in_com : server/util.c line=1248 column=50
iTF
n_com || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_qstr : server/util.c line=1248 column=37
iTF
n_qstr)
1302                               *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr;
1303                           else
1304                               addspace : server/util.c line=1248 column=9
a
ddspace = : pass=0
=
 1;
1305                           break : pass=0
b
reak;
1306                case : true=0, false=0
c
ase '=' :
1307                case : true=0, false=0
c
ase '/' :
1308                case : true=0, false=0
c
ase ';' : if : true=0, false=0
i
f (! : true=0, false=0
!
(MC/DC independently affect : true=0, false=0

in_com : server/util.c line=1248 column=50
iTF
n_com || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_qstr : server/util.c line=1248 column=37
iTF
n_qstr))
1309                               addspace : server/util.c line=1248 column=9
a
ddspace = : pass=0
=
 -1;
1310                           *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr;
1311                           break : pass=0
b
reak;
1312                default : true=0, false=0
d
efault  : if : true=0, false=0
i
f (addspace : server/util.c line=1248 column=9
a
ddspace == : true=0, false=0
=
= 1)
1313                               *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 ' ';
1314                           *pos : server/util.c line=1246 column=20
p
os++ : pass=0
+
= : enter=0, leave=0
=
 (MC/DC independently affect : true=0, false=0

in_com : server/util.c line=1248 column=50
iTF
n_com || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_qstr : server/util.c line=1248 column=37
iTF
n_qstr) conditional operator : true=0, false=0
?
 * dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr
1315                                                        : apr_tolower(* dereference : enter=0, leave=0
*
ptr : server/util.c line=1245 column=26
p
tr);
1316                           addspace : server/util.c line=1248 column=9
a
ddspace = : pass=0
=
 0;
1317                           break : pass=0
b
reak;
1318            }
1319        }
1320    }
1321    *pos : server/util.c line=1246 column=20
p
os = : enter=0, leave=0
=
 '\0';
1322
1323    return : pass=0
r
eturn token : server/util.c line=1247 column=11
t
oken;
1324}
1325
1326/* Find an item in canonical form (lowercase, no extra spaces) within
1327 * an HTTP field value list.  Returns 1 if found, 0 if not found.
1328 * This would be much more efficient if we stored header fields as
1329 * an array of list items as they are received instead of a plain string.
1330 */
1331AP_DECLARE(int) ap_find_list_item : call=0
a
p_find_list_item(apr_pool_t *p, const char *line,
1332                                  const char *tok)
1333{
1334    const unsigned char *pos;
1335    const unsigned char *ptr = (const unsigned char *)line : server/util.c line=1331 column=62
l
ine;
1336    int good = 0, addspace = 0, in_qpair = 0, in_qstr = 0, in_com = 0;
1337
1338    if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
line : server/util.c line=1331 column=62
l
ine || : true=0, false=0
|
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
tok : server/util.c line=1332 column=47
t
ok)
1339        return : pass=0
r
eturn 0;
1340
1341    do {  /* loop for each item in line's list */
1342
1343        /* Find first non-comma, non-whitespace byte */
1344
1345        while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ',' || : true=0, false=0
|
| apr_isspace(* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr))
1346            ++ : pass=0
+
+ptr : server/util.c line=1335 column=26
p
tr;
1347
1348        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr)
1349            good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 1;  /* until proven otherwise for this item */
1350        else
1351            break : pass=0
b
reak;     /* no items left and nothing good found */
1352
1353        /* We skip extra whitespace and any whitespace around a '=', '/',
1354         * or ';' and lowercase normal characters not within a comment,
1355         * quoted-string or quoted-pair.
1356         */
1357        for : true=0, false=0
f
or (pos : server/util.c line=1334 column=26
p
os = : pass=0
=
 (const unsigned char *)tok : server/util.c line=1332 column=47
t
ok;
1358             MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
ptr : server/util.c line=1335 column=26
p
tr && : true=0, false=0
&
& (MC/DC independently affect : true=0, false=0

in_qpair : server/util.c line=1336 column=33
iTF
n_qpair || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_qstr : server/util.c line=1336 column=47
iTF
n_qstr || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_com : server/util.c line=1336 column=60
iTF
n_com || : true=0, false=0
|
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= ',');
1359             ++ : pass=0
+
+ptr : server/util.c line=1335 column=26
p
tr) {
1360
1361            if : true=0, false=0
i
f (in_qpair : server/util.c line=1336 column=33
i
n_qpair) {
1362                in_qpair : server/util.c line=1336 column=33
i
n_qpair = : pass=0
=
 0;
1363                if : true=0, false=0
i
f (good : server/util.c line=1336 column=9
g
ood)
1364                    good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
=
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr);
1365            }
1366            else {
1367                switch : pass=0
s
witch (* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr) {
1368                    case : true=0, false=0
c
ase '\\': in_qpair : server/util.c line=1336 column=33
i
n_qpair = : pass=0
=
 1;
1369                               if : true=0, false=0
i
f (addspace : server/util.c line=1336 column=19
a
ddspace == : true=0, false=0
=
= 1)
1370                                   good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ' ');
1371                               good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr);
1372                               addspace : server/util.c line=1336 column=19
a
ddspace = : pass=0
=
 0;
1373                               break : pass=0
b
reak;
1374                    case : true=0, false=0
c
ase '"' : if : true=0, false=0
i
f (! : true=0, false=0
!
in_com : server/util.c line=1336 column=60
i
n_com)
1375                                   in_qstr : server/util.c line=1336 column=47
i
n_qstr = : pass=0
=
 ! : true=0, false=0
!
in_qstr : server/util.c line=1336 column=47
i
n_qstr;
1376                               if : true=0, false=0
i
f (addspace : server/util.c line=1336 column=19
a
ddspace == : true=0, false=0
=
= 1)
1377                                   good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ' ');
1378                               good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr);
1379                               addspace : server/util.c line=1336 column=19
a
ddspace = : pass=0
=
 0;
1380                               break : pass=0
b
reak;
1381                    case : true=0, false=0
c
ase '(' : if : true=0, false=0
i
f (! : true=0, false=0
!
in_qstr : server/util.c line=1336 column=47
i
n_qstr)
1382                                   ++ : pass=0
+
+in_com : server/util.c line=1336 column=60
i
n_com;
1383                               if : true=0, false=0
i
f (addspace : server/util.c line=1336 column=19
a
ddspace == : true=0, false=0
=
= 1)
1384                                   good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ' ');
1385                               good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr);
1386                               addspace : server/util.c line=1336 column=19
a
ddspace = : pass=0
=
 0;
1387                               break : pass=0
b
reak;
1388                    case : true=0, false=0
c
ase ')' : if : true=0, false=0
i
f (in_com : server/util.c line=1336 column=60
i
n_com)
1389                                   -- : pass=0
-
-in_com : server/util.c line=1336 column=60
i
n_com;
1390                               good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr);
1391                               addspace : server/util.c line=1336 column=19
a
ddspace = : pass=0
=
 0;
1392                               break : pass=0
b
reak;
1393                    case : true=0, false=0
c
ase ' ' :
1394                    case : true=0, false=0
c
ase '\t': if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

addspace : server/util.c line=1336 column=19
aTF
ddspace || : true=0, false=0
|
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
good : server/util.c line=1336 column=9
g
ood)
1395                                   break : pass=0
b
reak;
1396                               if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

in_com : server/util.c line=1336 column=60
iTF
n_com || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_qstr : server/util.c line=1336 column=47
iTF
n_qstr)
1397                                   good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
=
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr);
1398                               else
1399                                   addspace : server/util.c line=1336 column=19
a
ddspace = : pass=0
=
 1;
1400                               break : pass=0
b
reak;
1401                    case : true=0, false=0
c
ase '=' :
1402                    case : true=0, false=0
c
ase '/' :
1403                    case : true=0, false=0
c
ase ';' : if : true=0, false=0
i
f (! : true=0, false=0
!
(MC/DC independently affect : true=0, false=0

in_com : server/util.c line=1336 column=60
iTF
n_com || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_qstr : server/util.c line=1336 column=47
iTF
n_qstr))
1404                                   addspace : server/util.c line=1336 column=19
a
ddspace = : pass=0
=
 -1;
1405                               good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr);
1406                               break : pass=0
b
reak;
1407                    default : true=0, false=0
d
efault  : if : true=0, false=0
i
f (! : true=0, false=0
!
good : server/util.c line=1336 column=9
g
ood)
1408                                   break : pass=0
b
reak;
1409                               if : true=0, false=0
i
f (addspace : server/util.c line=1336 column=19
a
ddspace == : true=0, false=0
=
= 1)
1410                                   good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
=
= ' ');
1411                               if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

in_com : server/util.c line=1336 column=60
iTF
n_com || : true=0, false=0
|
MC/DC independently affect : true=0, false=0

in_qstr : server/util.c line=1336 column=47
iTF
n_qstr)
1412                                   good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr);
1413                               else
1414                                   good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
& (* dereference : enter=0, leave=0
*
pos : server/util.c line=1334 column=26
p
os++ : pass=0
+
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= apr_tolower(* dereference : enter=0, leave=0
*
ptr : server/util.c line=1335 column=26
p
tr));
1415                               addspace : server/util.c line=1336 column=19
a
ddspace = : pass=0
=
 0;
1416                               break : pass=0
b
reak;
1417                }
1418            }
1419        }
1420        if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

good : server/util.c line=1336 column=9
gTF
ood && : true=0, false=0
&
MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
pos : server/util.c line=1334 column=26
p
os)
1421            good : server/util.c line=1336 column=9
g
ood = : pass=0
=
 0;          /* not good if only a prefix was matched */
1422
1423    } while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
ptr : server/util.c line=1335 column=26
p
tr && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
good : server/util.c line=1336 column=9
g
ood);
1424
1425    return : pass=0
r
eturn good : server/util.c line=1336 column=9
g
ood;
1426}
1427
1428
1429/* Retrieve a token, spacing over it and returning a pointer to
1430 * the first non-white byte afterwards.  Note that these tokens
1431 * are delimited by semis and commas; and can also be delimited
1432 * by whitespace at the caller's option.
1433 */
1434
1435AP_DECLARE(char *) ap_get_token : call=0
a
p_get_token(apr_pool_t *p, const char **accept_line,
1436                                int accept_white)
1437{
1438    const char *ptr = * dereference : enter=0, leave=0
*
accept_line : server/util.c line=1435 column=61
a
ccept_line;
1439    const char *tok_start;
1440    char *token;
1441    int tok_len;
1442
1443    /* Find first non-white byte */
1444
1445    while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
ptr : server/util.c line=1438 column=17
p
tr && : true=0, false=0
&
& apr_isspace(* dereference : enter=0, leave=0
*
ptr : server/util.c line=1438 column=17
p
tr))
1446        ++ : pass=0
+
+ptr : server/util.c line=1438 column=17
p
tr;
1447
1448    tok_start : server/util.c line=1439 column=17
t
ok_start = : pass=0
=
 ptr : server/util.c line=1438 column=17
p
tr;
1449
1450    /* find token end, skipping over quoted strings.
1451     * (comments are already gone).
1452     */
1453
1454    while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
ptr : server/util.c line=1438 column=17
p
tr && : true=0, false=0
&
& (MC/DC independently affect : true=0, false=0

accept_white : server/util.c line=1436 column=37
aTF
ccept_white || : true=0, false=0
|
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isspace(* dereference : enter=0, leave=0
*
ptr : server/util.c line=1438 column=17
p
tr))
1455           && : true=0, false=0
&
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1438 column=17
p
tr != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= ';' && : true=0, false=0
&
* dereference : enter=0, leave=0
*
ptr : server/util.c line=1438 column=17
p
tr != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= ',') {
1456        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
ptr : server/util.c line=1438 column=17
p
tr++ : pass=0
+
== : true=0, false=0
=
= '"')
1457            while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
ptr : server/util.c line=1438 column=17
p
tr)
1458                if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
ptr : server/util.c line=1438 column=17
p
tr++ : pass=0
+
== : true=0, false=0
=
= '"')
1459                    break : pass=0
b
reak;
1460    }
1461
1462    tok_len : server/util.c line=1441 column=9
t
ok_len = : pass=0
=
 ptr : server/util.c line=1438 column=17
p
tr - : pass=0
-
 tok_start : server/util.c line=1439 column=17
t
ok_start;
1463    token : server/util.c line=1440 column=11
t
oken = : pass=0
=
 apr_pstrndup : enter=0, leave=0

apr_pstrndup : /usr/include/apr-1/apr_strings.h line=121 column=21
a
pr_pstrndup(p : server/util.c line=1435 column=45
p
tok_start : server/util.c line=1439 column=17
t
ok_start, tok_len : server/util.c line=1441 column=9
t
ok_len);
1464
1465    /* Advance accept_line pointer to the next non-white byte */
1466
1467    while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
ptr : server/util.c line=1438 column=17
p
tr && : true=0, false=0
&
& apr_isspace(* dereference : enter=0, leave=0
*
ptr : server/util.c line=1438 column=17
p
tr))
1468        ++ : pass=0
+
+ptr : server/util.c line=1438 column=17
p
tr;
1469
1470    *accept_line : server/util.c line=1435 column=61
a
ccept_line = : enter=0, leave=0
=
 ptr : server/util.c line=1438 column=17
p
tr;
1471    return : pass=0
r
eturn token : server/util.c line=1440 column=11
t
oken;
1472}
1473
1474
1475/* find http tokens, see the definition of token from RFC2068 */
1476AP_DECLARE(int) ap_find_token : call=0
a
p_find_token(apr_pool_t *p, const char *line, const char *tok)
1477{
1478    const unsigned char *start_token;
1479    const unsigned char *s;
1480
1481    if : true=0, false=0
i
f (! : true=0, false=0
!
line : server/util.c line=1476 column=58
l
ine)
1482        return : pass=0
r
eturn 0;
1483
1484    s : server/util.c line=1479 column=26
s
 = : pass=0
=
 (const unsigned char *)line : server/util.c line=1476 column=58
l
ine;
1485    for (;;) {
1486        /* find start of token, skip all stop characters, note NUL
1487         * isn't a token stop, so we don't need to test for it
1488         */
1489        while : true=0, false=0
w
hile (TEST_CHAR(* dereference : enter=0, leave=0
*
s : server/util.c line=1479 column=26
s
, T_HTTP_TOKEN_STOP)) {
1490            ++ : pass=0
+
+s : server/util.c line=1479 column=26
s
;
1491        }
1492        if : true=0, false=0
i
f (! : true=0, false=0
!
* dereference : enter=0, leave=0
*
s : server/util.c line=1479 column=26
s
) {
1493            return : pass=0
r
eturn 0;
1494        }
1495        start_token : server/util.c line=1478 column=26
s
tart_token = : pass=0
=
 s : server/util.c line=1479 column=26
s
;
1496        /* find end of the token */
1497        while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
s : server/util.c line=1479 column=26
s
 && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
TEST_CHAR(* dereference : enter=0, leave=0
*
s : server/util.c line=1479 column=26
s
, T_HTTP_TOKEN_STOP)) {
1498            ++ : pass=0
+
+s : server/util.c line=1479 column=26
s
;
1499        }
1500        if : true=0, false=0
i
f (! : true=0, false=0
!
strncasecmp : enter=0, leave=0

strncasecmp : /usr/include/string.h line=540 column=12
s
trncasecmp((const char *)start_token : server/util.c line=1478 column=26
s
tart_token, (const char *)tok : server/util.c line=1476 column=76
t
ok,
1501                         s : server/util.c line=1479 column=26
s
 - : pass=0
-
 start_token : server/util.c line=1478 column=26
s
tart_token)) {
1502            return : pass=0
r
eturn 1;
1503        }
1504        if : true=0, false=0
i
f (! : true=0, false=0
!
* dereference : enter=0, leave=0
*
s : server/util.c line=1479 column=26
s
) {
1505            return : pass=0
r
eturn 0;
1506        }
1507    }
1508}
1509
1510
1511AP_DECLARE(int) ap_find_last_token : call=0
a
p_find_last_token(apr_pool_t *p, const char *line,
1512                                   const char *tok)
1513{
1514    int llen, tlen, lidx;
1515
1516    if : true=0, false=0
i
f (! : true=0, false=0
!
line : server/util.c line=1511 column=63
l
ine)
1517        return : pass=0
r
eturn 0;
1518
1519    llen : server/util.c line=1514 column=9
l
len = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(line : server/util.c line=1511 column=63
l
ine);
1520    tlen : server/util.c line=1514 column=15
t
len = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(tok : server/util.c line=1512 column=48
t
ok);
1521    lidx : server/util.c line=1514 column=21
l
idx = : pass=0
=
 llen : server/util.c line=1514 column=9
l
len - : pass=0
-
 tlen : server/util.c line=1514 column=15
t
len;
1522
1523    if : true=0, false=0
i
f (lidx : server/util.c line=1514 column=21
l
idx < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 0 || : true=0, false=0
|
|
1524        (lidx : server/util.c line=1514 column=21
l
idx > : 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
(apr_isspace(line : server/util.c line=1511 column=63
l
ine[] : enter=0, leave=0
[
lidx : server/util.c line=1514 column=21
l
idx - : pass=0
-
 1]) || : true=0, false=0
|
line : server/util.c line=1511 column=63
l
ine[] : enter=0, leave=0
[
lidx : server/util.c line=1514 column=21
l
idx - : pass=0
-
 1] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= ',')))
1525        return : pass=0
r
eturn 0;
1526
1527    return : pass=0
r
eturn (strncasecmp : enter=0, leave=0

strncasecmp : /usr/include/string.h line=540 column=12
s
trncasecmp(&line : server/util.c line=1511 column=63
l
ine[] : enter=0, leave=0
[
lidx : server/util.c line=1514 column=21
l
idx], tok : server/util.c line=1512 column=48
t
ok, tlen : server/util.c line=1514 column=15
t
len) == : true=0, false=0
=
= 0);
1528}
1529
1530AP_DECLARE(char *) ap_escape_shell_cmd : call=0
a
p_escape_shell_cmd(apr_pool_t *p, const char *str)
1531{
1532    char *cmd;
1533    unsigned char *d;
1534    const unsigned char *s;
1535
1536    cmd : server/util.c line=1532 column=11
c
md = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=1530 column=52
p
, 2 * : pass=0
*
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(str : server/util.c line=1530 column=67
s
tr) + : pass=0
+
 1);        /* Be safe */
1537    d : server/util.c line=1533 column=20
d
 = : pass=0
=
 (unsigned char *)cmd : server/util.c line=1532 column=11
c
md;
1538    s : server/util.c line=1534 column=26
s
 = : pass=0
=
 (const unsigned char *)str : server/util.c line=1530 column=67
s
tr;
1539    for : true=0, false=0
f
or (; * dereference : enter=0, leave=0
*
s : server/util.c line=1534 column=26
s
++ : pass=0
+
+s : server/util.c line=1534 column=26
s
) {
1540
1541#if defined(OS2) || defined(WIN32)
1542        /*
1543         * Newlines to Win32/OS2 CreateProcess() are ill advised.
1544         * Convert them to spaces since they are effectively white
1545         * space to most applications
1546         */
1547        if (*s == '\r' || *s == '\n') {
1548             *d++ = ' ';
1549             continue;
1550         }
1551#endif
1552
1553        if : true=0, false=0
i
f (TEST_CHAR(* dereference : enter=0, leave=0
*
s : server/util.c line=1534 column=26
s
, T_ESCAPE_SHELL_CMD)) {
1554            *d : server/util.c line=1533 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 '\\';
1555        }
1556        *d : server/util.c line=1533 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util.c line=1534 column=26
s
;
1557    }
1558    *d : server/util.c line=1533 column=20
d
 = : enter=0, leave=0
=
 '\0';
1559
1560    return : pass=0
r
eturn cmd : server/util.c line=1532 column=11
c
md;
1561}
1562
1563static char x2c : call=0
x
2c(const char *what)
1564{
1565    register char digit;
1566
1567#if !APR_CHARSET_EBCDIC
1568    digit : server/util.c line=1565 column=19
d
igit = : pass=0
=
 ((what : server/util.c line=1563 column=29
w
hat[] : enter=0, leave=0
[
0] >= : true=0, false=0
>
= 'A') conditional operator : true=0, false=0
?
 ((what : server/util.c line=1563 column=29
w
hat[] : enter=0, leave=0
[
0] & : pass=0
&
 0xdf) - : pass=0
-
 'A') + : pass=0
+
 10
1569             : (what : server/util.c line=1563 column=29
w
hat[] : enter=0, leave=0
[
0] - : pass=0
-
 '0'));
1570    digit : server/util.c line=1565 column=19
d
igit *= : pass=0
*
= 16;
1571    digit : server/util.c line=1565 column=19
d
igit += : pass=0
+
= (what : server/util.c line=1563 column=29
w
hat[] : enter=0, leave=0
[
1] >= : true=0, false=0
>
= 'A' conditional operator : true=0, false=0
?
 ((what : server/util.c line=1563 column=29
w
hat[] : enter=0, leave=0
[
1] & : pass=0
&
 0xdf) - : pass=0
-
 'A') + : pass=0
+
 10
1572              : (what : server/util.c line=1563 column=29
w
hat[] : enter=0, leave=0
[
1] - : pass=0
-
 '0'));
1573#else /*APR_CHARSET_EBCDIC*/
1574    char xstr[5];
1575    xstr[0]='0';
1576    xstr[1]='x';
1577    xstr[2]=what[0];
1578    xstr[3]=what[1];
1579    xstr[4]='\0';
1580    digit = apr_xlate_conv_byte(ap_hdrs_from_ascii,
1581                                0xFF & strtol(xstr, NULL, 16));
1582#endif /*APR_CHARSET_EBCDIC*/
1583    return : pass=0
r
eturn (digit : server/util.c line=1565 column=19
d
igit);
1584}
1585
1586/*
1587 * Unescapes a URL.
1588 * Returns 0 on success, non-zero on error
1589 * Failure is due to
1590 *   bad % escape       returns HTTP_BAD_REQUEST
1591 *
1592 *   decoding %00 -> \0  (the null character)
1593 *   decoding %2f -> /   (a special character)
1594 *                      returns HTTP_NOT_FOUND
1595 */
1596AP_DECLARE(int) ap_unescape_url : call=0
a
p_unescape_url(char *url)
1597{
1598    register int badesc, badpath;
1599    char *x, *y;
1600
1601    badesc : server/util.c line=1598 column=18
b
adesc = : pass=0
=
 0;
1602    badpath : server/util.c line=1598 column=26
b
adpath = : pass=0
=
 0;
1603    /* Initial scan for first '%'. Don't bother writing values before
1604     * seeing a '%' */
1605    y : server/util.c line=1599 column=15
y
 = : pass=0
=
 strchr : enter=0, leave=0

strchr : /usr/include/string.h line=235 column=14
s
trchr(url : server/util.c line=1596 column=39
u
rl, '%');
1606    if : true=0, false=0
i
f (y : server/util.c line=1599 column=15
y
 == : true=0, false=0
=
= NULL) {
1607        return : pass=0
r
eturn OK;
1608    }
1609    for : true=0, false=0
f
or (x : server/util.c line=1599 column=11
x
 = : pass=0
=
 y : server/util.c line=1599 column=15
y
* dereference : enter=0, leave=0
*
y : server/util.c line=1599 column=15
y
++ : pass=0
+
+x : server/util.c line=1599 column=11
x
++ : pass=0
+
+y : server/util.c line=1599 column=15
y
) {
1610        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
y : server/util.c line=1599 column=15
y
 != : true=0, false=0
!
= '%')
1611            *x : server/util.c line=1599 column=11
x
 = : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
y : server/util.c line=1599 column=15
y
;
1612        else {
1613            if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isxdigit(* dereference : enter=0, leave=0
*
(y : server/util.c line=1599 column=15
y
 + : pass=0
+
 1)) || : true=0, false=0
|
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isxdigit(* dereference : enter=0, leave=0
*
(y : server/util.c line=1599 column=15
y
 + : pass=0
+
 2))) {
1614                badesc : server/util.c line=1598 column=18
b
adesc = : pass=0
=
 1;
1615                *x : server/util.c line=1599 column=11
x
 = : enter=0, leave=0
=
 '%';
1616            }
1617            else {
1618                *x : server/util.c line=1599 column=11
x
 = : enter=0, leave=0
=
 x2c : enter=0, leave=0

x2c : server/util.c line=1563 column=13
x
2c(y : server/util.c line=1599 column=15
y
 + : pass=0
+
 1);
1619                y : server/util.c line=1599 column=15
y
 += : pass=0
+
= 2;
1620                if : true=0, false=0
i
f (IS_SLASH(* dereference : enter=0, leave=0
*
x : server/util.c line=1599 column=11
x
|| : true=0, false=0
|
* dereference : enter=0, leave=0
*
x : server/util.c line=1599 column=11
x
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\0')
1621                    badpath : server/util.c line=1598 column=26
b
adpath = : pass=0
=
 1;
1622            }
1623        }
1624    }
1625    *x : server/util.c line=1599 column=11
x
 = : enter=0, leave=0
=
 '\0';
1626    if : true=0, false=0
i
f (badesc : server/util.c line=1598 column=18
b
adesc)
1627        return : pass=0
r
eturn HTTP_BAD_REQUEST;
1628    else if : true=0, false=0
i
f (badpath : server/util.c line=1598 column=26
b
adpath)
1629        return : pass=0
r
eturn HTTP_NOT_FOUND;
1630    else
1631        return : pass=0
r
eturn OK;
1632}
1633
1634AP_DECLARE(int) ap_unescape_url_keep2f_ex : call=0
a
p_unescape_url_keep2f_ex(char *url, int decode_2f)
1635{
1636    register int badesc, badpath;
1637    char *x, *y;
1638
1639    badesc : server/util.c line=1636 column=18
b
adesc = : pass=0
=
 0;
1640    badpath : server/util.c line=1636 column=26
b
adpath = : pass=0
=
 0;
1641    /* Initial scan for first '%'. Don't bother writing values before
1642     * seeing a '%' */
1643    y : server/util.c line=1637 column=15
y
 = : pass=0
=
 strchr : enter=0, leave=0

strchr : /usr/include/string.h line=235 column=14
s
trchr(url : server/util.c line=1634 column=49
u
rl, '%');
1644    if : true=0, false=0
i
f (y : server/util.c line=1637 column=15
y
 == : true=0, false=0
=
= NULL) {
1645        return : pass=0
r
eturn OK;
1646    }
1647    for : true=0, false=0
f
or (x : server/util.c line=1637 column=11
x
 = : pass=0
=
 y : server/util.c line=1637 column=15
y
* dereference : enter=0, leave=0
*
y : server/util.c line=1637 column=15
y
++ : pass=0
+
+x : server/util.c line=1637 column=11
x
++ : pass=0
+
+y : server/util.c line=1637 column=15
y
) {
1648        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
y : server/util.c line=1637 column=15
y
 != : true=0, false=0
!
= '%') {
1649            *x : server/util.c line=1637 column=11
x
 = : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
y : server/util.c line=1637 column=15
y
;
1650        }
1651        else {
1652            if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isxdigit(* dereference : enter=0, leave=0
*
(y : server/util.c line=1637 column=15
y
 + : pass=0
+
 1)) || : true=0, false=0
|
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isxdigit(* dereference : enter=0, leave=0
*
(y : server/util.c line=1637 column=15
y
 + : pass=0
+
 2))) {
1653                badesc : server/util.c line=1636 column=18
b
adesc = : pass=0
=
 1;
1654                *x : server/util.c line=1637 column=11
x
 = : enter=0, leave=0
=
 '%';
1655            }
1656            else {
1657                char decoded;
1658                decoded : server/util.c line=1657 column=22
d
ecoded = : pass=0
=
 x2c : enter=0, leave=0

x2c : server/util.c line=1563 column=13
x
2c(y : server/util.c line=1637 column=15
y
 + : pass=0
+
 1);
1659                if : true=0, false=0
i
f (decoded : server/util.c line=1657 column=22
d
ecoded == : true=0, false=0
=
= '\0') {
1660                    badpath : server/util.c line=1636 column=26
b
adpath = : pass=0
=
 1;
1661                }
1662                else if : true=0, false=0
i
f (IS_SLASH(decoded : server/util.c line=1657 column=22
d
ecoded) && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
decode_2f : server/util.c line=1634 column=58
d
ecode_2f) {
1663                    /* do not decode, just let it go by as-is */
1664                    *x : server/util.c line=1637 column=11
x
 = : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
y : server/util.c line=1637 column=15
y
;
1665                }
1666                else {
1667                    *x : server/util.c line=1637 column=11
x
 = : enter=0, leave=0
=
 decoded : server/util.c line=1657 column=22
d
ecoded;
1668                    y : server/util.c line=1637 column=15
y
 += : pass=0
+
= 2;
1669                }
1670            }
1671        }
1672    }
1673    *x : server/util.c line=1637 column=11
x
 = : enter=0, leave=0
=
 '\0';
1674    if : true=0, false=0
i
f (badesc : server/util.c line=1636 column=18
b
adesc) {
1675        return : pass=0
r
eturn HTTP_BAD_REQUEST;
1676    }
1677    else if : true=0, false=0
i
f (badpath : server/util.c line=1636 column=26
b
adpath) {
1678        return : pass=0
r
eturn HTTP_NOT_FOUND;
1679    }
1680    else {
1681        return : pass=0
r
eturn OK;
1682    }
1683}
1684
1685AP_DECLARE(int) ap_unescape_url_keep2f : call=0
a
p_unescape_url_keep2f(char *url)
1686{
1687    return : pass=0
r
eturn ap_unescape_url_keep2f_ex : enter=0, leave=0

ap_unescape_url_keep2f_ex : server/util.c line=1634 column=17
a
p_unescape_url_keep2f_ex(url : server/util.c line=1685 column=46
u
rl, 1);
1688}
1689
1690AP_DECLARE(char *) ap_construct_server : call=0
a
p_construct_server(apr_pool_t *p, const char *hostname,
1691                                       apr_port_t port, const request_rec *r)
1692{
1693    if : true=0, false=0
i
f (ap_is_default_port(port : server/util.c line=1691 column=51
p
ort, r : server/util.c line=1691 column=76
r
)) {
1694        return : pass=0
r
eturn apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(p : server/util.c line=1690 column=52
p
hostname : server/util.c line=1690 column=67
h
ostname);
1695    }
1696    else {
1697        return : pass=0
r
eturn apr_psprintf : enter=0, leave=0

apr_psprintf : /usr/include/apr-1/apr_strings.h line=170 column=28
a
pr_psprintf(p : server/util.c line=1690 column=52
p
, "%s:%u", hostname : server/util.c line=1690 column=67
h
ostname, port : server/util.c line=1691 column=51
p
ort);
1698    }
1699}
1700
1701/* c2x takes an unsigned, and expects the caller has guaranteed that
1702 * 0 <= what < 256... which usually means that you have to cast to
1703 * unsigned char first, because (unsigned)(char)(x) first goes through
1704 * signed extension to an int before the unsigned cast.
1705 *
1706 * The reason for this assumption is to assist gcc code generation --
1707 * the unsigned char -> unsigned extension is already done earlier in
1708 * both uses of this code, so there's no need to waste time doing it
1709 * again.
1710 */
1711static const char c2x_table[] = "0123456789abcdef";
1712
1713static APR_INLINE unsigned char *c2x : call=0
c
2x(unsigned what, unsigned char prefix,
1714                                     unsigned char *where)
1715{
1716#if APR_CHARSET_EBCDIC
1717    what = apr_xlate_conv_byte(ap_hdrs_to_ascii, (unsigned char)what);
1718#endif /*APR_CHARSET_EBCDIC*/
1719    *where : server/util.c line=1714 column=53
w
here++ : pass=0
+
= : enter=0, leave=0
=
 prefix : server/util.c line=1713 column=67
p
refix;
1720    *where : server/util.c line=1714 column=53
w
here++ : pass=0
+
= : enter=0, leave=0
=
 c2x_table : server/util.c line=1711 column=19
c
2x_table[] : enter=0, leave=0
[
what : server/util.c line=1713 column=47
w
hat >> : pass=0
>
> 4];
1721    *where : server/util.c line=1714 column=53
w
here++ : pass=0
+
= : enter=0, leave=0
=
 c2x_table : server/util.c line=1711 column=19
c
2x_table[] : enter=0, leave=0
[
what : server/util.c line=1713 column=47
w
hat & : pass=0
&
 0xf];
1722    return : pass=0
r
eturn where : server/util.c line=1714 column=53
w
here;
1723}
1724
1725/*
1726 * escape_path_segment() escapes a path segment, as defined in RFC 1808. This
1727 * routine is (should be) OS independent.
1728 *
1729 * os_escape_path() converts an OS path to a URL, in an OS dependent way. In all
1730 * cases if a ':' occurs before the first '/' in the URL, the URL should be
1731 * prefixed with "./" (or the ':' escaped). In the case of Unix, this means
1732 * leaving '/' alone, but otherwise doing what escape_path_segment() does. For
1733 * efficiency reasons, we don't use escape_path_segment(), which is provided for
1734 * reference. Again, RFC 1808 is where this stuff is defined.
1735 *
1736 * If partial is set, os_escape_path() assumes that the path will be appended to
1737 * something with a '/' in it (and thus does not prefix "./").
1738 */
1739
1740AP_DECLARE(char *) ap_escape_path_segment : call=0
a
p_escape_path_segment(apr_pool_t *p, const char *segment)
1741{
1742    char *copy = apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=1740 column=55
p
, 3 * : pass=0
*
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(segment : server/util.c line=1740 column=70
s
egment) + : pass=0
+
 1);
1743    const unsigned char *s = (const unsigned char *)segment : server/util.c line=1740 column=70
s
egment;
1744    unsigned char *d = (unsigned char *)copy : server/util.c line=1742 column=11
c
opy;
1745    unsigned c;
1746
1747    while : true=0, false=0
w
hile ((c : server/util.c line=1745 column=14
c
 = : pass=0
=
 * dereference : enter=0, leave=0
*
s : server/util.c line=1743 column=26
s
)) {
1748        if : true=0, false=0
i
f (TEST_CHAR(c : server/util.c line=1745 column=14
c
, T_ESCAPE_PATH_SEGMENT)) {
1749            d : server/util.c line=1744 column=20
d
 = : pass=0
=
 c2x : enter=0, leave=0

c2x : server/util.c line=1713 column=34
c
2x(c : server/util.c line=1745 column=14
c
, '%', d : server/util.c line=1744 column=20
d
);
1750        }
1751        else {
1752            *d : server/util.c line=1744 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 c : server/util.c line=1745 column=14
c
;
1753        }
1754        ++ : pass=0
+
+s : server/util.c line=1743 column=26
s
;
1755    }
1756    *d : server/util.c line=1744 column=20
d
 = : enter=0, leave=0
=
 '\0';
1757    return : pass=0
r
eturn copy : server/util.c line=1742 column=11
c
opy;
1758}
1759
1760AP_DECLARE(char *) ap_os_escape_path : call=0
a
p_os_escape_path(apr_pool_t *p, const char *path, int partial)
1761{
1762    char *copy = apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=1760 column=50
p
, 3 * : pass=0
*
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(path : server/util.c line=1760 column=65
p
ath) + : pass=0
+
 3);
1763    const unsigned char *s = (const unsigned char *)path : server/util.c line=1760 column=65
p
ath;
1764    unsigned char *d = (unsigned char *)copy : server/util.c line=1762 column=11
c
opy;
1765    unsigned c;
1766
1767    if : true=0, false=0
i
f (! : true=0, false=0
!
partial : server/util.c line=1760 column=75
p
artial) {
1768        const char *colon = ap_strchr_c(path : server/util.c line=1760 column=65
p
ath, ':');
1769        const char *slash = ap_strchr_c(path : server/util.c line=1760 column=65
p
ath, '/');
1770
1771        if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

colon : server/util.c line=1768 column=21
cTF
olon && : true=0, false=0
&
& (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
slash : server/util.c line=1769 column=21
s
lash || : true=0, false=0
|
colon : server/util.c line=1768 column=21
c
olon < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 slash : server/util.c line=1769 column=21
s
lash)) {
1772            *d : server/util.c line=1764 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 '.';
1773            *d : server/util.c line=1764 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 '/';
1774        }
1775    }
1776    while : true=0, false=0
w
hile ((c : server/util.c line=1765 column=14
c
 = : pass=0
=
 * dereference : enter=0, leave=0
*
s : server/util.c line=1763 column=26
s
)) {
1777        if : true=0, false=0
i
f (TEST_CHAR(c : server/util.c line=1765 column=14
c
, T_OS_ESCAPE_PATH)) {
1778            d : server/util.c line=1764 column=20
d
 = : pass=0
=
 c2x : enter=0, leave=0

c2x : server/util.c line=1713 column=34
c
2x(c : server/util.c line=1765 column=14
c
, '%', d : server/util.c line=1764 column=20
d
);
1779        }
1780        else {
1781            *d : server/util.c line=1764 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 c : server/util.c line=1765 column=14
c
;
1782        }
1783        ++ : pass=0
+
+s : server/util.c line=1763 column=26
s
;
1784    }
1785    *d : server/util.c line=1764 column=20
d
 = : enter=0, leave=0
=
 '\0';
1786    return : pass=0
r
eturn copy : server/util.c line=1762 column=11
c
opy;
1787}
1788
1789/* ap_escape_uri is now a macro for os_escape_path */
1790
1791AP_DECLARE(char *) ap_escape_html2 : call=0
a
p_escape_html2(apr_pool_t *p, const char *s, int toasc)
1792{
1793    int i, j;
1794    char *x;
1795
1796    /* first, count the number of extra characters */
1797    for : true=0, false=0
f
or (i : server/util.c line=1793 column=9
i
 = : pass=0
=
 0, j : server/util.c line=1793 column=12
j
 = : pass=0
=
 0; s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
!= : true=0, false=0
!
= '\0'; i : server/util.c line=1793 column=9
i
++ : pass=0
+
+)
1798        if : true=0, false=0
i
f (s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '<' || : true=0, false=0
|
s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '>')
1799            j : server/util.c line=1793 column=12
j
 += : pass=0
+
= 3;
1800        else if : true=0, false=0
i
f (s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
== : true=0, false=0
=
= '&')
1801            j : server/util.c line=1793 column=12
j
 += : pass=0
+
= 4;
1802        else if : true=0, false=0
i
f (s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
== : true=0, false=0
=
= '"')
1803            j : server/util.c line=1793 column=12
j
 += : pass=0
+
= 5;
1804        else if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

toasc : server/util.c line=1791 column=70
tTF
oasc && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isascii(s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
]))
1805            j : server/util.c line=1793 column=12
j
 += : pass=0
+
= 5;
1806
1807    if : true=0, false=0
i
f (j : server/util.c line=1793 column=12
j
 == : true=0, false=0
=
= 0)
1808        return : pass=0
r
eturn apr_pstrmemdup : enter=0, leave=0

apr_pstrmemdup : /usr/include/apr-1/apr_strings.h line=109 column=21
a
pr_pstrmemdup(p : server/util.c line=1791 column=48
p
s : server/util.c line=1791 column=63
s
i : server/util.c line=1793 column=9
i
);
1809
1810    x : server/util.c line=1794 column=11
x
 = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=1791 column=48
p
i : server/util.c line=1793 column=9
i
 + : pass=0
+
 j : server/util.c line=1793 column=12
j
 + : pass=0
+
 1);
1811    for : true=0, false=0
f
or (i : server/util.c line=1793 column=9
i
 = : pass=0
=
 0, j : server/util.c line=1793 column=12
j
 = : pass=0
=
 0; s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
!= : true=0, false=0
!
= '\0'; i : server/util.c line=1793 column=9
i
++ : pass=0
+
+, j : server/util.c line=1793 column=12
j
++ : pass=0
+
+)
1812        if : true=0, false=0
i
f (s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
== : true=0, false=0
=
= '<') {
1813            memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(&x : server/util.c line=1794 column=11
x
[] : enter=0, leave=0
[
j : server/util.c line=1793 column=12
j
], "&lt;", 4);
1814            j : server/util.c line=1793 column=12
j
 += : pass=0
+
= 3;
1815        }
1816        else if : true=0, false=0
i
f (s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
== : true=0, false=0
=
= '>') {
1817            memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(&x : server/util.c line=1794 column=11
x
[] : enter=0, leave=0
[
j : server/util.c line=1793 column=12
j
], "&gt;", 4);
1818            j : server/util.c line=1793 column=12
j
 += : pass=0
+
= 3;
1819        }
1820        else if : true=0, false=0
i
f (s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
== : true=0, false=0
=
= '&') {
1821            memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(&x : server/util.c line=1794 column=11
x
[] : enter=0, leave=0
[
j : server/util.c line=1793 column=12
j
], "&amp;", 5);
1822            j : server/util.c line=1793 column=12
j
 += : pass=0
+
= 4;
1823        }
1824        else if : true=0, false=0
i
f (s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
== : true=0, false=0
=
= '"') {
1825            memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(&x : server/util.c line=1794 column=11
x
[] : enter=0, leave=0
[
j : server/util.c line=1793 column=12
j
], "&quot;", 6);
1826            j : server/util.c line=1793 column=12
j
 += : pass=0
+
= 5;
1827        }
1828        else if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

toasc : server/util.c line=1791 column=70
tTF
oasc && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isascii(s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
])) {
1829            char *esc = apr_psprintf : enter=0, leave=0

apr_psprintf : /usr/include/apr-1/apr_strings.h line=170 column=28
a
pr_psprintf(p : server/util.c line=1791 column=48
p
, "&#%3.3d;", (unsigned char)s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
]);
1830            memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(&x : server/util.c line=1794 column=11
x
[] : enter=0, leave=0
[
j : server/util.c line=1793 column=12
j
], esc : server/util.c line=1829 column=19
e
sc, 6);
1831            j : server/util.c line=1793 column=12
j
 += : pass=0
+
= 5;
1832        }
1833        else
1834            x : server/util.c line=1794 column=11
x
[j : server/util.c line=1793 column=12
j
= : enter=0, leave=0
=
 s : server/util.c line=1791 column=63
s
[] : enter=0, leave=0
[
i : server/util.c line=1793 column=9
i
];
1835
1836    x : server/util.c line=1794 column=11
x
[j : server/util.c line=1793 column=12
j
= : enter=0, leave=0
=
 '\0';
1837    return : pass=0
r
eturn x : server/util.c line=1794 column=11
x
;
1838}
1839AP_DECLARE(char *) ap_escape_html : call=0
a
p_escape_html(apr_pool_t *p, const char *s)
1840{
1841    return : pass=0
r
eturn ap_escape_html2 : enter=0, leave=0

ap_escape_html2 : server/util.c line=1791 column=20
a
p_escape_html2(p : server/util.c line=1839 column=47
p
s : server/util.c line=1839 column=62
s
, 0);
1842}
1843AP_DECLARE(char *) ap_escape_logitem : call=0
a
p_escape_logitem(apr_pool_t *p, const char *str)
1844{
1845    char *ret;
1846    unsigned char *d;
1847    const unsigned char *s;
1848    apr_size_t length, escapes = 0;
1849
1850    if : true=0, false=0
i
f (! : true=0, false=0
!
str : server/util.c line=1843 column=65
s
tr) {
1851        return : pass=0
r
eturn NULL;
1852    }
1853
1854    /* Compute how many characters need to be escaped */
1855    s : server/util.c line=1847 column=26
s
 = : pass=0
=
 (const unsigned char *)str : server/util.c line=1843 column=65
s
tr;
1856    for : true=0, false=0
f
or (; * dereference : enter=0, leave=0
*
s : server/util.c line=1847 column=26
s
++ : pass=0
+
+s : server/util.c line=1847 column=26
s
) {
1857        if : true=0, false=0
i
f (TEST_CHAR(* dereference : enter=0, leave=0
*
s : server/util.c line=1847 column=26
s
, T_ESCAPE_LOGITEM)) {
1858            escapes : server/util.c line=1848 column=24
e
scapes++ : pass=0
+
+;
1859        }
1860    }
1861    
1862    /* Compute the length of the input string, including NULL */
1863    length : server/util.c line=1848 column=16
l
ength = : pass=0
=
 s : server/util.c line=1847 column=26
s
 - : pass=0
-
 (const unsigned char *)str : server/util.c line=1843 column=65
s
tr + : pass=0
+
 1;
1864    
1865    /* Fast path: nothing to escape */
1866    if : true=0, false=0
i
f (escapes : server/util.c line=1848 column=24
e
scapes == : true=0, false=0
=
= 0) {
1867        return : pass=0
r
eturn apr_pmemdup : enter=0, leave=0

apr_pmemdup : /usr/include/apr-1/apr_strings.h line=131 column=21
a
pr_pmemdup(p : server/util.c line=1843 column=50
p
str : server/util.c line=1843 column=65
s
tr, length : server/util.c line=1848 column=16
l
ength);
1868    }
1869    
1870    /* Each escaped character needs up to 3 extra bytes (0 --> \x00) */
1871    ret : server/util.c line=1845 column=11
r
et = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=1843 column=50
p
length : server/util.c line=1848 column=16
l
ength + : pass=0
+
 3 * : pass=0
*
 escapes : server/util.c line=1848 column=24
e
scapes);
1872    d : server/util.c line=1846 column=20
d
 = : pass=0
=
 (unsigned char *)ret : server/util.c line=1845 column=11
r
et;
1873    s : server/util.c line=1847 column=26
s
 = : pass=0
=
 (const unsigned char *)str : server/util.c line=1843 column=65
s
tr;
1874    for : true=0, false=0
f
or (; * dereference : enter=0, leave=0
*
s : server/util.c line=1847 column=26
s
++ : pass=0
+
+s : server/util.c line=1847 column=26
s
) {
1875        if : true=0, false=0
i
f (TEST_CHAR(* dereference : enter=0, leave=0
*
s : server/util.c line=1847 column=26
s
, T_ESCAPE_LOGITEM)) {
1876            *d : server/util.c line=1846 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 '\\';
1877            switch : pass=0
s
witch(* dereference : enter=0, leave=0
*
s : server/util.c line=1847 column=26
s
) {
1878            case : true=0, false=0
c
ase '\b':
1879                *d : server/util.c line=1846 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 'b';
1880                break : pass=0
b
reak;
1881            case : true=0, false=0
c
ase '\n':
1882                *d : server/util.c line=1846 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 'n';
1883                break : pass=0
b
reak;
1884            case : true=0, false=0
c
ase '\r':
1885                *d : server/util.c line=1846 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 'r';
1886                break : pass=0
b
reak;
1887            case : true=0, false=0
c
ase '\t':
1888                *d : server/util.c line=1846 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 't';
1889                break : pass=0
b
reak;
1890            case : true=0, false=0
c
ase '\v':
1891                *d : server/util.c line=1846 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 'v';
1892                break : pass=0
b
reak;
1893            case : true=0, false=0
c
ase '\\':
1894            case : true=0, false=0
c
ase '"':
1895                *d : server/util.c line=1846 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util.c line=1847 column=26
s
;
1896                break : pass=0
b
reak;
1897            default : true=0, false=0
d
efault:
1898                c2x : enter=0, leave=0

c2x : server/util.c line=1713 column=34
c
2x(* dereference : enter=0, leave=0
*
s : server/util.c line=1847 column=26
s
, 'x', d : server/util.c line=1846 column=20
d
);
1899                d : server/util.c line=1846 column=20
d
 += : pass=0
+
= 3;
1900            }
1901        }
1902        else {
1903            *d : server/util.c line=1846 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util.c line=1847 column=26
s
;
1904        }
1905    }
1906    *d : server/util.c line=1846 column=20
d
 = : enter=0, leave=0
=
 '\0';
1907
1908    return : pass=0
r
eturn ret : server/util.c line=1845 column=11
r
et;
1909}
1910
1911AP_DECLARE(apr_size_t) ap_escape_errorlog_item : call=1
a
p_escape_errorlog_item(char *dest, const char *source,
1912                                               apr_size_t buflen)
1913{
1914    unsigned char *d, *ep;
1915    const unsigned char *s;
1916
1917    if : true=0, false=1
i
f (! : true=0, false=1
MC/DC independently affect : true=0, false=1
!TF
source : server/util.c line=1911 column=72
s
ource || : true=0, false=1
|
! : true=0, false=1
MC/DC independently affect : true=0, false=1
!TF
buflen : server/util.c line=1912 column=59
b
uflen) { /* be safe */
1918        return : pass=0
r
eturn 0;
1919    }
1920
1921    d : server/util.c line=1914 column=20
d
 = : pass=1
=
 (unsigned char *)dest : server/util.c line=1911 column=54
d
est;
1922    s : server/util.c line=1915 column=26
s
 = : pass=1
=
 (const unsigned char *)source : server/util.c line=1911 column=72
s
ource;
1923    ep : server/util.c line=1914 column=24
e
= : pass=1
=
 d : server/util.c line=1914 column=20
d
 + : pass=1
+
 buflen : server/util.c line=1912 column=59
b
uflen - : pass=1
-
 1;
1924
1925    for : true=102, false=1
f
or (; d : server/util.c line=1914 column=20
d
 < : true=103, false=0
MC/DC independently affect : true=102, false=0
<TF
 ep : server/util.c line=1914 column=24
e
&& : true=102, false=1
&
MC/DC independently affect : true=102, false=1
* dereference : enter=103, leave=103
*TF
s : server/util.c line=1915 column=26
s
++ : pass=102
+
+s : server/util.c line=1915 column=26
s
) {
1926
1927        if : true=0, false=102
i
f (TEST_CHAR(* dereference : enter=102, leave=102
*
s : server/util.c line=1915 column=26
s
, T_ESCAPE_LOGITEM)) {
1928            *d : server/util.c line=1914 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 '\\';
1929            if : true=0, false=0
i
f (d : server/util.c line=1914 column=20
d
 >= : true=0, false=0
>
ep : server/util.c line=1914 column=24
e
p) {
1930                -- : pass=0
-
-d : server/util.c line=1914 column=20
d
;
1931                break : pass=0
b
reak;
1932            }
1933
1934            switch : pass=0
s
witch(* dereference : enter=0, leave=0
*
s : server/util.c line=1915 column=26
s
) {
1935            case : true=0, false=0
c
ase '\b':
1936                *d : server/util.c line=1914 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 'b';
1937                break : pass=0
b
reak;
1938            case : true=0, false=0
c
ase '\n':
1939                *d : server/util.c line=1914 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 'n';
1940                break : pass=0
b
reak;
1941            case : true=0, false=0
c
ase '\r':
1942                *d : server/util.c line=1914 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 'r';
1943                break : pass=0
b
reak;
1944            case : true=0, false=0
c
ase '\t':
1945                *d : server/util.c line=1914 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 't';
1946                break : pass=0
b
reak;
1947            case : true=0, false=0
c
ase '\v':
1948                *d : server/util.c line=1914 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 'v';
1949                break : pass=0
b
reak;
1950            case : true=0, false=0
c
ase '\\':
1951                *d : server/util.c line=1914 column=20
d
++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util.c line=1915 column=26
s
;
1952                break : pass=0
b
reak;
1953            case : true=0, false=0
c
ase '"': /* no need for this in error log */
1954                d : server/util.c line=1914 column=20
d
[-1] = : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
s : server/util.c line=1915 column=26
s
;
1955                break : pass=0
b
reak;
1956            default : true=0, false=0
d
efault:
1957                if : true=0, false=0
i
f (d : server/util.c line=1914 column=20
d
 >= : true=0, false=0
>
ep : server/util.c line=1914 column=24
e
- : pass=0
-
 2) {
1958                    ep : server/util.c line=1914 column=24
e
= : pass=0
=
 -- : pass=0
-
-d : server/util.c line=1914 column=20
d
; /* break the for loop as well */
1959                    break : pass=0
b
reak;
1960                }
1961                c2x : enter=0, leave=0

c2x : server/util.c line=1713 column=34
c
2x(* dereference : enter=0, leave=0
*
s : server/util.c line=1915 column=26
s
, 'x', d : server/util.c line=1914 column=20
d
);
1962                d : server/util.c line=1914 column=20
d
 += : pass=0
+
= 3;
1963            }
1964        }
1965        else {
1966            *d : server/util.c line=1914 column=20
d
++ : pass=102
+
= : enter=102, leave=102
=
 * dereference : enter=102, leave=102
*
s : server/util.c line=1915 column=26
s
;
1967        }
1968    }
1969    *d : server/util.c line=1914 column=20
d
 = : enter=1, leave=1
=
 '\0';
1970
1971    return : pass=1
r
eturn (d : server/util.c line=1914 column=20
d
 - : pass=1
-
 (unsigned char *)dest : server/util.c line=1911 column=54
d
est);
1972}
1973
1974AP_DECLARE(int) ap_is_directory : call=1
a
p_is_directory(apr_pool_t *p, const char *path)
1975{
1976    apr_finfo_t finfo;
1977
1978    if : true=1, false=0
i
f (apr_stat : enter=1, leave=1

apr_stat : /usr/include/apr-1/apr_file_info.h line=229 column=27
a
pr_stat(&finfo : server/util.c line=1976 column=17
f
info, path : server/util.c line=1974 column=60
p
ath, APR_FINFO_TYPE, p : server/util.c line=1974 column=45
p
!= : true=1, false=0
!
= APR_SUCCESS)
1979        return : pass=1
r
eturn 0;                /* in error condition, just return no */
1980
1981    return : pass=0
r
eturn (finfo : server/util.c line=1976 column=17
f
info.filetype : /usr/include/apr-1/apr_file_info.h line=186 column=20 filetype == : true=0, false=0
=
APR_DIR : /usr/include/apr-1/apr_file_info.h line=65 column=5 APR_DIR);
1982}
1983
1984AP_DECLARE(int) ap_is_rdirectory : call=0
a
p_is_rdirectory(apr_pool_t *p, const char *path)
1985{
1986    apr_finfo_t finfo;
1987
1988    if : true=0, false=0
i
f (apr_stat : enter=0, leave=0

apr_stat : /usr/include/apr-1/apr_file_info.h line=229 column=27
a
pr_stat(&finfo : server/util.c line=1986 column=17
f
info, path : server/util.c line=1984 column=61
p
ath, APR_FINFO_LINK | : pass=0
|
 APR_FINFO_TYPE, p : server/util.c line=1984 column=46
p
!= : true=0, false=0
!
= APR_SUCCESS)
1989        return : pass=0
r
eturn 0;                /* in error condition, just return no */
1990
1991    return : pass=0
r
eturn (finfo : server/util.c line=1986 column=17
f
info.filetype : /usr/include/apr-1/apr_file_info.h line=186 column=20 filetype == : true=0, false=0
=
APR_DIR : /usr/include/apr-1/apr_file_info.h line=65 column=5 APR_DIR);
1992}
1993
1994AP_DECLARE(char *) ap_make_full_path : call=0
a
p_make_full_path(apr_pool_t *a, const char *src1,
1995                                  const char *src2)
1996{
1997    apr_size_t len1, len2;
1998    char *path;
1999
2000    len1 : server/util.c line=1997 column=16
l
en1 = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(src1 : server/util.c line=1994 column=65
s
rc1);
2001    len2 : server/util.c line=1997 column=22
l
en2 = : pass=0
=
 strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(src2 : server/util.c line=1995 column=47
s
rc2);
2002     /* allocate +3 for '/' delimiter, trailing NULL and overallocate
2003      * one extra byte to allow the caller to add a trailing '/'
2004      */
2005    path : server/util.c line=1998 column=11
p
ath = : pass=0
=
 (char *)apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(a : server/util.c line=1994 column=50
a
len1 : server/util.c line=1997 column=16
l
en1 + : pass=0
+
 len2 : server/util.c line=1997 column=22
l
en2 + : pass=0
+
 3);
2006    if : true=0, false=0
i
f (len1 : server/util.c line=1997 column=16
l
en1 == : true=0, false=0
=
= 0) {
2007        *path : server/util.c line=1998 column=11
p
ath = : enter=0, leave=0
=
 '/';
2008        memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(path : server/util.c line=1998 column=11
p
ath + : pass=0
+
 1, src2 : server/util.c line=1995 column=47
s
rc2, len2 : server/util.c line=1997 column=22
l
en2 + : pass=0
+
 1);
2009    }
2010    else {
2011        char *next;
2012        memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(path : server/util.c line=1998 column=11
p
ath, src1 : server/util.c line=1994 column=65
s
rc1, len1 : server/util.c line=1997 column=16
l
en1);
2013        next : server/util.c line=2011 column=15
n
ext = : pass=0
=
 path : server/util.c line=1998 column=11
p
ath + : pass=0
+
 len1 : server/util.c line=1997 column=16
l
en1;
2014        if : true=0, false=0
i
f (next : server/util.c line=2011 column=15
n
ext[] : enter=0, leave=0
[
-1] != : true=0, false=0
!
= '/') {
2015            *next : server/util.c line=2011 column=15
n
ext++ : pass=0
+
= : enter=0, leave=0
=
 '/';
2016        }
2017        memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(next : server/util.c line=2011 column=15
n
ext, src2 : server/util.c line=1995 column=47
s
rc2, len2 : server/util.c line=1997 column=22
l
en2 + : pass=0
+
 1);
2018    }
2019    return : pass=0
r
eturn path : server/util.c line=1998 column=11
p
ath;
2020}
2021
2022/*
2023 * Check for an absoluteURI syntax (see section 3.2 in RFC2068).
2024 */
2025AP_DECLARE(int) ap_is_url : call=0
a
p_is_url(const char *u)
2026{
2027    register int x;
2028
2029    for : true=0, false=0
f
or (x : server/util.c line=2027 column=18
x
 = : pass=0
=
 0; u : server/util.c line=2025 column=39
u
[] : enter=0, leave=0
[
x : server/util.c line=2027 column=18
x
!= : true=0, false=0
!
= ':'; x : server/util.c line=2027 column=18
x
++ : pass=0
+
+) {
2030        if : true=0, false=0
i
f ((! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
u : server/util.c line=2025 column=39
u
[] : enter=0, leave=0
[
x : server/util.c line=2027 column=18
x
]) || : true=0, false=0
|
|
2031            ((! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isalpha(u : server/util.c line=2025 column=39
u
[] : enter=0, leave=0
[
x : server/util.c line=2027 column=18
x
])) && : true=0, false=0
&
& (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
apr_isdigit(u : server/util.c line=2025 column=39
u
[] : enter=0, leave=0
[
x : server/util.c line=2027 column=18
x
])) && : true=0, false=0
&
&
2032             (u : server/util.c line=2025 column=39
u
[] : enter=0, leave=0
[
x : server/util.c line=2027 column=18
x
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '+') && : true=0, false=0
&
& (u : server/util.c line=2025 column=39
u
[] : enter=0, leave=0
[
x : server/util.c line=2027 column=18
x
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '-') && : true=0, false=0
&
& (u : server/util.c line=2025 column=39
u
[] : enter=0, leave=0
[
x : server/util.c line=2027 column=18
x
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '.'))) {
2033            return : pass=0
r
eturn 0;
2034        }
2035    }
2036
2037    return : pass=0
r
eturn (x : server/util.c line=2027 column=18
x
 conditional operator : true=0, false=0
?
 1 : 0);                /* If the first character is ':', it's broken, too */
2038}
2039
2040AP_DECLARE(int) ap_ind : call=0
a
p_ind(const char *s, char c)
2041{
2042    const char *p = ap_strchr_c(s : server/util.c line=2040 column=36
s
c : server/util.c line=2040 column=44
c
);
2043
2044    if : true=0, false=0
i
f (p : server/util.c line=2042 column=17
p
 == : true=0, false=0
=
= NULL)
2045        return : pass=0
r
eturn -1;
2046    return : pass=0
r
eturn p : server/util.c line=2042 column=17
p
 - : pass=0
-
 s : server/util.c line=2040 column=36
s
;
2047}
2048
2049AP_DECLARE(int) ap_rind : call=0
a
p_rind(const char *s, char c)
2050{
2051    const char *p = ap_strrchr_c(s : server/util.c line=2049 column=37
s
c : server/util.c line=2049 column=45
c
);
2052
2053    if : true=0, false=0
i
f (p : server/util.c line=2051 column=17
p
 == : true=0, false=0
=
= NULL)
2054        return : pass=0
r
eturn -1;
2055    return : pass=0
r
eturn p : server/util.c line=2051 column=17
p
 - : pass=0
-
 s : server/util.c line=2049 column=37
s
;
2056}
2057
2058AP_DECLARE(void) ap_str_tolower : call=194
a
p_str_tolower(char *str)
2059{
2060    while : true=2351, false=194
w
hile (* dereference : enter=2545, leave=2545
*
str : server/util.c line=2058 column=39
s
tr) {
2061        *str : server/util.c line=2058 column=39
s
tr = : enter=2351, leave=2351
=
 apr_tolower(* dereference : enter=2351, leave=2351
*
str : server/util.c line=2058 column=39
s
tr);
2062        ++ : pass=2351
+
+str : server/util.c line=2058 column=39
s
tr;
2063    }
2064}
2065
2066/*
2067 * We must return a FQDN
2068 */
2069char *ap_get_local_host : call=0
a
p_get_local_host(apr_pool_t *a)
2070{
2071#ifndef MAXHOSTNAMELEN
2072#define MAXHOSTNAMELEN 256
2073#endif
2074    char str[MAXHOSTNAMELEN + 1];
2075    char *server_hostname = NULL;
2076    apr_sockaddr_t *sockaddr;
2077    char *hostname;
2078
2079    if : true=0, false=0
i
f (apr_gethostname : enter=0, leave=0

apr_gethostname : /usr/include/apr-1/apr_network_io.h line=434 column=27
a
pr_gethostname(str : server/util.c line=2074 column=10
s
tr, sizeof(str) - : pass=0
-
 1, a : server/util.c line=2069 column=37
a
!= : true=0, false=0
!
= APR_SUCCESS) {
2080        ap_log_perror : enter=0, leave=0

ap_log_perror : include/http_log.h line=195 column=18
a
p_log_perror(APLOG_MARK, APLOG_STARTUP | : pass=0
|
 APLOG_WARNING, 0, a : server/util.c line=2069 column=37
a
,
2081                     "%s: apr_gethostname() failed to determine ServerName",
2082                     ap_server_argv0 : include/http_main.h line=42 column=36 ap_server_argv0);
2083    } else {
2084        str : server/util.c line=2074 column=10
s
tr[sizeof(str) - : pass=0
-
 1] = : enter=0, leave=0
=
 '\0';
2085        if : true=0, false=0
i
f (apr_sockaddr_info_get : enter=0, leave=0

apr_sockaddr_info_get : /usr/include/apr-1/apr_network_io.h line=373 column=27
a
pr_sockaddr_info_get(&sockaddr : server/util.c line=2076 column=21
s
ockaddr, str : server/util.c line=2074 column=10
s
tr, APR_UNSPEC, 0, 0, a : server/util.c line=2069 column=37
a
== : true=0, false=0
=
= APR_SUCCESS) {
2086            if : true=0, false=0
i
f ( (apr_getnameinfo : enter=0, leave=0

apr_getnameinfo : /usr/include/apr-1/apr_network_io.h line=386 column=27
a
pr_getnameinfo(&hostname : server/util.c line=2077 column=11
h
ostname, sockaddr : server/util.c line=2076 column=21
s
ockaddr, 0) == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_SUCCESS) && : true=0, false=0
&
&
2087                (ap_strchr_c(hostname : server/util.c line=2077 column=11
h
ostname, '.')) ) {
2088                server_hostname : server/util.c line=2075 column=11
s
erver_hostname = : pass=0
=
 apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(a : server/util.c line=2069 column=37
a
hostname : server/util.c line=2077 column=11
h
ostname);
2089                return : pass=0
r
eturn server_hostname : server/util.c line=2075 column=11
s
erver_hostname;
2090            } else if : true=0, false=0
i
f (ap_strchr_c(str : server/util.c line=2074 column=10
s
tr, '.')) {
2091                server_hostname : server/util.c line=2075 column=11
s
erver_hostname = : pass=0
=
 apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(a : server/util.c line=2069 column=37
a
str : server/util.c line=2074 column=10
s
tr);
2092            } else {
2093                apr_sockaddr_ip_get : enter=0, leave=0

apr_sockaddr_ip_get : /usr/include/apr-1/apr_network_io.h line=675 column=27
a
pr_sockaddr_ip_get(&hostname : server/util.c line=2077 column=11
h
ostname, sockaddr : server/util.c line=2076 column=21
s
ockaddr);
2094                server_hostname : server/util.c line=2075 column=11
s
erver_hostname = : pass=0
=
 apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(a : server/util.c line=2069 column=37
a
hostname : server/util.c line=2077 column=11
h
ostname);
2095            }
2096        } else {
2097            ap_log_perror : enter=0, leave=0

ap_log_perror : include/http_log.h line=195 column=18
a
p_log_perror(APLOG_MARK, APLOG_STARTUP | : pass=0
|
 APLOG_WARNING, 0, a : server/util.c line=2069 column=37
a
,
2098                         "%s: apr_sockaddr_info_get() failed for %s",
2099                         ap_server_argv0 : include/http_main.h line=42 column=36 ap_server_argv0, str : server/util.c line=2074 column=10
s
tr);
2100        }
2101    }
2102
2103    if : true=0, false=0
i
f (! : true=0, false=0
!
server_hostname : server/util.c line=2075 column=11
s
erver_hostname)
2104        server_hostname : server/util.c line=2075 column=11
s
erver_hostname = : pass=0
=
 apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(a : server/util.c line=2069 column=37
a
, "127.0.0.1");
2105
2106    ap_log_perror : enter=0, leave=0

ap_log_perror : include/http_log.h line=195 column=18
a
p_log_perror(APLOG_MARK, APLOG_ALERT| : pass=0
|
APLOG_STARTUP, 0, a : server/util.c line=2069 column=37
a
,
2107                 "%s: Could not reliably determine the server's fully qualified "
2108                 "domain name, using %s for ServerName",
2109                 ap_server_argv0 : include/http_main.h line=42 column=36 ap_server_argv0, server_hostname : server/util.c line=2075 column=11
s
erver_hostname);
2110
2111    return : pass=0
r
eturn server_hostname : server/util.c line=2075 column=11
s
erver_hostname;
2112}
2113
2114/* simple 'pool' alloc()ing glue to apr_base64.c
2115 */
2116AP_DECLARE(char *) ap_pbase64decode : call=0
a
p_pbase64decode(apr_pool_t *p, const char *bufcoded)
2117{
2118    char *decoded;
2119    int l;
2120
2121    decoded : server/util.c line=2118 column=11
d
ecoded = : pass=0
=
 (char *) apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=2116 column=49
p
, 1 + : pass=0
+
 apr_base64_decode_len : enter=0, leave=0

apr_base64_decode_len : /usr/include/apr-1/apr_base64.h line=88 column=18
a
pr_base64_decode_len(bufcoded : server/util.c line=2116 column=64
b
ufcoded));
2122    l : server/util.c line=2119 column=9
l
 = : pass=0
=
 apr_base64_decode : enter=0, leave=0

apr_base64_decode : /usr/include/apr-1/apr_base64.h line=96 column=18
a
pr_base64_decode(decoded : server/util.c line=2118 column=11
d
ecoded, bufcoded : server/util.c line=2116 column=64
b
ufcoded);
2123    decoded : server/util.c line=2118 column=11
d
ecoded[l : server/util.c line=2119 column=9
l
= : enter=0, leave=0
=
 '\0'; /* make binary sequence into string */
2124
2125    return : pass=0
r
eturn decoded : server/util.c line=2118 column=11
d
ecoded;
2126}
2127
2128AP_DECLARE(char *) ap_pbase64encode : call=0
a
p_pbase64encode(apr_pool_t *p, char *string)
2129{
2130    char *encoded;
2131    int l = strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(string : server/util.c line=2128 column=58
s
tring);
2132
2133    encoded : server/util.c line=2130 column=11
e
ncoded = : pass=0
=
 (char *) apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=2128 column=49
p
, 1 + : pass=0
+
 apr_base64_encode_len : enter=0, leave=0

apr_base64_encode_len : /usr/include/apr-1/apr_base64.h line=59 column=18
a
pr_base64_encode_len(l : server/util.c line=2131 column=9
l
));
2134    l : server/util.c line=2131 column=9
l
 = : pass=0
=
 apr_base64_encode : enter=0, leave=0

apr_base64_encode : /usr/include/apr-1/apr_base64.h line=68 column=18
a
pr_base64_encode(encoded : server/util.c line=2130 column=11
e
ncoded, string : server/util.c line=2128 column=58
s
tring, l : server/util.c line=2131 column=9
l
);
2135    encoded : server/util.c line=2130 column=11
e
ncoded[l : server/util.c line=2131 column=9
l
= : enter=0, leave=0
=
 '\0'; /* make binary sequence into string */
2136
2137    return : pass=0
r
eturn encoded : server/util.c line=2130 column=11
e
ncoded;
2138}
2139
2140/* we want to downcase the type/subtype for comparison purposes
2141 * but nothing else because ;parameter=foo values are case sensitive.
2142 * XXX: in truth we want to downcase parameter names... but really,
2143 * apache has never handled parameters and such correctly.  You
2144 * also need to compress spaces and such to be able to compare
2145 * properly. -djg
2146 */
2147AP_DECLARE(void) ap_content_type_tolower : call=0
a
p_content_type_tolower(char *str)
2148{
2149    char *semi;
2150
2151    semi : server/util.c line=2149 column=11
s
emi = : pass=0
=
 strchr : enter=0, leave=0

strchr : /usr/include/string.h line=235 column=14
s
trchr(str : server/util.c line=2147 column=48
s
tr, ';');
2152    if : true=0, false=0
i
f (semi : server/util.c line=2149 column=11
s
emi) {
2153        *semi : server/util.c line=2149 column=11
s
emi = : enter=0, leave=0
=
 '\0';
2154    }
2155
2156    ap_str_tolower : enter=0, leave=0

ap_str_tolower : server/util.c line=2058 column=18
a
p_str_tolower(str : server/util.c line=2147 column=48
s
tr);
2157
2158    if : true=0, false=0
i
f (semi : server/util.c line=2149 column=11
s
emi) {
2159        *semi : server/util.c line=2149 column=11
s
emi = : enter=0, leave=0
=
 ';';
2160    }
2161}
2162
2163/*
2164 * Given a string, replace any bare " with \" .
2165 */
2166AP_DECLARE(char *) ap_escape_quotes : call=0
a
p_escape_quotes(apr_pool_t *p, const char *instring)
2167{
2168    int newlen = 0;
2169    const char *inchr = instring : server/util.c line=2166 column=64
i
nstring;
2170    char *outchr, *outstring;
2171
2172    /*
2173     * Look through the input string, jogging the length of the output
2174     * string up by an extra byte each time we find an unescaped ".
2175     */
2176    while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
inchr : server/util.c line=2169 column=17
i
nchr != : true=0, false=0
!
= '\0') {
2177        newlen : server/util.c line=2168 column=9
n
ewlen++ : pass=0
+
+;
2178        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
inchr : server/util.c line=2169 column=17
i
nchr == : true=0, false=0
=
= '"') {
2179            newlen : server/util.c line=2168 column=9
n
ewlen++ : pass=0
+
+;
2180        }
2181        /*
2182         * If we find a slosh, and it's not the last byte in the string,
2183         * it's escaping something - advance past both bytes.
2184         */
2185        if : true=0, false=0
i
f ((* dereference : enter=0, leave=0
*
inchr : server/util.c line=2169 column=17
i
nchr == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\') && : true=0, false=0
&
& (inchr : server/util.c line=2169 column=17
i
nchr[] : enter=0, leave=0
[
1] != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '\0')) {
2186            inchr : server/util.c line=2169 column=17
i
nchr++ : pass=0
+
+;
2187            newlen : server/util.c line=2168 column=9
n
ewlen++ : pass=0
+
+;
2188        }
2189        inchr : server/util.c line=2169 column=17
i
nchr++ : pass=0
+
+;
2190    }
2191    outstring : server/util.c line=2170 column=20
o
utstring = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : server/util.c line=2166 column=49
p
newlen : server/util.c line=2168 column=9
n
ewlen + : pass=0
+
 1);
2192    inchr : server/util.c line=2169 column=17
i
nchr = : pass=0
=
 instring : server/util.c line=2166 column=64
i
nstring;
2193    outchr : server/util.c line=2170 column=11
o
utchr = : pass=0
=
 outstring : server/util.c line=2170 column=20
o
utstring;
2194    /*
2195     * Now copy the input string to the output string, inserting a slosh
2196     * in front of every " that doesn't already have one.
2197     */
2198    while : true=0, false=0
w
hile (* dereference : enter=0, leave=0
*
inchr : server/util.c line=2169 column=17
i
nchr != : true=0, false=0
!
= '\0') {
2199        if : true=0, false=0
i
f ((* dereference : enter=0, leave=0
*
inchr : server/util.c line=2169 column=17
i
nchr == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\\') && : true=0, false=0
&
& (inchr : server/util.c line=2169 column=17
i
nchr[] : enter=0, leave=0
[
1] != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '\0')) {
2200            *outchr : server/util.c line=2170 column=11
o
utchr++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
inchr : server/util.c line=2169 column=17
i
nchr++ : pass=0
+
+;
2201            *outchr : server/util.c line=2170 column=11
o
utchr++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
inchr : server/util.c line=2169 column=17
i
nchr++ : pass=0
+
+;
2202        }
2203        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
inchr : server/util.c line=2169 column=17
i
nchr == : true=0, false=0
=
= '"') {
2204            *outchr : server/util.c line=2170 column=11
o
utchr++ : pass=0
+
= : enter=0, leave=0
=
 '\\';
2205        }
2206        if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
inchr : server/util.c line=2169 column=17
i
nchr != : true=0, false=0
!
= '\0') {
2207            *outchr : server/util.c line=2170 column=11
o
utchr++ : pass=0
+
= : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
inchr : server/util.c line=2169 column=17
i
nchr++ : pass=0
+
+;
2208        }
2209    }
2210    *outchr : server/util.c line=2170 column=11
o
utchr = : enter=0, leave=0
=
 '\0';
2211    return : pass=0
r
eturn outstring : server/util.c line=2170 column=20
o
utstring;
2212}
2213
2214/*
2215 * Given a string, append the PID deliminated by delim.
2216 * Usually used to create a pid-appended filepath name
2217 * (eg: /a/b/foo -> /a/b/foo.6726). A function, and not
2218 * a macro, to avoid unistd.h dependency
2219 */
2220AP_DECLARE(char *) ap_append_pid : call=0
a
p_append_pid(apr_pool_t *p, const char *string,
2221                                    const char *delim)
2222{
2223    return : pass=0
r
eturn apr_psprintf : enter=0, leave=0

apr_psprintf : /usr/include/apr-1/apr_strings.h line=170 column=28
a
pr_psprintf(p : server/util.c line=2220 column=46
p
, "%s%s%" APR_PID_T_FMT, string : server/util.c line=2220 column=61
s
tring,
2224                        delim : server/util.c line=2221 column=49
d
elim, getpid : enter=0, leave=0

getpid : /usr/include/unistd.h line=625 column=16
g
etpid());
2225
2226}
2227
2228/**
2229 * Parse a given timeout parameter string into an apr_interval_time_t value.
2230 * The unit of the time interval is given as postfix string to the numeric
2231 * string. Currently the following units are understood:
2232 *
2233 * ms    : milliseconds
2234 * s     : seconds
2235 * mi[n] : minutes
2236 * h     : hours
2237 *
2238 * If no unit is contained in the given timeout parameter the default_time_unit
2239 * will be used instead.
2240 * @param timeout_parameter The string containing the timeout parameter.
2241 * @param timeout The timeout value to be returned.
2242 * @param default_time_unit The default time unit to use if none is specified
2243 * in timeout_parameter.
2244 * @return Status value indicating whether the parsing was successful or not.
2245 */
2246AP_DECLARE(apr_status_t) ap_timeout_parameter_parse : call=0
a
p_timeout_parameter_parse(
2247                                               const char *timeout_parameter,
2248                                               apr_interval_time_t *timeout,
2249                                               const char *default_time_unit)
2250{
2251    char *endp;
2252    const char *time_str;
2253    apr_int64_t tout;
2254
2255    tout : server/util.c line=2253 column=17
t
out = : pass=0
=
 apr_strtoi64 : enter=0, leave=0

apr_strtoi64 : /usr/include/apr-1/apr_strings.h line=335 column=26
a
pr_strtoi64(timeout_parameter : server/util.c line=2247 column=60
t
imeout_parameter, &endp : server/util.c line=2251 column=11
e
ndp, 10);
2256    if : true=0, false=0
i
f (errno) {
2257        return : pass=0
r
eturn errno;
2258    }
2259    if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
endp : server/util.c line=2251 column=11
e
ndp || : true=0, false=0
|
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
* dereference : enter=0, leave=0
*
endp : server/util.c line=2251 column=11
e
ndp) {
2260        time_str : server/util.c line=2252 column=17
t
ime_str = : pass=0
=
 default_time_unit : server/util.c line=2249 column=60
d
efault_time_unit;
2261    }
2262    else {
2263        time_str : server/util.c line=2252 column=17
t
ime_str = : pass=0
=
 endp : server/util.c line=2251 column=11
e
ndp;
2264    }
2265
2266    switch : pass=0
s
witch (* dereference : enter=0, leave=0
*
time_str : server/util.c line=2252 column=17
t
ime_str) {
2267        /* Time is in seconds */
2268    case : true=0, false=0
c
ase 's':
2269        *timeout : server/util.c line=2248 column=69
t
imeout = : enter=0, leave=0
=
 (apr_interval_time_t) apr_time_from_sec(tout : server/util.c line=2253 column=17
t
out);
2270        break : pass=0
b
reak;
2271    case : true=0, false=0
c
ase 'h':
2272        /* Time is in hours */
2273        *timeout : server/util.c line=2248 column=69
t
imeout = : enter=0, leave=0
=
 (apr_interval_time_t) apr_time_from_sec(tout : server/util.c line=2253 column=17
t
out * : pass=0
*
 3600);
2274        break : pass=0
b
reak;
2275    case : true=0, false=0
c
ase 'm':
2276        switch : pass=0
s
witch (* dereference : enter=0, leave=0
*
(++ : pass=0
+
+time_str : server/util.c line=2252 column=17
t
ime_str)) {
2277        /* Time is in miliseconds */
2278        case : true=0, false=0
c
ase 's':
2279            *timeout : server/util.c line=2248 column=69
t
imeout = : enter=0, leave=0
=
 (apr_interval_time_t) tout : server/util.c line=2253 column=17
t
out * : pass=0
*
 1000;
2280            break : pass=0
b
reak;
2281        /* Time is in minutes */
2282        case : true=0, false=0
c
ase 'i':
2283            *timeout : server/util.c line=2248 column=69
t
imeout = : enter=0, leave=0
=
 (apr_interval_time_t) apr_time_from_sec(tout : server/util.c line=2253 column=17
t
out * : pass=0
*
 60);
2284            break : pass=0
b
reak;
2285        default : true=0, false=0
d
efault:
2286            return : pass=0
r
eturn APR_EGENERAL;
2287        }
2288        break : pass=0
b
reak;
2289    default : true=0, false=0
d
efault:
2290        return : pass=0
r
eturn APR_EGENERAL;
2291    }
2292    return : pass=0
r
eturn APR_SUCCESS;
2293}
2294
2295AP_DECLARE(char *) ap_get_exec_line : call=0
a
p_get_exec_line(apr_pool_t *p,
2296                                    const char *cmd,
2297                                    const char * const * argv)
2298{
2299    char buf[MAX_STRING_LEN];
2300    apr_procattr_t *procattr;
2301    apr_proc_t *proc;
2302    apr_file_t *fp;
2303    apr_size_t nbytes = 1;
2304    char c;
2305    int k;
2306
2307    if : true=0, false=0
i
f (apr_procattr_create : enter=0, leave=0

apr_procattr_create : /usr/include/apr-1/apr_thread_proc.h line=396 column=27
a
pr_procattr_create(&procattr : server/util.c line=2300 column=21
p
rocattr, p : server/util.c line=2295 column=49
p
!= : true=0, false=0
!
= APR_SUCCESS)
2308        return : pass=0
r
eturn NULL;
2309    if : true=0, false=0
i
f (apr_procattr_io_set : enter=0, leave=0

apr_procattr_io_set : /usr/include/apr-1/apr_thread_proc.h line=413 column=27
a
pr_procattr_io_set(procattr : server/util.c line=2300 column=21
p
rocattr, APR_FULL_BLOCK, APR_FULL_BLOCK,
2310                            APR_FULL_BLOCK) != : true=0, false=0
!
= APR_SUCCESS)
2311        return : pass=0
r
eturn NULL;
2312    if : true=0, false=0
i
f (apr_procattr_dir_set : enter=0, leave=0

apr_procattr_dir_set : /usr/include/apr-1/apr_thread_proc.h line=477 column=27
a
pr_procattr_dir_set(procattr : server/util.c line=2300 column=21
p
rocattr,
2313                             ap_make_dirstr_parent : enter=0, leave=0

ap_make_dirstr_parent : server/util.c line=615 column=20
a
p_make_dirstr_parent(p : server/util.c line=2295 column=49
p
cmd : server/util.c line=2296 column=49
c
md)) != : true=0, false=0
!
= APR_SUCCESS)
2314        return : pass=0
r
eturn NULL;
2315    if : true=0, false=0
i
f (apr_procattr_cmdtype_set : enter=0, leave=0

apr_procattr_cmdtype_set : /usr/include/apr-1/apr_thread_proc.h line=491 column=27
a
pr_procattr_cmdtype_set(procattr : server/util.c line=2300 column=21
p
rocattr, APR_PROGRAM : /usr/include/apr-1/apr_thread_proc.h line=47 column=5 APR_PROGRAM) != : true=0, false=0
!
= APR_SUCCESS)
2316        return : pass=0
r
eturn NULL;
2317    proc : server/util.c line=2301 column=17
p
roc = : pass=0
=
 apr_pcalloc(p : server/util.c line=2295 column=49
p
, sizeof(apr_proc_t));
2318    if : true=0, false=0
i
f (apr_proc_create : enter=0, leave=0

apr_proc_create : /usr/include/apr-1/apr_thread_proc.h line=608 column=27
a
pr_proc_create(proc : server/util.c line=2301 column=17
p
roc, cmd : server/util.c line=2296 column=49
c
md, argv : server/util.c line=2297 column=58
a
rgv, NULL, procattr : server/util.c line=2300 column=21
p
rocattr, p : server/util.c line=2295 column=49
p
!= : true=0, false=0
!
= APR_SUCCESS)
2319        return : pass=0
r
eturn NULL;
2320    fp : server/util.c line=2302 column=17
f
= : pass=0
=
 proc : server/util.c line=2301 column=17
p
roc-> : enter=0, leave=0
-
>out : /usr/include/apr-1/apr_thread_proc.h line=139 column=17 out;
2321
2322    if : true=0, false=0
i
f (fp : server/util.c line=2302 column=17
f
== : true=0, false=0
=
= NULL)
2323        return : pass=0
r
eturn NULL;
2324    /* XXX: we are reading 1 byte at a time here */
2325    for : true=0, false=0
f
or (k : server/util.c line=2305 column=9
k
 = : pass=0
=
 0; apr_file_read : enter=0, leave=0

apr_file_read : /usr/include/apr-1/apr_file_io.h line=407 column=27
a
pr_file_read(fp : server/util.c line=2302 column=17
f
p, &c : server/util.c line=2304 column=10
c
, &nbytes : server/util.c line=2303 column=16
n
bytes) == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_SUCCESS
2326                && : true=0, false=0
&
nbytes : server/util.c line=2303 column=16
n
bytes == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 1 && : true=0, false=0
&
& (k : server/util.c line=2305 column=9
k
 < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 MAX_STRING_LEN- : pass=0
-
1)     ; ) {
2327        if : true=0, false=0
i
f (c : server/util.c line=2304 column=10
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\n' || : true=0, false=0
|
c : server/util.c line=2304 column=10
c
 == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '\r')
2328            break : pass=0
b
reak;
2329        buf : server/util.c line=2299 column=10
b
uf[k : server/util.c line=2305 column=9
k
++ : pass=0
+
+] = : enter=0, leave=0
=
 c : server/util.c line=2304 column=10
c
;
2330    }
2331    buf : server/util.c line=2299 column=10
b
uf[k : server/util.c line=2305 column=9
k
= : enter=0, leave=0
=
 '\0';
2332    apr_file_close : enter=0, leave=0

apr_file_close : /usr/include/apr-1/apr_file_io.h line=243 column=27
a
pr_file_close(fp : server/util.c line=2302 column=17
f
p);
2333
2334    return : pass=0
r
eturn apr_pstrndup : enter=0, leave=0

apr_pstrndup : /usr/include/apr-1/apr_strings.h line=121 column=21
a
pr_pstrndup(p : server/util.c line=2295 column=49
p
buf : server/util.c line=2299 column=10
b
uf, k : server/util.c line=2305 column=9
k
);
2335}
2336[EOF]


Generated by expcov