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

 Index  Statistics  Last 
Directory./modules/generators
Filenamemod_cgi.c
ModifiedSat Jun 6 01:50:47 2015

Pass Half Fail Excluded Total
Function
2
8.33%
22
91.67%
0
0.00%
24
100%
Expressions
6
0.90%
664
99.10%
0
0.00%
670
100%
Conditions
0
0.00%
0
0.00%
140
100.00%
0
0.00%
140
100%
MC/DC
0
0.00%
64
100.00%
0
0.00%
64
100%
Branches

if
0
0.00%
0
0.00%
79
100.00%
0
0.00%
79
100%
for
0
0.00%
0
0.00%
8
100.00%
0
0.00%
8
100%
while
0
0.00%
0
0.00%
6
100.00%
0
0.00%
6
100%
case
0
0.00%
0
0.00%
0
0.00%
0
0.00%
0
100%

1/* Licensed to the Apache Software Foundation (ASF) under one or more
2 * contributor license agreements.  See the NOTICE file distributed with
3 * this work for additional information regarding copyright ownership.
4 * The ASF licenses this file to You under the Apache License, Version 2.0
5 * (the "License"); you may not use this file except in compliance with
6 * the License.  You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/*
18 * http_script: keeps all script-related ramblings together.
19 *
20 * Compliant to CGI/1.1 spec
21 *
22 * Adapted by rst from original NCSA code by Rob McCool
23 *
24 * Apache adds some new env vars; REDIRECT_URL and REDIRECT_QUERY_STRING for
25 * custom error responses, and DOCUMENT_ROOT because we found it useful.
26 * It also adds SERVER_ADMIN - useful for scripts to know who to mail when
27 * they fail.
28 */
29
30#include "apr.h"
31#include "apr_strings.h"
32#include "apr_thread_proc.h"    /* for RLIMIT stuff */
33#include "apr_optional.h"
34#include "apr_buckets.h"
35#include "apr_lib.h"
36#include "apr_poll.h"
37
38#define APR_WANT_STRFUNC
39#define APR_WANT_MEMFUNC
40#include "apr_want.h"
41
42#define CORE_PRIVATE
43
44#include "util_filter.h"
45#include "ap_config.h"
46#include "httpd.h"
47#include "http_config.h"
48#include "http_request.h"
49#include "http_core.h"
50#include "http_protocol.h"
51#include "http_main.h"
52#include "http_log.h"
53#include "util_script.h"
54#include "ap_mpm.h"
55#include "mod_core.h"
56#include "mod_cgi.h"
57
58module AP_MODULE_DECLARE_DATA cgi_module;
59
60static APR_OPTIONAL_FN_TYPE(ap_register_include_handler) *cgi_pfn_reg_with_ssi;
61static APR_OPTIONAL_FN_TYPE(ap_ssi_get_tag_and_value) *cgi_pfn_gtv;
62static APR_OPTIONAL_FN_TYPE(ap_ssi_parse_string) *cgi_pfn_ps;
63static APR_OPTIONAL_FN_TYPE(ap_cgi_build_command) *cgi_build_command;
64
65/* Read and discard the data in the brigade produced by a CGI script */
66static void discard_script_output(apr_bucket_brigade *bb);
67
68/* KLUDGE --- for back-combatibility, we don't have to check ExecCGI
69 * in ScriptAliased directories, which means we need to know if this
70 * request came through ScriptAlias or not... so the Alias module
71 * leaves a note for us.
72 */
73
74static int is_scriptaliased : call=0
i
s_scriptaliased(request_rec *r)
75{
76    const char *t = apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/generators/mod_cgi.c line=74 column=42
r
-> : enter=0, leave=0
-
>notes : include/httpd.h line=910 column=18
n
otes, "alias-forced-type");
77    return : pass=0
r
eturn MC/DC independently affect : true=0, false=0

t : modules/generators/mod_cgi.c line=76 column=17
tTF
 && : true=0, false=0
&
& (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
strcasecmp : enter=0, leave=0

strcasecmp : /usr/include/string.h line=536 column=12
s
trcasecmp(t : modules/generators/mod_cgi.c line=76 column=17
t
, "cgi-script"));
78}
79
80/* Configuration stuff */
81
82#define DEFAULT_LOGBYTES 10385760
83#define DEFAULT_BUFBYTES 1024
84
85typedef struct {
86    const char *logname;
87    long        logbytes;
88    apr_size_t  bufbytes;
89} cgi_server_conf;
90
91static void *create_cgi_config : call=1
c
reate_cgi_config(apr_pool_t *p, server_rec *s)
92{
93    cgi_server_conf *c =
94    (cgi_server_conf *) apr_pcalloc(p : modules/generators/mod_cgi.c line=91 column=44
p
, sizeof(cgi_server_conf));
95
96    c : modules/generators/mod_cgi.c line=93 column=22
c
-> : enter=1, leave=1
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname = : enter=1, leave=1
=
 NULL;
97    c : modules/generators/mod_cgi.c line=93 column=22
c
-> : enter=1, leave=1
-
>logbytes : modules/generators/mod_cgi.c line=87 column=17
l
ogbytes = : enter=1, leave=1
=
 DEFAULT_LOGBYTES;
98    c : modules/generators/mod_cgi.c line=93 column=22
c
-> : enter=1, leave=1
-
>bufbytes : modules/generators/mod_cgi.c line=88 column=17
b
ufbytes = : enter=1, leave=1
=
 DEFAULT_BUFBYTES;
99
100    return : pass=1
r
eturn c : modules/generators/mod_cgi.c line=93 column=22
c
;
101}
102
103static void *merge_cgi_config : call=0
m
erge_cgi_config(apr_pool_t *p, void *basev, void *overridesv)
104{
105    cgi_server_conf *base = (cgi_server_conf *) basev : modules/generators/mod_cgi.c line=103 column=52
b
asev,
106                    *overrides = (cgi_server_conf *) overridesv : modules/generators/mod_cgi.c line=103 column=65
o
verridesv;
107
108    return : pass=0
r
eturn overrides : modules/generators/mod_cgi.c line=106 column=22
o
verrides-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname conditional operator : true=0, false=0
?
 overrides : modules/generators/mod_cgi.c line=106 column=22
o
verrides : base : modules/generators/mod_cgi.c line=105 column=22
b
ase;
109}
110
111static const char *set_scriptlog : call=0
s
et_scriptlog(cmd_parms *cmd, void *dummy, const char *arg)
112{
113    server_rec *s = cmd : modules/generators/mod_cgi.c line=111 column=45
c
md-> : enter=0, leave=0
-
>server : include/http_config.h line=296 column=17
s
erver;
114    cgi_server_conf *conf = ap_get_module_config(s : modules/generators/mod_cgi.c line=113 column=17
s
-> : enter=0, leave=0
-
>module_config : include/httpd.h line=1207 column=30
m
odule_config,
115                                                 &cgi_module : modules/generators/mod_cgi.c line=58 column=31
c
gi_module);
116
117    conf : modules/generators/mod_cgi.c line=114 column=22
c
onf-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname = : enter=0, leave=0
=
 ap_server_root_relative : enter=0, leave=0

ap_server_root_relative : include/http_config.h line=557 column=20
a
p_server_root_relative(cmd : modules/generators/mod_cgi.c line=111 column=45
c
md-> : enter=0, leave=0
-
>pool : include/http_config.h line=291 column=17
p
ool, arg : modules/generators/mod_cgi.c line=111 column=75
a
rg);
118
119    if : true=0, false=0
i
f (! : true=0, false=0
!
conf : modules/generators/mod_cgi.c line=114 column=22
c
onf-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname) {
120        return : pass=0
r
eturn apr_pstrcat : enter=0, leave=0

apr_pstrcat : /usr/include/apr-1/apr_strings.h line=139 column=28
a
pr_pstrcat(cmd : modules/generators/mod_cgi.c line=111 column=45
c
md-> : enter=0, leave=0
-
>pool : include/http_config.h line=291 column=17
p
ool, "Invalid ScriptLog path ",
121                           arg : modules/generators/mod_cgi.c line=111 column=75
a
rg, NULL);
122    }
123
124    return : pass=0
r
eturn NULL;
125}
126
127static const char *set_scriptlog_length : call=0
s
et_scriptlog_length(cmd_parms *cmd, void *dummy,
128                                        const char *arg)
129{
130    server_rec *s = cmd : modules/generators/mod_cgi.c line=127 column=52
c
md-> : enter=0, leave=0
-
>server : include/http_config.h line=296 column=17
s
erver;
131    cgi_server_conf *conf = ap_get_module_config(s : modules/generators/mod_cgi.c line=130 column=17
s
-> : enter=0, leave=0
-
>module_config : include/httpd.h line=1207 column=30
m
odule_config,
132                                                 &cgi_module : modules/generators/mod_cgi.c line=58 column=31
c
gi_module);
133
134    conf : modules/generators/mod_cgi.c line=131 column=22
c
onf-> : enter=0, leave=0
-
>logbytes : modules/generators/mod_cgi.c line=87 column=17
l
ogbytes = : enter=0, leave=0
=
 atol : enter=0, leave=0

atol : /usr/include/stdlib.h line=151 column=17
a
tol(arg : modules/generators/mod_cgi.c line=128 column=53
a
rg);
135    return : pass=0
r
eturn NULL;
136}
137
138static const char *set_scriptlog_buffer : call=0
s
et_scriptlog_buffer(cmd_parms *cmd, void *dummy,
139                                        const char *arg)
140{
141    server_rec *s = cmd : modules/generators/mod_cgi.c line=138 column=52
c
md-> : enter=0, leave=0
-
>server : include/http_config.h line=296 column=17
s
erver;
142    cgi_server_conf *conf = ap_get_module_config(s : modules/generators/mod_cgi.c line=141 column=17
s
-> : enter=0, leave=0
-
>module_config : include/httpd.h line=1207 column=30
m
odule_config,
143                                                 &cgi_module : modules/generators/mod_cgi.c line=58 column=31
c
gi_module);
144
145    conf : modules/generators/mod_cgi.c line=142 column=22
c
onf-> : enter=0, leave=0
-
>bufbytes : modules/generators/mod_cgi.c line=88 column=17
b
ufbytes = : enter=0, leave=0
=
 atoi : enter=0, leave=0

atoi : /usr/include/stdlib.h line=148 column=12
a
toi(arg : modules/generators/mod_cgi.c line=139 column=53
a
rg);
146    return : pass=0
r
eturn NULL;
147}
148
149static const command_rec cgi_cmds[] =
150{
151AP_INIT_TAKE1("ScriptLog", set_scriptlog : modules/generators/mod_cgi.c line=111 column=20
s
et_scriptlog, NULL, RSRC_CONF,
152     "the name of a log for script debugging info"),
153AP_INIT_TAKE1("ScriptLogLength", set_scriptlog_length : modules/generators/mod_cgi.c line=127 column=20
s
et_scriptlog_length, NULL, RSRC_CONF,
154     "the maximum length (in bytes) of the script debug log"),
155AP_INIT_TAKE1("ScriptLogBuffer", set_scriptlog_buffer : modules/generators/mod_cgi.c line=138 column=20
s
et_scriptlog_buffer, NULL, RSRC_CONF,
156     "the maximum size (in bytes) to record of a POST request"),
157    {NULL}
158};
159
160static int log_scripterror : call=0
l
og_scripterror(request_rec *r, cgi_server_conf * conf, int ret,
161                           apr_status_t rv, char *error)
162{
163    apr_file_t *f = NULL;
164    apr_finfo_t finfo;
165    char time_str[APR_CTIME_LEN];
166    int log_flags = rv : modules/generators/mod_cgi.c line=161 column=41
r
conditional operator : true=0, false=0
?
 APLOG_ERR : APLOG_ERR;
167
168    ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, log_flags : modules/generators/mod_cgi.c line=166 column=9
l
og_flags, rv : modules/generators/mod_cgi.c line=161 column=41
r
v, r : modules/generators/mod_cgi.c line=160 column=41
r
,
169                  "%s: %s", error : modules/generators/mod_cgi.c line=161 column=51
e
rror, r : modules/generators/mod_cgi.c line=160 column=41
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
170
171    /* XXX Very expensive mainline case! Open, then getfileinfo! */
172    if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
conf : modules/generators/mod_cgi.c line=160 column=62
c
onf-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname || : true=0, false=0
|
|
173        ((apr_stat : enter=0, leave=0

apr_stat : /usr/include/apr-1/apr_file_info.h line=229 column=27
a
pr_stat(&finfo : modules/generators/mod_cgi.c line=164 column=17
f
info, conf : modules/generators/mod_cgi.c line=160 column=62
c
onf-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname,
174                   APR_FINFO_SIZE, r : modules/generators/mod_cgi.c line=160 column=41
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool) == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_SUCCESS) && : true=0, false=0
&
&
175         (finfo : modules/generators/mod_cgi.c line=164 column=17
f
info.size : /usr/include/apr-1/apr_file_info.h line=198 column=15 size > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 conf : modules/generators/mod_cgi.c line=160 column=62
c
onf-> : enter=0, leave=0
-
>logbytes : modules/generators/mod_cgi.c line=87 column=17
l
ogbytes)) || : true=0, false=0
|
|
176        (apr_file_open : enter=0, leave=0

apr_file_open : /usr/include/apr-1/apr_file_io.h line=235 column=27
a
pr_file_open(&f : modules/generators/mod_cgi.c line=163 column=17
f
conf : modules/generators/mod_cgi.c line=160 column=62
c
onf-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname,
177                       APR_APPEND| : pass=0
|
APR_WRITE| : pass=0
|
APR_CREATE, APR_OS_DEFAULT,
178                       r : modules/generators/mod_cgi.c line=160 column=41
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS)) {
179        return : pass=0
r
eturn ret : modules/generators/mod_cgi.c line=160 column=72
r
et;
180    }
181
182    /* "%% [Wed Jun 19 10:53:21 1996] GET /cgi-bin/printenv HTTP/1.0" */
183    apr_ctime : enter=0, leave=0

apr_ctime : /usr/include/apr-1/apr_time.h line=204 column=27
a
pr_ctime(time_str : modules/generators/mod_cgi.c line=165 column=10
t
ime_str, apr_time_now : enter=0, leave=0

apr_time_now : /usr/include/apr-1/apr_time.h line=85 column=25
a
pr_time_now());
184    apr_file_printf : enter=0, leave=0

apr_file_printf : /usr/include/apr-1/apr_file_io.h line=759 column=25
a
pr_file_printf(f : modules/generators/mod_cgi.c line=163 column=17
f
, "%%%% [%s] %s %s%s%s %s\n", time_str : modules/generators/mod_cgi.c line=165 column=10
t
ime_str, r : modules/generators/mod_cgi.c line=160 column=41
r
-> : enter=0, leave=0
-
>method : include/httpd.h line=829 column=17
m
ethod, r : modules/generators/mod_cgi.c line=160 column=41
r
-> : enter=0, leave=0
-
>uri : include/httpd.h line=946 column=11
u
ri,
185                    r : modules/generators/mod_cgi.c line=160 column=41
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs conditional operator : true=0, false=0
?
 "?" : "", r : modules/generators/mod_cgi.c line=160 column=41
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs conditional operator : true=0, false=0
?
 r : modules/generators/mod_cgi.c line=160 column=41
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs : "", r : modules/generators/mod_cgi.c line=160 column=41
r
-> : enter=0, leave=0
-
>protocol : include/httpd.h line=810 column=11
p
rotocol);
186    /* "%% 500 /usr/local/apache/cgi-bin */
187    apr_file_printf : enter=0, leave=0

apr_file_printf : /usr/include/apr-1/apr_file_io.h line=759 column=25
a
pr_file_printf(f : modules/generators/mod_cgi.c line=163 column=17
f
, "%%%% %d %s\n", ret : modules/generators/mod_cgi.c line=160 column=72
r
et, r : modules/generators/mod_cgi.c line=160 column=41
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
188
189    apr_file_printf : enter=0, leave=0

apr_file_printf : /usr/include/apr-1/apr_file_io.h line=759 column=25
a
pr_file_printf(f : modules/generators/mod_cgi.c line=163 column=17
f
, "%%error\n%s\n", error : modules/generators/mod_cgi.c line=161 column=51
e
rror);
190
191    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(f : modules/generators/mod_cgi.c line=163 column=17
f
);
192    return : pass=0
r
eturn ret : modules/generators/mod_cgi.c line=160 column=72
r
et;
193}
194
195/* Soak up stderr from a script and redirect it to the error log.
196 */
197static apr_status_t log_script_err : call=0
l
og_script_err(request_rec *r, apr_file_t *script_err)
198{
199    char argsbuffer[HUGE_STRING_LEN];
200    char *newline;
201    apr_status_t rv;
202
203    while : true=0, false=0
w
hile ((rv : modules/generators/mod_cgi.c line=201 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(argsbuffer : modules/generators/mod_cgi.c line=199 column=10
a
rgsbuffer, HUGE_STRING_LEN,
204                               script_err : modules/generators/mod_cgi.c line=197 column=64
s
cript_err)) == : true=0, false=0
=
= APR_SUCCESS) {
205        newline : modules/generators/mod_cgi.c line=200 column=11
n
ewline = : pass=0
=
 strchr : enter=0, leave=0

strchr : /usr/include/string.h line=235 column=14
s
trchr(argsbuffer : modules/generators/mod_cgi.c line=199 column=10
a
rgsbuffer, '\n');
206        if : true=0, false=0
i
f (newline : modules/generators/mod_cgi.c line=200 column=11
n
ewline) {
207            *newline : modules/generators/mod_cgi.c line=200 column=11
n
ewline = : enter=0, leave=0
=
 '\0';
208        }
209        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, r : modules/generators/mod_cgi.c line=197 column=49
r
,
210                      "%s", argsbuffer : modules/generators/mod_cgi.c line=199 column=10
a
rgsbuffer);
211    }
212
213    return : pass=0
r
eturn rv : modules/generators/mod_cgi.c line=201 column=18
r
v;
214}
215
216static int log_script : call=0
l
og_script(request_rec *r, cgi_server_conf * conf, int ret,
217                      char *dbuf, const char *sbuf, apr_bucket_brigade *bb,
218                      apr_file_t *script_err)
219{
220    const apr_array_header_t *hdrs_arr = apr_table_elts : enter=0, leave=0

apr_table_elts : /usr/include/apr-1/apr_tables.h line=88 column=41
a
pr_table_elts(r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in);
221    const apr_table_entry_t *hdrs = (const apr_table_entry_t *) hdrs_arr : modules/generators/mod_cgi.c line=220 column=31
h
drs_arr-> : enter=0, leave=0
-
>elts : /usr/include/apr-1/apr_tables.h line=62 column=11 elts;
222    char argsbuffer[HUGE_STRING_LEN];
223    apr_file_t *f = NULL;
224    apr_bucket *e;
225    const char *buf;
226    apr_size_t len;
227    apr_status_t rv;
228    int first;
229    int i;
230    apr_finfo_t finfo;
231    char time_str[APR_CTIME_LEN];
232
233    /* XXX Very expensive mainline case! Open, then getfileinfo! */
234    if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
conf : modules/generators/mod_cgi.c line=216 column=57
c
onf-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname || : true=0, false=0
|
|
235        ((apr_stat : enter=0, leave=0

apr_stat : /usr/include/apr-1/apr_file_info.h line=229 column=27
a
pr_stat(&finfo : modules/generators/mod_cgi.c line=230 column=17
f
info, conf : modules/generators/mod_cgi.c line=216 column=57
c
onf-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname,
236                   APR_FINFO_SIZE, r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool) == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_SUCCESS) && : true=0, false=0
&
&
237         (finfo : modules/generators/mod_cgi.c line=230 column=17
f
info.size : /usr/include/apr-1/apr_file_info.h line=198 column=15 size > : true=0, false=0
MC/DC independently affect : true=0, false=0
>TF
 conf : modules/generators/mod_cgi.c line=216 column=57
c
onf-> : enter=0, leave=0
-
>logbytes : modules/generators/mod_cgi.c line=87 column=17
l
ogbytes)) || : true=0, false=0
|
|
238        (apr_file_open : enter=0, leave=0

apr_file_open : /usr/include/apr-1/apr_file_io.h line=235 column=27
a
pr_file_open(&f : modules/generators/mod_cgi.c line=223 column=17
f
conf : modules/generators/mod_cgi.c line=216 column=57
c
onf-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname,
239                       APR_APPEND| : pass=0
|
APR_WRITE| : pass=0
|
APR_CREATE, APR_OS_DEFAULT,
240                       r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS)) {
241        /* Soak up script output */
242        discard_script_output : enter=0, leave=0

discard_script_output : modules/generators/mod_cgi.c line=66 column=13
d
iscard_script_output(bb : modules/generators/mod_cgi.c line=217 column=73
b
b);
243        log_script_err : enter=0, leave=0

log_script_err : modules/generators/mod_cgi.c line=197 column=21
l
og_script_err(r : modules/generators/mod_cgi.c line=216 column=36
r
script_err : modules/generators/mod_cgi.c line=218 column=35
s
cript_err);
244        return : pass=0
r
eturn ret : modules/generators/mod_cgi.c line=216 column=67
r
et;
245    }
246
247    /* "%% [Wed Jun 19 10:53:21 1996] GET /cgi-bin/printenv HTTP/1.0" */
248    apr_ctime : enter=0, leave=0

apr_ctime : /usr/include/apr-1/apr_time.h line=204 column=27
a
pr_ctime(time_str : modules/generators/mod_cgi.c line=231 column=10
t
ime_str, apr_time_now : enter=0, leave=0

apr_time_now : /usr/include/apr-1/apr_time.h line=85 column=25
a
pr_time_now());
249    apr_file_printf : enter=0, leave=0

apr_file_printf : /usr/include/apr-1/apr_file_io.h line=759 column=25
a
pr_file_printf(f : modules/generators/mod_cgi.c line=223 column=17
f
, "%%%% [%s] %s %s%s%s %s\n", time_str : modules/generators/mod_cgi.c line=231 column=10
t
ime_str, r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>method : include/httpd.h line=829 column=17
m
ethod, r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>uri : include/httpd.h line=946 column=11
u
ri,
250                    r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs conditional operator : true=0, false=0
?
 "?" : "", r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs conditional operator : true=0, false=0
?
 r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs : "", r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>protocol : include/httpd.h line=810 column=11
p
rotocol);
251    /* "%% 500 /usr/local/apache/cgi-bin" */
252    apr_file_printf : enter=0, leave=0

apr_file_printf : /usr/include/apr-1/apr_file_io.h line=759 column=25
a
pr_file_printf(f : modules/generators/mod_cgi.c line=223 column=17
f
, "%%%% %d %s\n", ret : modules/generators/mod_cgi.c line=216 column=67
r
et, r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
253
254    apr_file_puts : enter=0, leave=0

apr_file_puts : /usr/include/apr-1/apr_file_io.h line=550 column=27
a
pr_file_puts("%request\n", f : modules/generators/mod_cgi.c line=223 column=17
f
);
255    for : true=0, false=0
f
or (i : modules/generators/mod_cgi.c line=229 column=9
i
 = : pass=0
=
 0; i : modules/generators/mod_cgi.c line=229 column=9
i
 < : true=0, false=0
<
 hdrs_arr : modules/generators/mod_cgi.c line=220 column=31
h
drs_arr-> : enter=0, leave=0
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts; ++ : pass=0
+
+i : modules/generators/mod_cgi.c line=229 column=9
i
) {
256        if : true=0, false=0
i
f (! : true=0, false=0
!
hdrs : modules/generators/mod_cgi.c line=221 column=30
h
drs[] : enter=0, leave=0
[
i : modules/generators/mod_cgi.c line=229 column=9
i
].key : /usr/include/apr-1/apr_tables.h line=73 column=11 key)
257            continue : pass=0
c
ontinue;
258        apr_file_printf : enter=0, leave=0

apr_file_printf : /usr/include/apr-1/apr_file_io.h line=759 column=25
a
pr_file_printf(f : modules/generators/mod_cgi.c line=223 column=17
f
, "%s: %s\n", hdrs : modules/generators/mod_cgi.c line=221 column=30
h
drs[] : enter=0, leave=0
[
i : modules/generators/mod_cgi.c line=229 column=9
i
].key : /usr/include/apr-1/apr_tables.h line=73 column=11 key, hdrs : modules/generators/mod_cgi.c line=221 column=30
h
drs[] : enter=0, leave=0
[
i : modules/generators/mod_cgi.c line=229 column=9
i
].val : /usr/include/apr-1/apr_tables.h line=77 column=11 val);
259    }
260    if : true=0, false=0
i
f ((r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>method_number : include/httpd.h line=831 column=9
m
ethod_number == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= M_POST || : true=0, false=0
|
r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>method_number : include/httpd.h line=831 column=9
m
ethod_number == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= M_PUT) && : true=0, false=0
&
&
261        MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
dbuf : modules/generators/mod_cgi.c line=217 column=29
d
buf) {
262        apr_file_printf : enter=0, leave=0

apr_file_printf : /usr/include/apr-1/apr_file_io.h line=759 column=25
a
pr_file_printf(f : modules/generators/mod_cgi.c line=223 column=17
f
, "\n%s\n", dbuf : modules/generators/mod_cgi.c line=217 column=29
d
buf);
263    }
264
265    apr_file_puts : enter=0, leave=0

apr_file_puts : /usr/include/apr-1/apr_file_io.h line=550 column=27
a
pr_file_puts("%response\n", f : modules/generators/mod_cgi.c line=223 column=17
f
);
266    hdrs_arr : modules/generators/mod_cgi.c line=220 column=31
h
drs_arr = : pass=0
=
 apr_table_elts : enter=0, leave=0

apr_table_elts : /usr/include/apr-1/apr_tables.h line=88 column=41
a
pr_table_elts(r : modules/generators/mod_cgi.c line=216 column=36
r
-> : enter=0, leave=0
-
>err_headers_out : include/httpd.h line=906 column=18
e
rr_headers_out);
267    hdrs : modules/generators/mod_cgi.c line=221 column=30
h
drs = : pass=0
=
 (const apr_table_entry_t *) hdrs_arr : modules/generators/mod_cgi.c line=220 column=31
h
drs_arr-> : enter=0, leave=0
-
>elts : /usr/include/apr-1/apr_tables.h line=62 column=11 elts;
268
269    for : true=0, false=0
f
or (i : modules/generators/mod_cgi.c line=229 column=9
i
 = : pass=0
=
 0; i : modules/generators/mod_cgi.c line=229 column=9
i
 < : true=0, false=0
<
 hdrs_arr : modules/generators/mod_cgi.c line=220 column=31
h
drs_arr-> : enter=0, leave=0
-
>nelts : /usr/include/apr-1/apr_tables.h line=58 column=9 nelts; ++ : pass=0
+
+i : modules/generators/mod_cgi.c line=229 column=9
i
) {
270        if : true=0, false=0
i
f (! : true=0, false=0
!
hdrs : modules/generators/mod_cgi.c line=221 column=30
h
drs[] : enter=0, leave=0
[
i : modules/generators/mod_cgi.c line=229 column=9
i
].key : /usr/include/apr-1/apr_tables.h line=73 column=11 key)
271            continue : pass=0
c
ontinue;
272        apr_file_printf : enter=0, leave=0

apr_file_printf : /usr/include/apr-1/apr_file_io.h line=759 column=25
a
pr_file_printf(f : modules/generators/mod_cgi.c line=223 column=17
f
, "%s: %s\n", hdrs : modules/generators/mod_cgi.c line=221 column=30
h
drs[] : enter=0, leave=0
[
i : modules/generators/mod_cgi.c line=229 column=9
i
].key : /usr/include/apr-1/apr_tables.h line=73 column=11 key, hdrs : modules/generators/mod_cgi.c line=221 column=30
h
drs[] : enter=0, leave=0
[
i : modules/generators/mod_cgi.c line=229 column=9
i
].val : /usr/include/apr-1/apr_tables.h line=77 column=11 val);
273    }
274
275    if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

sbuf : modules/generators/mod_cgi.c line=217 column=47
sTF
buf && : true=0, false=0
&
MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
sbuf : modules/generators/mod_cgi.c line=217 column=47
s
buf)
276        apr_file_printf : enter=0, leave=0

apr_file_printf : /usr/include/apr-1/apr_file_io.h line=759 column=25
a
pr_file_printf(f : modules/generators/mod_cgi.c line=223 column=17
f
, "%s\n", sbuf : modules/generators/mod_cgi.c line=217 column=47
s
buf);
277
278    first : modules/generators/mod_cgi.c line=228 column=9
f
irst = : pass=0
=
 1;
279    for : true=0, false=0
f
or (e : modules/generators/mod_cgi.c line=224 column=17
e
 = : pass=0
=
 APR_BRIGADE_FIRST(bb : modules/generators/mod_cgi.c line=217 column=73
b
b);
280         e : modules/generators/mod_cgi.c line=224 column=17
e
 != : true=0, false=0
!
= APR_BRIGADE_SENTINEL(bb : modules/generators/mod_cgi.c line=217 column=73
b
b);
281         e : modules/generators/mod_cgi.c line=224 column=17
e
 = : pass=0
=
 APR_BUCKET_NEXT(e : modules/generators/mod_cgi.c line=224 column=17
e
))
282    {
283        if : true=0, false=0
i
f (APR_BUCKET_IS_EOS(e : modules/generators/mod_cgi.c line=224 column=17
e
)) {
284            break : pass=0
b
reak;
285        }
286        rv : modules/generators/mod_cgi.c line=227 column=18
r
= : pass=0
=
 apr_bucket_read(e : modules/generators/mod_cgi.c line=224 column=17
e
, &buf : modules/generators/mod_cgi.c line=225 column=17
b
uf, &len : modules/generators/mod_cgi.c line=226 column=16
l
en, APR_BLOCK_READ : /usr/include/apr-1/apr_buckets.h line=58 column=5 APR_BLOCK_READ);
287        if : true=0, false=0
i
f (rv : modules/generators/mod_cgi.c line=227 column=18
r
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS || : true=0, false=0
|
| (len : modules/generators/mod_cgi.c line=226 column=16
l
en == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 0)) {
288            break : pass=0
b
reak;
289        }
290        if : true=0, false=0
i
f (first : modules/generators/mod_cgi.c line=228 column=9
f
irst) {
291            apr_file_puts : enter=0, leave=0

apr_file_puts : /usr/include/apr-1/apr_file_io.h line=550 column=27
a
pr_file_puts("%stdout\n", f : modules/generators/mod_cgi.c line=223 column=17
f
);
292            first : modules/generators/mod_cgi.c line=228 column=9
f
irst = : pass=0
=
 0;
293        }
294        apr_file_write : enter=0, leave=0

apr_file_write : /usr/include/apr-1/apr_file_io.h line=425 column=27
a
pr_file_write(f : modules/generators/mod_cgi.c line=223 column=17
f
buf : modules/generators/mod_cgi.c line=225 column=17
b
uf, &len : modules/generators/mod_cgi.c line=226 column=16
l
en);
295        apr_file_puts : enter=0, leave=0

apr_file_puts : /usr/include/apr-1/apr_file_io.h line=550 column=27
a
pr_file_puts("\n", f : modules/generators/mod_cgi.c line=223 column=17
f
);
296    }
297
298    if : true=0, false=0
i
f (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(argsbuffer : modules/generators/mod_cgi.c line=222 column=10
a
rgsbuffer, HUGE_STRING_LEN, script_err : modules/generators/mod_cgi.c line=218 column=35
s
cript_err) == : true=0, false=0
=
= APR_SUCCESS) {
299        apr_file_puts : enter=0, leave=0

apr_file_puts : /usr/include/apr-1/apr_file_io.h line=550 column=27
a
pr_file_puts("%stderr\n", f : modules/generators/mod_cgi.c line=223 column=17
f
);
300        apr_file_puts : enter=0, leave=0

apr_file_puts : /usr/include/apr-1/apr_file_io.h line=550 column=27
a
pr_file_puts(argsbuffer : modules/generators/mod_cgi.c line=222 column=10
a
rgsbuffer, f : modules/generators/mod_cgi.c line=223 column=17
f
);
301        while : true=0, false=0
w
hile (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(argsbuffer : modules/generators/mod_cgi.c line=222 column=10
a
rgsbuffer, HUGE_STRING_LEN,
302                             script_err : modules/generators/mod_cgi.c line=218 column=35
s
cript_err) == : true=0, false=0
=
= APR_SUCCESS) {
303            apr_file_puts : enter=0, leave=0

apr_file_puts : /usr/include/apr-1/apr_file_io.h line=550 column=27
a
pr_file_puts(argsbuffer : modules/generators/mod_cgi.c line=222 column=10
a
rgsbuffer, f : modules/generators/mod_cgi.c line=223 column=17
f
);
304        }
305        apr_file_puts : enter=0, leave=0

apr_file_puts : /usr/include/apr-1/apr_file_io.h line=550 column=27
a
pr_file_puts("\n", f : modules/generators/mod_cgi.c line=223 column=17
f
);
306    }
307
308    apr_brigade_destroy : enter=0, leave=0

apr_brigade_destroy : /usr/include/apr-1/apr_buckets.h line=666 column=27
a
pr_brigade_destroy(bb : modules/generators/mod_cgi.c line=217 column=73
b
b);
309    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(script_err : modules/generators/mod_cgi.c line=218 column=35
s
cript_err);
310
311    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(f : modules/generators/mod_cgi.c line=223 column=17
f
);
312    return : pass=0
r
eturn ret : modules/generators/mod_cgi.c line=216 column=67
r
et;
313}
314
315
316/* This is the special environment used for running the "exec cmd="
317 *   variety of SSI directives.
318 */
319static void add_ssi_vars : call=0
a
dd_ssi_vars(request_rec *r)
320{
321    apr_table_t *e = r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>subprocess_env : include/httpd.h line=908 column=18
s
ubprocess_env;
322
323    if : true=0, false=0
i
f (r : modules/generators/mod_cgi.c line=319 column=39
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>path_info : include/httpd.h line=953 column=11
p
ath_info && : true=0, false=0
&
r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>path_info : include/httpd.h line=953 column=11
p
ath_info[] : enter=0, leave=0
[
0] != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= '\0') {
324        request_rec *pa_req;
325
326        apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(e : modules/generators/mod_cgi.c line=321 column=18
e
, "PATH_INFO", ap_escape_shell_cmd : enter=0, leave=0

ap_escape_shell_cmd : include/httpd.h line=1557 column=20
a
p_escape_shell_cmd(r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool,
327                                                           r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>path_info : include/httpd.h line=953 column=11
p
ath_info));
328
329        pa_req : modules/generators/mod_cgi.c line=324 column=22
p
a_req = : pass=0
=
 ap_sub_req_lookup_uri : enter=0, leave=0

ap_sub_req_lookup_uri : include/http_request.h line=71 column=27
a
p_sub_req_lookup_uri(ap_escape_uri(r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>path_info : include/httpd.h line=953 column=11
p
ath_info),
330                                       r : modules/generators/mod_cgi.c line=319 column=39
r
, NULL);
331        if : true=0, false=0
i
f (pa_req : modules/generators/mod_cgi.c line=324 column=22
p
a_req-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename) {
332            apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(e : modules/generators/mod_cgi.c line=321 column=18
e
, "PATH_TRANSLATED",
333                           apr_pstrcat : enter=0, leave=0

apr_pstrcat : /usr/include/apr-1/apr_strings.h line=139 column=28
a
pr_pstrcat(r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, pa_req : modules/generators/mod_cgi.c line=324 column=22
p
a_req-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename,
334                                       pa_req : modules/generators/mod_cgi.c line=324 column=22
p
a_req-> : enter=0, leave=0
-
>path_info : include/httpd.h line=953 column=11
p
ath_info, NULL));
335        }
336        ap_destroy_sub_req : enter=0, leave=0

ap_destroy_sub_req : include/http_request.h line=144 column=18
a
p_destroy_sub_req(pa_req : modules/generators/mod_cgi.c line=324 column=22
p
a_req);
337    }
338
339    if : true=0, false=0
i
f (r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs) {
340        char *arg_copy = apr_pstrdup : enter=0, leave=0

apr_pstrdup : /usr/include/apr-1/apr_strings.h line=95 column=21
a
pr_pstrdup(r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs);
341
342        apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(e : modules/generators/mod_cgi.c line=321 column=18
e
, "QUERY_STRING", r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs);
343        ap_unescape_url : enter=0, leave=0

ap_unescape_url : include/httpd.h line=1455 column=17
a
p_unescape_url(arg_copy : modules/generators/mod_cgi.c line=340 column=15
a
rg_copy);
344        apr_table_setn : enter=0, leave=0

apr_table_setn : /usr/include/apr-1/apr_tables.h line=282 column=19
a
pr_table_setn(e : modules/generators/mod_cgi.c line=321 column=18
e
, "QUERY_STRING_UNESCAPED",
345                       ap_escape_shell_cmd : enter=0, leave=0

ap_escape_shell_cmd : include/httpd.h line=1557 column=20
a
p_escape_shell_cmd(r : modules/generators/mod_cgi.c line=319 column=39
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, arg_copy : modules/generators/mod_cgi.c line=340 column=15
a
rg_copy));
346    }
347}
348
349static void cgi_child_errfn : call=0
c
gi_child_errfn(apr_pool_t *pool, apr_status_t err,
350                            const char *description)
351{
352    apr_file_t *stderr_log;
353    char errbuf[200];
354
355    apr_file_open_stderr : enter=0, leave=0

apr_file_open_stderr : /usr/include/apr-1/apr_file_io.h line=322 column=27
a
pr_file_open_stderr(&stderr_log : modules/generators/mod_cgi.c line=352 column=17
s
tderr_log, pool : modules/generators/mod_cgi.c line=349 column=41
p
ool);
356    /* Escape the logged string because it may be something that
357     * came in over the network.
358     */
359    apr_file_printf : enter=0, leave=0

apr_file_printf : /usr/include/apr-1/apr_file_io.h line=759 column=25
a
pr_file_printf(stderr_log : modules/generators/mod_cgi.c line=352 column=17
s
tderr_log,
360                    "(%d)%s: %s\n",
361                    err : modules/generators/mod_cgi.c line=349 column=60
e
rr,
362                    apr_strerror : enter=0, leave=0

apr_strerror : /usr/include/apr-1/apr_errno.h line=52 column=21
a
pr_strerror(err : modules/generators/mod_cgi.c line=349 column=60
e
rr, errbuf : modules/generators/mod_cgi.c line=353 column=10
e
rrbuf, sizeof(errbuf)),
363#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
364                    ap_escape_logitem : enter=0, leave=0

ap_escape_logitem : include/httpd.h line=1528 column=20
a
p_escape_logitem(pool : modules/generators/mod_cgi.c line=349 column=41
p
ool,
365#endif
366                    description : modules/generators/mod_cgi.c line=350 column=41
d
escription
367#ifndef AP_UNSAFE_ERROR_LOG_UNESCAPED
368                    )
369#endif
370                    );
371}
372
373static apr_status_t run_cgi_child : call=0
r
un_cgi_child(apr_file_t **script_out,
374                                  apr_file_t **script_in,
375                                  apr_file_t **script_err,
376                                  const char *command,
377                                  const char * const argv[],
378                                  request_rec *r,
379                                  apr_pool_t *p,
380                                  cgi_exec_info_t *e_info)
381{
382    const char * const *env;
383    apr_procattr_t *procattr;
384    apr_proc_t *procnew;
385    apr_status_t rc = APR_SUCCESS;
386
387#if defined(RLIMIT_CPU)  || defined(RLIMIT_NPROC) || \
388    defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined (RLIMIT_AS)
389
390    core_dir_config *conf = ap_get_module_config(r : modules/generators/mod_cgi.c line=378 column=48
r
-> : enter=0, leave=0
-
>per_dir_config : include/httpd.h line=977 column=30
p
er_dir_config,
391                                                 &core_module : include/http_core.h line=345 column=31
c
ore_module);
392#endif
393
394#ifdef DEBUG_CGI
395#ifdef OS2
396    /* Under OS/2 need to use device con. */
397    FILE *dbg = fopen("con", "w");
398#else
399    FILE *dbg = fopen("/dev/tty", "w");
400#endif
401    int i;
402#endif
403
404    RAISE_SIGSTOP(CGI_CHILD);
405#ifdef DEBUG_CGI
406    fprintf(dbg, "Attempting to exec %s as CGI child (argv0 = %s)\n",
407            r->filename, argv[0]);
408#endif
409
410    env : modules/generators/mod_cgi.c line=382 column=25
e
nv = : pass=0
=
 (const char * const *)ap_create_environment : enter=0, leave=0

ap_create_environment : include/util_script.h line=51 column=21
a
p_create_environment(p : modules/generators/mod_cgi.c line=379 column=47
p
r : modules/generators/mod_cgi.c line=378 column=48
r
-> : enter=0, leave=0
-
>subprocess_env : include/httpd.h line=908 column=18
s
ubprocess_env);
411
412#ifdef DEBUG_CGI
413    fprintf(dbg, "Environment: \n");
414    for (i = 0; env[i]; ++i)
415        fprintf(dbg, "'%s'\n", env[i]);
416#endif
417
418    /* Transmute ourselves into the script.
419     * NB only ISINDEX scripts get decoded arguments.
420     */
421    if : true=0, false=0
i
f (((rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 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 : modules/generators/mod_cgi.c line=383 column=21
p
rocattr, p : modules/generators/mod_cgi.c line=379 column=47
p
)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS) || : true=0, false=0
|
|
422        ((rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 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 : modules/generators/mod_cgi.c line=383 column=21
p
rocattr,
423                                   e_info : modules/generators/mod_cgi.c line=380 column=52
e
_info-> : enter=0, leave=0
-
>in_pipe : modules/generators/mod_cgi.h line=34 column=26 in_pipe,
424                                   e_info : modules/generators/mod_cgi.c line=380 column=52
e
_info-> : enter=0, leave=0
-
>out_pipe : modules/generators/mod_cgi.h line=35 column=26 out_pipe,
425                                   e_info : modules/generators/mod_cgi.c line=380 column=52
e
_info-> : enter=0, leave=0
-
>err_pipe : modules/generators/mod_cgi.h line=36 column=26 err_pipe)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS) || : true=0, false=0
|
|
426        ((rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 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 : modules/generators/mod_cgi.c line=383 column=21
p
rocattr,
427                        ap_make_dirstr_parent : enter=0, leave=0

ap_make_dirstr_parent : include/httpd.h line=1586 column=20
a
p_make_dirstr_parent(r : modules/generators/mod_cgi.c line=378 column=48
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool,
428                                              r : modules/generators/mod_cgi.c line=378 column=48
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename))) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS) || : true=0, false=0
|
|
429#ifdef RLIMIT_CPU
430        ((rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 apr_procattr_limit_set : enter=0, leave=0

apr_procattr_limit_set : /usr/include/apr-1/apr_thread_proc.h line=515 column=27
a
pr_procattr_limit_set(procattr : modules/generators/mod_cgi.c line=383 column=21
p
rocattr, APR_LIMIT_CPU,
431                                      conf : modules/generators/mod_cgi.c line=390 column=22
c
onf-> : enter=0, leave=0
-
>limit_cpu : include/http_core.h line=524 column=20
l
imit_cpu)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS) || : true=0, false=0
|
|
432#endif
433#if defined(RLIMIT_DATA) || defined(RLIMIT_VMEM) || defined(RLIMIT_AS)
434        ((rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 apr_procattr_limit_set : enter=0, leave=0

apr_procattr_limit_set : /usr/include/apr-1/apr_thread_proc.h line=515 column=27
a
pr_procattr_limit_set(procattr : modules/generators/mod_cgi.c line=383 column=21
p
rocattr, APR_LIMIT_MEM,
435                                      conf : modules/generators/mod_cgi.c line=390 column=22
c
onf-> : enter=0, leave=0
-
>limit_mem : include/http_core.h line=527 column=20
l
imit_mem)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS) || : true=0, false=0
|
|
436#endif
437#ifdef RLIMIT_NPROC
438        ((rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 apr_procattr_limit_set : enter=0, leave=0

apr_procattr_limit_set : /usr/include/apr-1/apr_thread_proc.h line=515 column=27
a
pr_procattr_limit_set(procattr : modules/generators/mod_cgi.c line=383 column=21
p
rocattr, APR_LIMIT_NPROC,
439                                      conf : modules/generators/mod_cgi.c line=390 column=22
c
onf-> : enter=0, leave=0
-
>limit_nproc : include/http_core.h line=530 column=20
l
imit_nproc)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS) || : true=0, false=0
|
|
440#endif
441        ((rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 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 : modules/generators/mod_cgi.c line=383 column=21
p
rocattr,
442                                        e_info : modules/generators/mod_cgi.c line=380 column=52
e
_info-> : enter=0, leave=0
-
>cmd_type : modules/generators/mod_cgi.h line=38 column=26 cmd_type)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS) || : true=0, false=0
|
|
443
444        ((rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 apr_procattr_detach_set : enter=0, leave=0

apr_procattr_detach_set : /usr/include/apr-1/apr_thread_proc.h line=499 column=27
a
pr_procattr_detach_set(procattr : modules/generators/mod_cgi.c line=383 column=21
p
rocattr,
445                                        e_info : modules/generators/mod_cgi.c line=380 column=52
e
_info-> : enter=0, leave=0
-
>detached : modules/generators/mod_cgi.h line=39 column=26 detached)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS) || : true=0, false=0
|
|
446        ((rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 apr_procattr_addrspace_set : enter=0, leave=0

apr_procattr_addrspace_set : /usr/include/apr-1/apr_thread_proc.h line=556 column=27
a
pr_procattr_addrspace_set(procattr : modules/generators/mod_cgi.c line=383 column=21
p
rocattr,
447                                        e_info : modules/generators/mod_cgi.c line=380 column=52
e
_info-> : enter=0, leave=0
-
>addrspace : modules/generators/mod_cgi.h line=44 column=26 addrspace)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS) || : true=0, false=0
|
|
448        ((rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 apr_procattr_child_errfn_set : enter=0, leave=0

apr_procattr_child_errfn_set : /usr/include/apr-1/apr_thread_proc.h line=531 column=27
a
pr_procattr_child_errfn_set(procattr : modules/generators/mod_cgi.c line=383 column=21
p
rocattr, cgi_child_errfn : modules/generators/mod_cgi.c line=349 column=13
c
gi_child_errfn)) != : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS)) {
449        /* Something bad happened, tell the world. */
450        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, rc : modules/generators/mod_cgi.c line=385 column=18
r
c, r : modules/generators/mod_cgi.c line=378 column=48
r
,
451                      "couldn't set child process attributes: %s", r : modules/generators/mod_cgi.c line=378 column=48
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
452    }
453    else {
454        procnew : modules/generators/mod_cgi.c line=384 column=17
p
rocnew = : pass=0
=
 apr_pcalloc(p : modules/generators/mod_cgi.c line=379 column=47
p
, sizeof(*procnew));
455        rc : modules/generators/mod_cgi.c line=385 column=18
r
= : pass=0
=
 ap_os_create_privileged_process : enter=0, leave=0

ap_os_create_privileged_process : include/ap_mpm.h line=114 column=26
a
p_os_create_privileged_process(r : modules/generators/mod_cgi.c line=378 column=48
r
procnew : modules/generators/mod_cgi.c line=384 column=17
p
rocnew, command : modules/generators/mod_cgi.c line=376 column=47
c
ommand, argv : modules/generators/mod_cgi.c line=377 column=54
a
rgv, env : modules/generators/mod_cgi.c line=382 column=25
e
nv,
456                                             procattr : modules/generators/mod_cgi.c line=383 column=21
p
rocattr, p : modules/generators/mod_cgi.c line=379 column=47
p
);
457
458        if : true=0, false=0
i
f (rc : modules/generators/mod_cgi.c line=385 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
459            /* Bad things happened. Everyone should have cleaned up. */
460            ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR| : pass=0
|
APLOG_TOCLIENT, rc : modules/generators/mod_cgi.c line=385 column=18
r
c, r : modules/generators/mod_cgi.c line=378 column=48
r
,
461                          "couldn't create child process: %d: %s", rc : modules/generators/mod_cgi.c line=385 column=18
r
c,
462                          apr_filepath_name_get : enter=0, leave=0

apr_filepath_name_get : /usr/include/apr-1/apr_lib.h line=84 column=27
a
pr_filepath_name_get(r : modules/generators/mod_cgi.c line=378 column=48
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename));
463        }
464        else {
465            apr_pool_note_subprocess : enter=0, leave=0

apr_pool_note_subprocess : /usr/include/apr-1/apr_thread_proc.h line=785 column=19
a
pr_pool_note_subprocess(p : modules/generators/mod_cgi.c line=379 column=47
p
procnew : modules/generators/mod_cgi.c line=384 column=17
p
rocnew, APR_KILL_AFTER_TIMEOUT : /usr/include/apr-1/apr_thread_proc.h line=202 column=5 APR_KILL_AFTER_TIMEOUT);
466
467            *script_in : modules/generators/mod_cgi.c line=374 column=48
s
cript_in = : enter=0, leave=0
=
 procnew : modules/generators/mod_cgi.c line=384 column=17
p
rocnew-> : enter=0, leave=0
-
>out : /usr/include/apr-1/apr_thread_proc.h line=139 column=17 out;
468            if : true=0, false=0
i
f (! : true=0, false=0
!
* dereference : enter=0, leave=0
*
script_in : modules/generators/mod_cgi.c line=374 column=48
s
cript_in)
469                return : pass=0
r
eturn APR_EBADF;
470            apr_file_pipe_timeout_set : enter=0, leave=0

apr_file_pipe_timeout_set : /usr/include/apr-1/apr_file_io.h line=700 column=27
a
pr_file_pipe_timeout_set(* dereference : enter=0, leave=0
*
script_in : modules/generators/mod_cgi.c line=374 column=48
s
cript_in, r : modules/generators/mod_cgi.c line=378 column=48
r
-> : enter=0, leave=0
-
>server : include/httpd.h line=784 column=17
s
erver-> : enter=0, leave=0
-
>timeout : include/httpd.h line=1216 column=25
t
imeout);
471
472            if : true=0, false=0
i
f (e_info : modules/generators/mod_cgi.c line=380 column=52
e
_info-> : enter=0, leave=0
-
>prog_type : modules/generators/mod_cgi.h line=40 column=26 prog_type == : true=0, false=0
=
RUN_AS_CGI : modules/generators/mod_cgi.h line=31 column=27 RUN_AS_CGI) {
473                *script_out : modules/generators/mod_cgi.c line=373 column=48
s
cript_out = : enter=0, leave=0
=
 procnew : modules/generators/mod_cgi.c line=384 column=17
p
rocnew-> : enter=0, leave=0
-
>in : /usr/include/apr-1/apr_thread_proc.h line=137 column=17 in;
474                if : true=0, false=0
i
f (! : true=0, false=0
!
* dereference : enter=0, leave=0
*
script_out : modules/generators/mod_cgi.c line=373 column=48
s
cript_out)
475                    return : pass=0
r
eturn APR_EBADF;
476                apr_file_pipe_timeout_set : enter=0, leave=0

apr_file_pipe_timeout_set : /usr/include/apr-1/apr_file_io.h line=700 column=27
a
pr_file_pipe_timeout_set(* dereference : enter=0, leave=0
*
script_out : modules/generators/mod_cgi.c line=373 column=48
s
cript_out, r : modules/generators/mod_cgi.c line=378 column=48
r
-> : enter=0, leave=0
-
>server : include/httpd.h line=784 column=17
s
erver-> : enter=0, leave=0
-
>timeout : include/httpd.h line=1216 column=25
t
imeout);
477
478                *script_err : modules/generators/mod_cgi.c line=375 column=48
s
cript_err = : enter=0, leave=0
=
 procnew : modules/generators/mod_cgi.c line=384 column=17
p
rocnew-> : enter=0, leave=0
-
>err : /usr/include/apr-1/apr_thread_proc.h line=141 column=17 err;
479                if : true=0, false=0
i
f (! : true=0, false=0
!
* dereference : enter=0, leave=0
*
script_err : modules/generators/mod_cgi.c line=375 column=48
s
cript_err)
480                    return : pass=0
r
eturn APR_EBADF;
481                apr_file_pipe_timeout_set : enter=0, leave=0

apr_file_pipe_timeout_set : /usr/include/apr-1/apr_file_io.h line=700 column=27
a
pr_file_pipe_timeout_set(* dereference : enter=0, leave=0
*
script_err : modules/generators/mod_cgi.c line=375 column=48
s
cript_err, r : modules/generators/mod_cgi.c line=378 column=48
r
-> : enter=0, leave=0
-
>server : include/httpd.h line=784 column=17
s
erver-> : enter=0, leave=0
-
>timeout : include/httpd.h line=1216 column=25
t
imeout);
482            }
483        }
484    }
485#ifdef DEBUG_CGI
486    fclose(dbg);
487#endif
488    return : pass=0
r
eturn (rc : modules/generators/mod_cgi.c line=385 column=18
r
c);
489}
490
491
492static apr_status_t default_build_command : call=0
d
efault_build_command(const char **cmd, const char ***argv,
493                                          request_rec *r, apr_pool_t *p,
494                                          cgi_exec_info_t *e_info)
495{
496    int numwords, x, idx;
497    char *w;
498    const char *args = NULL;
499
500    if : true=0, false=0
i
f (e_info : modules/generators/mod_cgi.c line=494 column=60
e
_info-> : enter=0, leave=0
-
>process_cgi : modules/generators/mod_cgi.h line=37 column=26 process_cgi) {
501        *cmd : modules/generators/mod_cgi.c line=492 column=56
c
md = : enter=0, leave=0
=
 r : modules/generators/mod_cgi.c line=493 column=56
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename;
502        /* Do not process r->args if they contain an '=' assignment
503         */
504        if : true=0, false=0
i
f (r : modules/generators/mod_cgi.c line=493 column=56
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>args : include/httpd.h line=955 column=11
a
rgs && : true=0, false=0
&
r : modules/generators/mod_cgi.c line=493 column=56
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgsMC/DC independently affect : true=0, false=0
[] : enter=0, leave=0
[TF
0] && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
ap_strchr_c(r : modules/generators/mod_cgi.c line=493 column=56
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs, '=')) {
505            args : modules/generators/mod_cgi.c line=498 column=17
a
rgs = : pass=0
=
 r : modules/generators/mod_cgi.c line=493 column=56
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs;
506        }
507    }
508
509    if : true=0, false=0
i
f (! : true=0, false=0
!
args : modules/generators/mod_cgi.c line=498 column=17
a
rgs) {
510        numwords : modules/generators/mod_cgi.c line=496 column=9
n
umwords = : pass=0
=
 1;
511    }
512    else {
513        /* count the number of keywords */
514        for : true=0, false=0
f
or (x : modules/generators/mod_cgi.c line=496 column=19
x
 = : pass=0
=
 0, numwords : modules/generators/mod_cgi.c line=496 column=9
n
umwords = : pass=0
=
 2; args : modules/generators/mod_cgi.c line=498 column=17
a
rgs[] : enter=0, leave=0
[
x : modules/generators/mod_cgi.c line=496 column=19
x
]; x : modules/generators/mod_cgi.c line=496 column=19
x
++ : pass=0
+
+) {
515            if : true=0, false=0
i
f (args : modules/generators/mod_cgi.c line=498 column=17
a
rgs[] : enter=0, leave=0
[
x : modules/generators/mod_cgi.c line=496 column=19
x
== : true=0, false=0
=
= '+') {
516                ++ : pass=0
+
+numwords : modules/generators/mod_cgi.c line=496 column=9
n
umwords;
517            }
518        }
519    }
520    /* Everything is - 1 to account for the first parameter
521     * which is the program name.
522     */
523    if : true=0, false=0
i
f (numwords : modules/generators/mod_cgi.c line=496 column=9
n
umwords > : true=0, false=0
>
 APACHE_ARG_MAX - : pass=0
-
 1) {
524        numwords : modules/generators/mod_cgi.c line=496 column=9
n
umwords = : pass=0
=
 APACHE_ARG_MAX - : pass=0
-
 1;    /* Truncate args to prevent overrun */
525    }
526    *argv : modules/generators/mod_cgi.c line=492 column=75
a
rgv = : enter=0, leave=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(p : modules/generators/mod_cgi.c line=493 column=71
p
, (numwords : modules/generators/mod_cgi.c line=496 column=9
n
umwords + : pass=0
+
 2) * : pass=0
*
 sizeof(char *));
527    (* dereference : enter=0, leave=0
*
argv : modules/generators/mod_cgi.c line=492 column=75
a
rgv)[0] = : enter=0, leave=0
=
 * dereference : enter=0, leave=0
*
cmd : modules/generators/mod_cgi.c line=492 column=56
c
md;
528    for : true=0, false=0
f
or (x : modules/generators/mod_cgi.c line=496 column=19
x
 = : pass=0
=
 1, idx : modules/generators/mod_cgi.c line=496 column=22
i
dx = : pass=0
=
 1; x : modules/generators/mod_cgi.c line=496 column=19
x
 < : true=0, false=0
<
 numwords : modules/generators/mod_cgi.c line=496 column=9
n
umwords; x : modules/generators/mod_cgi.c line=496 column=19
x
++ : pass=0
+
+) {
529        w : modules/generators/mod_cgi.c line=497 column=11
w
 = : pass=0
=
 ap_getword_nulls : enter=0, leave=0

ap_getword_nulls : include/httpd.h line=1338 column=20
a
p_getword_nulls(p : modules/generators/mod_cgi.c line=493 column=71
p
, &args : modules/generators/mod_cgi.c line=498 column=17
a
rgs, '+');
530        ap_unescape_url : enter=0, leave=0

ap_unescape_url : include/httpd.h line=1455 column=17
a
p_unescape_url(w : modules/generators/mod_cgi.c line=497 column=11
w
);
531        (* dereference : enter=0, leave=0
*
argv : modules/generators/mod_cgi.c line=492 column=75
a
rgv)[idx : modules/generators/mod_cgi.c line=496 column=22
i
dx++ : pass=0
+
+] = : enter=0, leave=0
=
 ap_escape_shell_cmd : enter=0, leave=0

ap_escape_shell_cmd : include/httpd.h line=1557 column=20
a
p_escape_shell_cmd(p : modules/generators/mod_cgi.c line=493 column=71
p
w : modules/generators/mod_cgi.c line=497 column=11
w
);
532    }
533    (* dereference : enter=0, leave=0
*
argv : modules/generators/mod_cgi.c line=492 column=75
a
rgv)[idx : modules/generators/mod_cgi.c line=496 column=22
i
dx] = : enter=0, leave=0
=
 NULL;
534
535    return : pass=0
r
eturn APR_SUCCESS;
536}
537
538static void discard_script_output : call=0
d
iscard_script_output(apr_bucket_brigade *bb)
539{
540    apr_bucket *e;
541    const char *buf;
542    apr_size_t len;
543    apr_status_t rv;
544
545    for : true=0, false=0
f
or (e : modules/generators/mod_cgi.c line=540 column=17
e
 = : pass=0
=
 APR_BRIGADE_FIRST(bb : modules/generators/mod_cgi.c line=538 column=55
b
b);
546         e : modules/generators/mod_cgi.c line=540 column=17
e
 != : true=0, false=0
!
= APR_BRIGADE_SENTINEL(bb : modules/generators/mod_cgi.c line=538 column=55
b
b);
547         e : modules/generators/mod_cgi.c line=540 column=17
e
 = : pass=0
=
 APR_BUCKET_NEXT(e : modules/generators/mod_cgi.c line=540 column=17
e
))
548    {
549        if : true=0, false=0
i
f (APR_BUCKET_IS_EOS(e : modules/generators/mod_cgi.c line=540 column=17
e
)) {
550            break : pass=0
b
reak;
551        }
552        rv : modules/generators/mod_cgi.c line=543 column=18
r
= : pass=0
=
 apr_bucket_read(e : modules/generators/mod_cgi.c line=540 column=17
e
, &buf : modules/generators/mod_cgi.c line=541 column=17
b
uf, &len : modules/generators/mod_cgi.c line=542 column=16
l
en, APR_BLOCK_READ : /usr/include/apr-1/apr_buckets.h line=58 column=5 APR_BLOCK_READ);
553        if : true=0, false=0
i
f (rv : modules/generators/mod_cgi.c line=543 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
554            break : pass=0
b
reak;
555        }
556    }
557}
558
559#if APR_FILES_AS_SOCKETS
560
561/* A CGI bucket type is needed to catch any output to stderr from the
562 * script; see PR 22030. */
563static const apr_bucket_type_t bucket_type_cgi;
564
565struct cgi_bucket_data {
566    apr_pollset_t *pollset;
567    request_rec *r;
568};
569
570/* Create a CGI bucket using pipes from script stdout 'out'
571 * and stderr 'err', for request 'r'. */
572static apr_bucket *cgi_bucket_create : call=0
c
gi_bucket_create(request_rec *r,
573                                     apr_file_t *out, apr_file_t *err,
574                                     apr_bucket_alloc_t *list)
575{
576    apr_bucket *b = apr_bucket_alloc : enter=0, leave=0

apr_bucket_alloc : /usr/include/apr-1/apr_buckets.h line=953 column=28
a
pr_bucket_alloc(sizeof(*b), list : modules/generators/mod_cgi.c line=574 column=58
l
ist);
577    apr_status_t rv;
578    apr_pollfd_t fd;
579    struct cgi_bucket_data *data = apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(r : modules/generators/mod_cgi.c line=572 column=51
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, sizeof *data);
580
581    APR_BUCKET_INIT(b : modules/generators/mod_cgi.c line=576 column=17
b
);
582    b : modules/generators/mod_cgi.c line=576 column=17
b
-> : enter=0, leave=0
-
>free : /usr/include/apr-1/apr_buckets.h line=252 column=12 free = : enter=0, leave=0
=
 apr_bucket_free : /usr/include/apr-1/apr_buckets.h line=959 column=26 apr_bucket_free;
583    b : modules/generators/mod_cgi.c line=576 column=17
b
-> : enter=0, leave=0
-
>list : /usr/include/apr-1/apr_buckets.h line=254 column=25 list = : enter=0, leave=0
=
 list : modules/generators/mod_cgi.c line=574 column=58
l
ist;
584    b : modules/generators/mod_cgi.c line=576 column=17
b
-> : enter=0, leave=0
-
>type : /usr/include/apr-1/apr_buckets.h line=228 column=30 type = : enter=0, leave=0
=
 &bucket_type_cgi : modules/generators/mod_cgi.c line=563 column=32
b
ucket_type_cgi;
585    b : modules/generators/mod_cgi.c line=576 column=17
b
-> : enter=0, leave=0
-
>length : /usr/include/apr-1/apr_buckets.h line=234 column=16 length = : enter=0, leave=0
=
 (apr_size_t)(-1);
586    b : modules/generators/mod_cgi.c line=576 column=17
b
-> : enter=0, leave=0
-
>start : /usr/include/apr-1/apr_buckets.h line=242 column=15 start = : enter=0, leave=0
=
 -1;
587
588    /* Create the pollset */
589    rv : modules/generators/mod_cgi.c line=577 column=18
r
= : pass=0
=
 apr_pollset_create : enter=0, leave=0

apr_pollset_create : /usr/include/apr-1/apr_poll.h line=109 column=27
a
pr_pollset_create(&data : modules/generators/mod_cgi.c line=579 column=29
d
ata-> : enter=0, leave=0
-
>pollset : modules/generators/mod_cgi.c line=566 column=20
p
ollset, 2, r : modules/generators/mod_cgi.c line=572 column=51
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, 0);
590    AP_DEBUG_ASSERT(rv == APR_SUCCESS);
591
592    fd : modules/generators/mod_cgi.c line=578 column=18
f
d.desc_type : /usr/include/apr-1/apr_poll.h line=80 column=20 desc_type = : pass=0
=
 APR_POLL_FILE : /usr/include/apr-1/apr_poll.h line=64 column=5 APR_POLL_FILE;
593    fd : modules/generators/mod_cgi.c line=578 column=18
f
d.reqevents : /usr/include/apr-1/apr_poll.h line=81 column=17 reqevents = : pass=0
=
 APR_POLLIN;
594    fd : modules/generators/mod_cgi.c line=578 column=18
f
d.p : /usr/include/apr-1/apr_poll.h line=79 column=17 p = : pass=0
=
 r : modules/generators/mod_cgi.c line=572 column=51
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool;
595    fd : modules/generators/mod_cgi.c line=578 column=18
f
d.desc : /usr/include/apr-1/apr_poll.h line=83 column=20 desc.f : /usr/include/apr-1/apr_poll.h line=70 column=17 f = : pass=0
=
 out : modules/generators/mod_cgi.c line=573 column=50
o
ut; /* script's stdout */
596    fd : modules/generators/mod_cgi.c line=578 column=18
f
d.client_data : /usr/include/apr-1/apr_poll.h line=84 column=11 client_data = : pass=0
=
 (void *)1;
597    rv : modules/generators/mod_cgi.c line=577 column=18
r
= : pass=0
=
 apr_pollset_add : enter=0, leave=0

apr_pollset_add : /usr/include/apr-1/apr_poll.h line=137 column=27
a
pr_pollset_add(data : modules/generators/mod_cgi.c line=579 column=29
d
ata-> : enter=0, leave=0
-
>pollset : modules/generators/mod_cgi.c line=566 column=20
p
ollset, &fd : modules/generators/mod_cgi.c line=578 column=18
f
d);
598    AP_DEBUG_ASSERT(rv == APR_SUCCESS);
599
600    fd : modules/generators/mod_cgi.c line=578 column=18
f
d.desc : /usr/include/apr-1/apr_poll.h line=83 column=20 desc.f : /usr/include/apr-1/apr_poll.h line=70 column=17 f = : pass=0
=
 err : modules/generators/mod_cgi.c line=573 column=67
e
rr; /* script's stderr */
601    fd : modules/generators/mod_cgi.c line=578 column=18
f
d.client_data : /usr/include/apr-1/apr_poll.h line=84 column=11 client_data = : pass=0
=
 (void *)2;
602    rv : modules/generators/mod_cgi.c line=577 column=18
r
= : pass=0
=
 apr_pollset_add : enter=0, leave=0

apr_pollset_add : /usr/include/apr-1/apr_poll.h line=137 column=27
a
pr_pollset_add(data : modules/generators/mod_cgi.c line=579 column=29
d
ata-> : enter=0, leave=0
-
>pollset : modules/generators/mod_cgi.c line=566 column=20
p
ollset, &fd : modules/generators/mod_cgi.c line=578 column=18
f
d);
603    AP_DEBUG_ASSERT(rv == APR_SUCCESS);
604
605    data : modules/generators/mod_cgi.c line=579 column=29
d
ata-> : enter=0, leave=0
-
>r : modules/generators/mod_cgi.c line=567 column=18
r
 = : enter=0, leave=0
=
 r : modules/generators/mod_cgi.c line=572 column=51
r
;
606    b : modules/generators/mod_cgi.c line=576 column=17
b
-> : enter=0, leave=0
-
>data : /usr/include/apr-1/apr_buckets.h line=244 column=11 data = : enter=0, leave=0
=
 data : modules/generators/mod_cgi.c line=579 column=29
d
ata;
607    return : pass=0
r
eturn b : modules/generators/mod_cgi.c line=576 column=17
b
;
608}
609
610/* Create a duplicate CGI bucket using given bucket data */
611static apr_bucket *cgi_bucket_dup : call=0
c
gi_bucket_dup(struct cgi_bucket_data *data,
612                                  apr_bucket_alloc_t *list)
613{
614    apr_bucket *b = apr_bucket_alloc : enter=0, leave=0

apr_bucket_alloc : /usr/include/apr-1/apr_buckets.h line=953 column=28
a
pr_bucket_alloc(sizeof(*b), list : modules/generators/mod_cgi.c line=612 column=55
l
ist);
615    APR_BUCKET_INIT(b : modules/generators/mod_cgi.c line=614 column=17
b
);
616    b : modules/generators/mod_cgi.c line=614 column=17
b
-> : enter=0, leave=0
-
>free : /usr/include/apr-1/apr_buckets.h line=252 column=12 free = : enter=0, leave=0
=
 apr_bucket_free : /usr/include/apr-1/apr_buckets.h line=959 column=26 apr_bucket_free;
617    b : modules/generators/mod_cgi.c line=614 column=17
b
-> : enter=0, leave=0
-
>list : /usr/include/apr-1/apr_buckets.h line=254 column=25 list = : enter=0, leave=0
=
 list : modules/generators/mod_cgi.c line=612 column=55
l
ist;
618    b : modules/generators/mod_cgi.c line=614 column=17
b
-> : enter=0, leave=0
-
>type : /usr/include/apr-1/apr_buckets.h line=228 column=30 type = : enter=0, leave=0
=
 &bucket_type_cgi : modules/generators/mod_cgi.c line=563 column=32
b
ucket_type_cgi;
619    b : modules/generators/mod_cgi.c line=614 column=17
b
-> : enter=0, leave=0
-
>length : /usr/include/apr-1/apr_buckets.h line=234 column=16 length = : enter=0, leave=0
=
 (apr_size_t)(-1);
620    b : modules/generators/mod_cgi.c line=614 column=17
b
-> : enter=0, leave=0
-
>start : /usr/include/apr-1/apr_buckets.h line=242 column=15 start = : enter=0, leave=0
=
 -1;
621    b : modules/generators/mod_cgi.c line=614 column=17
b
-> : enter=0, leave=0
-
>data : /usr/include/apr-1/apr_buckets.h line=244 column=11 data = : enter=0, leave=0
=
 data : modules/generators/mod_cgi.c line=611 column=59
d
ata;
622    return : pass=0
r
eturn b : modules/generators/mod_cgi.c line=614 column=17
b
;
623}
624
625/* Handle stdout from CGI child.  Duplicate of logic from the _read
626 * method of the real APR pipe bucket implementation. */
627static apr_status_t cgi_read_stdout : call=0
c
gi_read_stdout(apr_bucket *a, apr_file_t *out,
628                                    const char **str, apr_size_t *len)
629{
630    char *buf;
631    apr_status_t rv;
632
633    *str : modules/generators/mod_cgi.c line=628 column=50
s
tr = : enter=0, leave=0
=
 NULL;
634    *len : modules/generators/mod_cgi.c line=628 column=67
l
en = : enter=0, leave=0
=
 APR_BUCKET_BUFF_SIZE;
635    buf : modules/generators/mod_cgi.c line=630 column=11
b
uf = : pass=0
=
 apr_bucket_alloc : enter=0, leave=0

apr_bucket_alloc : /usr/include/apr-1/apr_buckets.h line=953 column=28
a
pr_bucket_alloc(* dereference : enter=0, leave=0
*
len : modules/generators/mod_cgi.c line=628 column=67
l
en, a : modules/generators/mod_cgi.c line=627 column=49
a
-> : enter=0, leave=0
-
>list : /usr/include/apr-1/apr_buckets.h line=254 column=25 list); /* XXX: check for failure? */
636
637    rv : modules/generators/mod_cgi.c line=631 column=18
r
= : pass=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(out : modules/generators/mod_cgi.c line=627 column=64
o
ut, buf : modules/generators/mod_cgi.c line=630 column=11
b
uf, len : modules/generators/mod_cgi.c line=628 column=67
l
en);
638
639    if : true=0, false=0
i
f (rv : modules/generators/mod_cgi.c line=631 column=18
r
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_SUCCESS && : true=0, false=0
&
rv : modules/generators/mod_cgi.c line=631 column=18
r
!= : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
= APR_EOF) {
640        apr_bucket_free : enter=0, leave=0

apr_bucket_free : /usr/include/apr-1/apr_buckets.h line=959 column=26
a
pr_bucket_free(buf : modules/generators/mod_cgi.c line=630 column=11
b
uf);
641        return : pass=0
r
eturn rv : modules/generators/mod_cgi.c line=631 column=18
r
v;
642    }
643
644    if : true=0, false=0
i
f (* dereference : enter=0, leave=0
*
len : modules/generators/mod_cgi.c line=628 column=67
l
en > : true=0, false=0
>
 0) {
645        struct cgi_bucket_data *data = a : modules/generators/mod_cgi.c line=627 column=49
a
-> : enter=0, leave=0
-
>data : /usr/include/apr-1/apr_buckets.h line=244 column=11 data;
646        apr_bucket_heap *h;
647
648        /* Change the current bucket to refer to what we read */
649        a : modules/generators/mod_cgi.c line=627 column=49
a
 = : pass=0
=
 apr_bucket_heap_make : enter=0, leave=0

apr_bucket_heap_make : /usr/include/apr-1/apr_buckets.h line=1360 column=27
a
pr_bucket_heap_make(a : modules/generators/mod_cgi.c line=627 column=49
a
buf : modules/generators/mod_cgi.c line=630 column=11
b
uf, * dereference : enter=0, leave=0
*
len : modules/generators/mod_cgi.c line=628 column=67
l
en, apr_bucket_free : /usr/include/apr-1/apr_buckets.h line=959 column=26 apr_bucket_free);
650        h : modules/generators/mod_cgi.c line=646 column=26
h
 = : pass=0
=
 a : modules/generators/mod_cgi.c line=627 column=49
a
-> : enter=0, leave=0
-
>data : /usr/include/apr-1/apr_buckets.h line=244 column=11 data;
651        h : modules/generators/mod_cgi.c line=646 column=26
h
-> : enter=0, leave=0
-
>alloc_len : /usr/include/apr-1/apr_buckets.h line=551 column=17 alloc_len = : enter=0, leave=0
=
 APR_BUCKET_BUFF_SIZE; /* note the real buffer size */
652        *str : modules/generators/mod_cgi.c line=628 column=50
s
tr = : enter=0, leave=0
=
 buf : modules/generators/mod_cgi.c line=630 column=11
b
uf;
653        APR_BUCKET_INSERT_AFTER(a : modules/generators/mod_cgi.c line=627 column=49
a
cgi_bucket_dup : enter=0, leave=0

cgi_bucket_dup : modules/generators/mod_cgi.c line=611 column=20
c
gi_bucket_dup(data : modules/generators/mod_cgi.c line=645 column=33
d
ata, a : modules/generators/mod_cgi.c line=627 column=49
a
-> : enter=0, leave=0
-
>list : /usr/include/apr-1/apr_buckets.h line=254 column=25 list));
654    }
655    else {
656        apr_bucket_free : enter=0, leave=0

apr_bucket_free : /usr/include/apr-1/apr_buckets.h line=959 column=26
a
pr_bucket_free(buf : modules/generators/mod_cgi.c line=630 column=11
b
uf);
657        a : modules/generators/mod_cgi.c line=627 column=49
a
 = : pass=0
=
 apr_bucket_immortal_make : enter=0, leave=0

apr_bucket_immortal_make : /usr/include/apr-1/apr_buckets.h line=1307 column=27
a
pr_bucket_immortal_make(a : modules/generators/mod_cgi.c line=627 column=49
a
, "", 0);
658        *str : modules/generators/mod_cgi.c line=628 column=50
s
tr = : enter=0, leave=0
=
 a : modules/generators/mod_cgi.c line=627 column=49
a
-> : enter=0, leave=0
-
>data : /usr/include/apr-1/apr_buckets.h line=244 column=11 data;
659    }
660    return : pass=0
r
eturn rv : modules/generators/mod_cgi.c line=631 column=18
r
v;
661}
662
663/* Read method of CGI bucket: polls on stderr and stdout of the child,
664 * sending any stderr output immediately away to the error log. */
665static apr_status_t cgi_bucket_read : call=0
c
gi_bucket_read(apr_bucket *b, const char **str,
666                                    apr_size_t *len, apr_read_type_e block)
667{
668    struct cgi_bucket_data *data = b : modules/generators/mod_cgi.c line=665 column=49
b
-> : enter=0, leave=0
-
>data : /usr/include/apr-1/apr_buckets.h line=244 column=11 data;
669    apr_interval_time_t timeout;
670    apr_status_t rv;
671    int gotdata = 0;
672
673    timeout : modules/generators/mod_cgi.c line=669 column=25
t
imeout = : pass=0
=
 block : modules/generators/mod_cgi.c line=666 column=70
b
lock == : true=0, false=0
=
APR_NONBLOCK_READ : /usr/include/apr-1/apr_buckets.h line=59 column=5 APR_NONBLOCK_READ conditional operator : true=0, false=0
?
 0 : data : modules/generators/mod_cgi.c line=668 column=29
d
ata-> : enter=0, leave=0
-
>r : modules/generators/mod_cgi.c line=567 column=18
r
-> : enter=0, leave=0
-
>server : include/httpd.h line=784 column=17
s
erver-> : enter=0, leave=0
-
>timeout : include/httpd.h line=1216 column=25
t
imeout;
674
675    do {
676        const apr_pollfd_t *results;
677        apr_int32_t num;
678
679        rv : modules/generators/mod_cgi.c line=670 column=18
r
= : pass=0
=
 apr_pollset_poll : enter=0, leave=0

apr_pollset_poll : /usr/include/apr-1/apr_poll.h line=167 column=27
a
pr_pollset_poll(data : modules/generators/mod_cgi.c line=668 column=29
d
ata-> : enter=0, leave=0
-
>pollset : modules/generators/mod_cgi.c line=566 column=20
p
ollset, timeout : modules/generators/mod_cgi.c line=669 column=25
t
imeout, &num : modules/generators/mod_cgi.c line=677 column=21
n
um, &results : modules/generators/mod_cgi.c line=676 column=29
r
esults);
680        if : true=0, false=0
i
f (APR_STATUS_IS_TIMEUP(rv : modules/generators/mod_cgi.c line=670 column=18
r
v)) {
681            if : true=0, false=0
i
f (timeout : modules/generators/mod_cgi.c line=669 column=25
t
imeout) {
682                ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_WARNING, 0, data : modules/generators/mod_cgi.c line=668 column=29
d
ata-> : enter=0, leave=0
-
>r : modules/generators/mod_cgi.c line=567 column=18
r
,
683                              "Timeout waiting for output from CGI script %s",
684                              data : modules/generators/mod_cgi.c line=668 column=29
d
ata-> : enter=0, leave=0
-
>r : modules/generators/mod_cgi.c line=567 column=18
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
685                return : pass=0
r
eturn rv : modules/generators/mod_cgi.c line=670 column=18
r
v;
686            }
687            else {
688                return : pass=0
r
eturn APR_EAGAIN;
689            }
690        }
691        else if : true=0, false=0
i
f (APR_STATUS_IS_EINTR(rv : modules/generators/mod_cgi.c line=670 column=18
r
v)) {
692            continue : pass=0
c
ontinue;
693        }
694        else if : true=0, false=0
i
f (rv : modules/generators/mod_cgi.c line=670 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
695            ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, rv : modules/generators/mod_cgi.c line=670 column=18
r
v, data : modules/generators/mod_cgi.c line=668 column=29
d
ata-> : enter=0, leave=0
-
>r : modules/generators/mod_cgi.c line=567 column=18
r
,
696                          "poll failed waiting for CGI child");
697            return : pass=0
r
eturn rv : modules/generators/mod_cgi.c line=670 column=18
r
v;
698        }
699
700        for : true=0, false=0
f
or (; num : modules/generators/mod_cgi.c line=677 column=21
n
um; num : modules/generators/mod_cgi.c line=677 column=21
n
um-- : pass=0
-
-, results : modules/generators/mod_cgi.c line=676 column=29
r
esults++ : pass=0
+
+) {
701            if : true=0, false=0
i
f (results : modules/generators/mod_cgi.c line=676 column=29
r
esults[] : enter=0, leave=0
[
0].client_data : /usr/include/apr-1/apr_poll.h line=84 column=11 client_data == : true=0, false=0
=
= (void *)1) {
702                /* stdout */
703                rv : modules/generators/mod_cgi.c line=670 column=18
r
= : pass=0
=
 cgi_read_stdout : enter=0, leave=0

cgi_read_stdout : modules/generators/mod_cgi.c line=627 column=21
c
gi_read_stdout(b : modules/generators/mod_cgi.c line=665 column=49
b
results : modules/generators/mod_cgi.c line=676 column=29
r
esults[] : enter=0, leave=0
[
0].desc : /usr/include/apr-1/apr_poll.h line=83 column=20 desc.f : /usr/include/apr-1/apr_poll.h line=70 column=17 fstr : modules/generators/mod_cgi.c line=665 column=65
s
tr, len : modules/generators/mod_cgi.c line=666 column=49
l
en);
704                if : true=0, false=0
i
f (APR_STATUS_IS_EOF(rv : modules/generators/mod_cgi.c line=670 column=18
r
v)) {
705                    rv : modules/generators/mod_cgi.c line=670 column=18
r
= : pass=0
=
 APR_SUCCESS;
706                }
707                gotdata : modules/generators/mod_cgi.c line=671 column=9
g
otdata = : pass=0
=
 1;
708            } else {
709                /* stderr */
710                apr_status_t rv2 = log_script_err : enter=0, leave=0

log_script_err : modules/generators/mod_cgi.c line=197 column=21
l
og_script_err(data : modules/generators/mod_cgi.c line=668 column=29
d
ata-> : enter=0, leave=0
-
>r : modules/generators/mod_cgi.c line=567 column=18
r
results : modules/generators/mod_cgi.c line=676 column=29
r
esults[] : enter=0, leave=0
[
0].desc : /usr/include/apr-1/apr_poll.h line=83 column=20 desc.f : /usr/include/apr-1/apr_poll.h line=70 column=17 f);
711                if : true=0, false=0
i
f (APR_STATUS_IS_EOF(rv2 : modules/generators/mod_cgi.c line=710 column=30
r
v2)) {
712                    apr_pollset_remove : enter=0, leave=0

apr_pollset_remove : /usr/include/apr-1/apr_poll.h line=154 column=27
a
pr_pollset_remove(data : modules/generators/mod_cgi.c line=668 column=29
d
ata-> : enter=0, leave=0
-
>pollset : modules/generators/mod_cgi.c line=566 column=20
p
ollset, &results : modules/generators/mod_cgi.c line=676 column=29
r
esults[] : enter=0, leave=0
[
0]);
713                }
714            }
715        }
716
717    } while : true=0, false=0
w
hile (! : true=0, false=0
!
gotdata : modules/generators/mod_cgi.c line=671 column=9
g
otdata);
718
719    return : pass=0
r
eturn rv : modules/generators/mod_cgi.c line=670 column=18
r
v;
720}
721
722static const apr_bucket_type_t bucket_type_cgi = {
723    "CGI", 5, APR_BUCKET_DATA : /usr/include/apr-1/apr_buckets.h line=153 column=9 APR_BUCKET_DATA,
724    apr_bucket_destroy_noop : /usr/include/apr-1/apr_buckets.h line=1088 column=26 apr_bucket_destroy_noop,
725    cgi_bucket_read : modules/generators/mod_cgi.c line=665 column=21
c
gi_bucket_read,
726    apr_bucket_setaside_notimpl : /usr/include/apr-1/apr_buckets.h line=1056 column=34 apr_bucket_setaside_notimpl,
727    apr_bucket_split_notimpl : /usr/include/apr-1/apr_buckets.h line=1066 column=34 apr_bucket_split_notimpl,
728    apr_bucket_copy_notimpl : /usr/include/apr-1/apr_buckets.h line=1076 column=34 apr_bucket_copy_notimpl
729};
730
731#endif
732
733static int cgi_handler : call=0
c
gi_handler(request_rec *r)
734{
735    int nph;
736    apr_size_t dbpos = 0;
737    const char *argv0;
738    const char *command;
739    const char **argv;
740    char *dbuf = NULL;
741    apr_file_t *script_out = NULL, *script_in = NULL, *script_err = NULL;
742    apr_bucket_brigade *bb;
743    apr_bucket *b;
744    int is_included;
745    int seen_eos, child_stopped_reading;
746    apr_pool_t *p;
747    cgi_server_conf *conf;
748    apr_status_t rv;
749    cgi_exec_info_t e_info;
750    conn_rec *c = r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection;
751
752    if : true=0, false=0
i
f(MC/DC independently affect : true=0, false=0
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
sTF
trcmp(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>handler : include/httpd.h line=919 column=17
h
andler, CGI_MAGIC_TYPE) && : true=0, false=0
&
MC/DC independently affect : true=0, false=0
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
sTF
trcmp(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>handler : include/httpd.h line=919 column=17
h
andler, "cgi-script"))
753        return : pass=0
r
eturn DECLINED;
754
755    is_included : modules/generators/mod_cgi.c line=744 column=9
i
s_included = : pass=0
=
 ! : true=0, false=0
!
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>protocol : include/httpd.h line=810 column=11
p
rotocol, "INCLUDED");
756
757    p : modules/generators/mod_cgi.c line=746 column=17
p
 = : pass=0
=
 r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>main : include/httpd.h line=793 column=18
m
ain conditional operator : true=0, false=0
?
 r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>main : include/httpd.h line=793 column=18
m
ain-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool : r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool;
758
759    argv0 : modules/generators/mod_cgi.c line=737 column=17
a
rgv0 = : pass=0
=
 apr_filepath_name_get : enter=0, leave=0

apr_filepath_name_get : /usr/include/apr-1/apr_lib.h line=84 column=27
a
pr_filepath_name_get(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
760    nph : modules/generators/mod_cgi.c line=735 column=9
n
ph = : pass=0
=
 ! : true=0, false=0
!
(strncmp : enter=0, leave=0

strncmp : /usr/include/string.h line=146 column=12
s
trncmp(argv0 : modules/generators/mod_cgi.c line=737 column=17
a
rgv0, "nph-", 4));
761    conf : modules/generators/mod_cgi.c line=747 column=22
c
onf = : pass=0
=
 ap_get_module_config(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>server : include/httpd.h line=784 column=17
s
erver-> : enter=0, leave=0
-
>module_config : include/httpd.h line=1207 column=30
m
odule_config, &cgi_module : modules/generators/mod_cgi.c line=58 column=31
c
gi_module);
762
763    if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
(ap_allow_options : enter=0, leave=0

ap_allow_options : include/http_core.h line=152 column=17
a
p_allow_options(r : modules/generators/mod_cgi.c line=733 column=37
r
& : pass=0
&
 OPT_EXECCGI) && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
is_scriptaliased : enter=0, leave=0

is_scriptaliased : modules/generators/mod_cgi.c line=74 column=12
i
s_scriptaliased(r : modules/generators/mod_cgi.c line=733 column=37
r
))
764        return : pass=0
r
eturn log_scripterror : enter=0, leave=0

log_scripterror : modules/generators/mod_cgi.c line=160 column=12
l
og_scripterror(r : modules/generators/mod_cgi.c line=733 column=37
r
conf : modules/generators/mod_cgi.c line=747 column=22
c
onf, HTTP_FORBIDDEN, 0,
765                               "Options ExecCGI is off in this directory");
766    if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

nph : modules/generators/mod_cgi.c line=735 column=9
nTF
ph && : true=0, false=0
&
MC/DC independently affect : true=0, false=0

is_included : modules/generators/mod_cgi.c line=744 column=9
iTF
s_included)
767        return : pass=0
r
eturn log_scripterror : enter=0, leave=0

log_scripterror : modules/generators/mod_cgi.c line=160 column=12
l
og_scripterror(r : modules/generators/mod_cgi.c line=733 column=37
r
conf : modules/generators/mod_cgi.c line=747 column=22
c
onf, HTTP_FORBIDDEN, 0,
768                               "attempt to include NPH CGI script");
769
770    if : true=0, false=0
i
f (r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>finfo : include/httpd.h line=957 column=17
f
info.filetype : /usr/include/apr-1/apr_file_info.h line=186 column=20 filetype == : true=0, false=0
=
= 0)
771        return : pass=0
r
eturn log_scripterror : enter=0, leave=0

log_scripterror : modules/generators/mod_cgi.c line=160 column=12
l
og_scripterror(r : modules/generators/mod_cgi.c line=733 column=37
r
conf : modules/generators/mod_cgi.c line=747 column=22
c
onf, HTTP_NOT_FOUND, 0,
772                               "script not found or unable to stat");
773    if : true=0, false=0
i
f (r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>finfo : include/httpd.h line=957 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)
774        return : pass=0
r
eturn log_scripterror : enter=0, leave=0

log_scripterror : modules/generators/mod_cgi.c line=160 column=12
l
og_scripterror(r : modules/generators/mod_cgi.c line=733 column=37
r
conf : modules/generators/mod_cgi.c line=747 column=22
c
onf, HTTP_FORBIDDEN, 0,
775                               "attempt to invoke directory as script");
776
777    if : true=0, false=0
i
f ((r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>used_path_info : include/httpd.h line=969 column=9
u
sed_path_info == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= AP_REQ_REJECT_PATH_INFO) && : true=0, false=0
&
&
778        r : modules/generators/mod_cgi.c line=733 column=37
r
MC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>path_info : include/httpd.h line=953 column=11
p
ath_info && : true=0, false=0
&
MC/DC independently affect : true=0, false=0
* dereference : enter=0, leave=0
*TF
r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>path_info : include/httpd.h line=953 column=11
p
ath_info)
779    {
780        /* default to accept */
781        return : pass=0
r
eturn log_scripterror : enter=0, leave=0

log_scripterror : modules/generators/mod_cgi.c line=160 column=12
l
og_scripterror(r : modules/generators/mod_cgi.c line=733 column=37
r
conf : modules/generators/mod_cgi.c line=747 column=22
c
onf, HTTP_NOT_FOUND, 0,
782                               "AcceptPathInfo off disallows user's path");
783    }
784/*
785    if (!ap_suexec_enabled) {
786        if (!ap_can_exec(&r->finfo))
787            return log_scripterror(r, conf, HTTP_FORBIDDEN, 0,
788                                   "file permissions deny server execution");
789    }
790
791*/
792    ap_add_common_vars : enter=0, leave=0

ap_add_common_vars : include/util_script.h line=77 column=18
a
p_add_common_vars(r : modules/generators/mod_cgi.c line=733 column=37
r
);
793    ap_add_cgi_vars : enter=0, leave=0

ap_add_cgi_vars : include/util_script.h line=70 column=18
a
p_add_cgi_vars(r : modules/generators/mod_cgi.c line=733 column=37
r
);
794
795    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.process_cgi : modules/generators/mod_cgi.h line=37 column=26 process_cgi = : pass=0
=
 1;
796    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.cmd_type : modules/generators/mod_cgi.h line=38 column=26 cmd_type    = : pass=0
=
 APR_PROGRAM : /usr/include/apr-1/apr_thread_proc.h line=47 column=5 APR_PROGRAM;
797    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.detached : modules/generators/mod_cgi.h line=39 column=26 detached    = : pass=0
=
 0;
798    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.in_pipe : modules/generators/mod_cgi.h line=34 column=26 in_pipe     = : pass=0
=
 APR_CHILD_BLOCK;
799    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.out_pipe : modules/generators/mod_cgi.h line=35 column=26 out_pipe    = : pass=0
=
 APR_CHILD_BLOCK;
800    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.err_pipe : modules/generators/mod_cgi.h line=36 column=26 err_pipe    = : pass=0
=
 APR_CHILD_BLOCK;
801    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.prog_type : modules/generators/mod_cgi.h line=40 column=26 prog_type   = : pass=0
=
 RUN_AS_CGI : modules/generators/mod_cgi.h line=31 column=27 RUN_AS_CGI;
802    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.bb : modules/generators/mod_cgi.h line=41 column=26 bb          = : pass=0
=
 NULL;
803    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.ctx : modules/generators/mod_cgi.h line=42 column=26 ctx         = : pass=0
=
 NULL;
804    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.next : modules/generators/mod_cgi.h line=43 column=26 next        = : pass=0
=
 NULL;
805    e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info.addrspace : modules/generators/mod_cgi.h line=44 column=26 addrspace   = : pass=0
=
 0;
806
807    /* build the command line */
808    if : true=0, false=0
i
f ((rv : modules/generators/mod_cgi.c line=748 column=18
r
= : pass=0
=
 cgi_build_command : enter=0, leave=0

cgi_build_command : modules/generators/mod_cgi.c line=63 column=52
c
gi_build_command(&command : modules/generators/mod_cgi.c line=738 column=17
c
ommand, &argv : modules/generators/mod_cgi.c line=739 column=18
a
rgv, r : modules/generators/mod_cgi.c line=733 column=37
r
p : modules/generators/mod_cgi.c line=746 column=17
p
, &e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info)) != : true=0, false=0
!
= APR_SUCCESS) {
809        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, rv : modules/generators/mod_cgi.c line=748 column=18
r
v, r : modules/generators/mod_cgi.c line=733 column=37
r
,
810                      "don't know how to spawn child process: %s",
811                      r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
812        return : pass=0
r
eturn HTTP_INTERNAL_SERVER_ERROR;
813    }
814
815    /* run the script in its own process */
816    if : true=0, false=0
i
f ((rv : modules/generators/mod_cgi.c line=748 column=18
r
= : pass=0
=
 run_cgi_child : enter=0, leave=0

run_cgi_child : modules/generators/mod_cgi.c line=373 column=21
r
un_cgi_child(&script_out : modules/generators/mod_cgi.c line=741 column=17
s
cript_out, &script_in : modules/generators/mod_cgi.c line=741 column=37
s
cript_in, &script_err : modules/generators/mod_cgi.c line=741 column=56
s
cript_err,
817                            command : modules/generators/mod_cgi.c line=738 column=17
c
ommand, argv : modules/generators/mod_cgi.c line=739 column=18
a
rgv, r : modules/generators/mod_cgi.c line=733 column=37
r
p : modules/generators/mod_cgi.c line=746 column=17
p
, &e_info : modules/generators/mod_cgi.c line=749 column=21
e
_info)) != : true=0, false=0
!
= APR_SUCCESS) {
818        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, rv : modules/generators/mod_cgi.c line=748 column=18
r
v, r : modules/generators/mod_cgi.c line=733 column=37
r
,
819                      "couldn't spawn child process: %s", r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
820        return : pass=0
r
eturn HTTP_INTERNAL_SERVER_ERROR;
821    }
822
823    /* Transfer any put/post args, CERN style...
824     * Note that we already ignore SIGPIPE in the core server.
825     */
826    bb : modules/generators/mod_cgi.c line=742 column=25
b
= : pass=0
=
 apr_brigade_create : enter=0, leave=0

apr_brigade_create : /usr/include/apr-1/apr_buckets.h line=658 column=35
a
pr_brigade_create(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, c : modules/generators/mod_cgi.c line=750 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
827    seen_eos : modules/generators/mod_cgi.c line=745 column=9
s
een_eos = : pass=0
=
 0;
828    child_stopped_reading : modules/generators/mod_cgi.c line=745 column=19
c
hild_stopped_reading = : pass=0
=
 0;
829    if : true=0, false=0
i
f (conf : modules/generators/mod_cgi.c line=747 column=22
c
onf-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname) {
830        dbuf : modules/generators/mod_cgi.c line=740 column=11
d
buf = : pass=0
=
 apr_palloc : enter=0, leave=0

apr_palloc : /usr/include/apr-1/apr_pools.h line=419 column=21
a
pr_palloc(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, conf : modules/generators/mod_cgi.c line=747 column=22
c
onf-> : enter=0, leave=0
-
>bufbytes : modules/generators/mod_cgi.c line=88 column=17
b
ufbytes + : pass=0
+
 1);
831        dbpos : modules/generators/mod_cgi.c line=736 column=16
d
bpos = : pass=0
=
 0;
832    }
833    do {
834        apr_bucket *bucket;
835
836        rv : modules/generators/mod_cgi.c line=748 column=18
r
= : pass=0
=
 ap_get_brigade : enter=0, leave=0

ap_get_brigade : include/util_filter.h line=298 column=26
a
p_get_brigade(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>input_filters : include/httpd.h line=992 column=25
i
nput_filters, bb : modules/generators/mod_cgi.c line=742 column=25
b
b, AP_MODE_READBYTES : include/util_filter.h line=52 column=5
A
P_MODE_READBYTES,
837                            APR_BLOCK_READ : /usr/include/apr-1/apr_buckets.h line=58 column=5 APR_BLOCK_READ, HUGE_STRING_LEN);
838
839        if : true=0, false=0
i
f (rv : modules/generators/mod_cgi.c line=748 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
840            ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, rv : modules/generators/mod_cgi.c line=748 column=18
r
v, r : modules/generators/mod_cgi.c line=733 column=37
r
,
841                          "Error reading request entity data");
842            return : pass=0
r
eturn ap_map_http_request_error : enter=0, leave=0

ap_map_http_request_error : include/http_protocol.h line=450 column=17
a
p_map_http_request_error(rv : modules/generators/mod_cgi.c line=748 column=18
r
v, HTTP_BAD_REQUEST);
843        }
844
845        for : true=0, false=0
f
or (bucket : modules/generators/mod_cgi.c line=834 column=21
b
ucket = : pass=0
=
 APR_BRIGADE_FIRST(bb : modules/generators/mod_cgi.c line=742 column=25
b
b);
846             bucket : modules/generators/mod_cgi.c line=834 column=21
b
ucket != : true=0, false=0
!
= APR_BRIGADE_SENTINEL(bb : modules/generators/mod_cgi.c line=742 column=25
b
b);
847             bucket : modules/generators/mod_cgi.c line=834 column=21
b
ucket = : pass=0
=
 APR_BUCKET_NEXT(bucket : modules/generators/mod_cgi.c line=834 column=21
b
ucket))
848        {
849            const char *data;
850            apr_size_t len;
851
852            if : true=0, false=0
i
f (APR_BUCKET_IS_EOS(bucket : modules/generators/mod_cgi.c line=834 column=21
b
ucket)) {
853                seen_eos : modules/generators/mod_cgi.c line=745 column=9
s
een_eos = : pass=0
=
 1;
854                break : pass=0
b
reak;
855            }
856
857            /* We can't do much with this. */
858            if : true=0, false=0
i
f (APR_BUCKET_IS_FLUSH(bucket : modules/generators/mod_cgi.c line=834 column=21
b
ucket)) {
859                continue : pass=0
c
ontinue;
860            }
861
862            /* If the child stopped, we still must read to EOS. */
863            if : true=0, false=0
i
f (child_stopped_reading : modules/generators/mod_cgi.c line=745 column=19
c
hild_stopped_reading) {
864                continue : pass=0
c
ontinue;
865            }
866
867            /* read */
868            apr_bucket_read(bucket : modules/generators/mod_cgi.c line=834 column=21
b
ucket, &data : modules/generators/mod_cgi.c line=849 column=25
d
ata, &len : modules/generators/mod_cgi.c line=850 column=24
l
en, APR_BLOCK_READ : /usr/include/apr-1/apr_buckets.h line=58 column=5 APR_BLOCK_READ);
869
870            if : true=0, false=0
i
f (conf : modules/generators/mod_cgi.c line=747 column=22
c
onfMC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname && : true=0, false=0
&
dbpos : modules/generators/mod_cgi.c line=736 column=16
d
bpos < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 conf : modules/generators/mod_cgi.c line=747 column=22
c
onf-> : enter=0, leave=0
-
>bufbytes : modules/generators/mod_cgi.c line=88 column=17
b
ufbytes) {
871                int cursize;
872
873                if : true=0, false=0
i
f ((dbpos : modules/generators/mod_cgi.c line=736 column=16
d
bpos + : pass=0
+
 len : modules/generators/mod_cgi.c line=850 column=24
l
en) > : true=0, false=0
>
 conf : modules/generators/mod_cgi.c line=747 column=22
c
onf-> : enter=0, leave=0
-
>bufbytes : modules/generators/mod_cgi.c line=88 column=17
b
ufbytes) {
874                    cursize : modules/generators/mod_cgi.c line=871 column=21
c
ursize = : pass=0
=
 conf : modules/generators/mod_cgi.c line=747 column=22
c
onf-> : enter=0, leave=0
-
>bufbytes : modules/generators/mod_cgi.c line=88 column=17
b
ufbytes - : pass=0
-
 dbpos : modules/generators/mod_cgi.c line=736 column=16
d
bpos;
875                }
876                else {
877                    cursize : modules/generators/mod_cgi.c line=871 column=21
c
ursize = : pass=0
=
 len : modules/generators/mod_cgi.c line=850 column=24
l
en;
878                }
879                memcpy : enter=0, leave=0

memcpy : /usr/include/string.h line=44 column=14
m
emcpy(dbuf : modules/generators/mod_cgi.c line=740 column=11
d
buf + : pass=0
+
 dbpos : modules/generators/mod_cgi.c line=736 column=16
d
bpos, data : modules/generators/mod_cgi.c line=849 column=25
d
ata, cursize : modules/generators/mod_cgi.c line=871 column=21
c
ursize);
880                dbpos : modules/generators/mod_cgi.c line=736 column=16
d
bpos += : pass=0
+
cursize : modules/generators/mod_cgi.c line=871 column=21
c
ursize;
881            }
882
883            /* Keep writing data to the child until done or too much time
884             * elapses with no progress or an error occurs.
885             */
886            rv : modules/generators/mod_cgi.c line=748 column=18
r
= : pass=0
=
 apr_file_write_full : enter=0, leave=0

apr_file_write_full : /usr/include/apr-1/apr_file_io.h line=491 column=27
a
pr_file_write_full(script_out : modules/generators/mod_cgi.c line=741 column=17
s
cript_out, data : modules/generators/mod_cgi.c line=849 column=25
d
ata, len : modules/generators/mod_cgi.c line=850 column=24
l
en, NULL);
887
888            if : true=0, false=0
i
f (rv : modules/generators/mod_cgi.c line=748 column=18
r
!= : true=0, false=0
!
= APR_SUCCESS) {
889                /* silly script stopped reading, soak up remaining message */
890                child_stopped_reading : modules/generators/mod_cgi.c line=745 column=19
c
hild_stopped_reading = : pass=0
=
 1;
891            }
892        }
893        apr_brigade_cleanup : enter=0, leave=0

apr_brigade_cleanup : /usr/include/apr-1/apr_buckets.h line=679 column=27
a
pr_brigade_cleanup(bb : modules/generators/mod_cgi.c line=742 column=25
b
b);
894    }
895    while : true=0, false=0
w
hile (! : true=0, false=0
!
seen_eos : modules/generators/mod_cgi.c line=745 column=9
s
een_eos);
896
897    if : true=0, false=0
i
f (conf : modules/generators/mod_cgi.c line=747 column=22
c
onf-> : enter=0, leave=0
-
>logname : modules/generators/mod_cgi.c line=86 column=17
l
ogname) {
898        dbuf : modules/generators/mod_cgi.c line=740 column=11
d
buf[dbpos : modules/generators/mod_cgi.c line=736 column=16
d
bpos] = : enter=0, leave=0
=
 '\0';
899    }
900    /* Is this flush really needed? */
901    apr_file_flush : enter=0, leave=0

apr_file_flush : /usr/include/apr-1/apr_file_io.h line=556 column=27
a
pr_file_flush(script_out : modules/generators/mod_cgi.c line=741 column=17
s
cript_out);
902    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(script_out : modules/generators/mod_cgi.c line=741 column=17
s
cript_out);
903
904    AP_DEBUG_ASSERT(script_in != NULL);
905
906    apr_brigade_cleanup : enter=0, leave=0

apr_brigade_cleanup : /usr/include/apr-1/apr_buckets.h line=679 column=27
a
pr_brigade_cleanup(bb : modules/generators/mod_cgi.c line=742 column=25
b
b);
907
908#if APR_FILES_AS_SOCKETS
909    apr_file_pipe_timeout_set : enter=0, leave=0

apr_file_pipe_timeout_set : /usr/include/apr-1/apr_file_io.h line=700 column=27
a
pr_file_pipe_timeout_set(script_in : modules/generators/mod_cgi.c line=741 column=37
s
cript_in, 0);
910    apr_file_pipe_timeout_set : enter=0, leave=0

apr_file_pipe_timeout_set : /usr/include/apr-1/apr_file_io.h line=700 column=27
a
pr_file_pipe_timeout_set(script_err : modules/generators/mod_cgi.c line=741 column=56
s
cript_err, 0);
911
912    b : modules/generators/mod_cgi.c line=743 column=17
b
 = : pass=0
=
 cgi_bucket_create : enter=0, leave=0

cgi_bucket_create : modules/generators/mod_cgi.c line=572 column=20
c
gi_bucket_create(r : modules/generators/mod_cgi.c line=733 column=37
r
script_in : modules/generators/mod_cgi.c line=741 column=37
s
cript_in, script_err : modules/generators/mod_cgi.c line=741 column=56
s
cript_err, c : modules/generators/mod_cgi.c line=750 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
913#else
914    b = apr_bucket_pipe_create(script_in, c->bucket_alloc);
915#endif
916    APR_BRIGADE_INSERT_TAIL(bb : modules/generators/mod_cgi.c line=742 column=25
b
b, b : modules/generators/mod_cgi.c line=743 column=17
b
);
917    b : modules/generators/mod_cgi.c line=743 column=17
b
 = : pass=0
=
 apr_bucket_eos_create : enter=0, leave=0

apr_bucket_eos_create : /usr/include/apr-1/apr_buckets.h line=1260 column=27
a
pr_bucket_eos_create(c : modules/generators/mod_cgi.c line=750 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc);
918    APR_BRIGADE_INSERT_TAIL(bb : modules/generators/mod_cgi.c line=742 column=25
b
b, b : modules/generators/mod_cgi.c line=743 column=17
b
);
919
920    /* Handle script return... */
921    if : true=0, false=0
i
f (! : true=0, false=0
!
nph : modules/generators/mod_cgi.c line=735 column=9
n
ph) {
922        const char *location;
923        char sbuf[MAX_STRING_LEN];
924        int ret;
925
926        if : true=0, false=0
i
f ((ret : modules/generators/mod_cgi.c line=924 column=13
r
et = : pass=0
=
 ap_scan_script_header_err_brigade : enter=0, leave=0

ap_scan_script_header_err_brigade : include/util_script.h line=103 column=17
a
p_scan_script_header_err_brigade(r : modules/generators/mod_cgi.c line=733 column=37
r
bb : modules/generators/mod_cgi.c line=742 column=25
b
b, sbuf : modules/generators/mod_cgi.c line=923 column=14
s
buf))) {
927            ret : modules/generators/mod_cgi.c line=924 column=13
r
et = : pass=0
=
 log_script : enter=0, leave=0

log_script : modules/generators/mod_cgi.c line=216 column=12
l
og_script(r : modules/generators/mod_cgi.c line=733 column=37
r
conf : modules/generators/mod_cgi.c line=747 column=22
c
onf, ret : modules/generators/mod_cgi.c line=924 column=13
r
et, dbuf : modules/generators/mod_cgi.c line=740 column=11
d
buf, sbuf : modules/generators/mod_cgi.c line=923 column=14
s
buf, bb : modules/generators/mod_cgi.c line=742 column=25
b
b, script_err : modules/generators/mod_cgi.c line=741 column=56
s
cript_err);
928
929            /*
930             * ret could be HTTP_NOT_MODIFIED in the case that the CGI script
931             * does not set an explicit status and ap_meets_conditions, which
932             * is called by ap_scan_script_header_err_brigade, detects that
933             * the conditions of the requests are met and the response is
934             * not modified.
935             * In this case set r->status and return OK in order to prevent
936             * running through the error processing stack as this would
937             * break with mod_cache, if the conditions had been set by
938             * mod_cache itself to validate a stale entity.
939             * BTW: We circumvent the error processing stack anyway if the
940             * CGI script set an explicit status code (whatever it is) and
941             * the only possible values for ret here are:
942             *
943             * HTTP_NOT_MODIFIED          (set by ap_meets_conditions)
944             * HTTP_PRECONDITION_FAILED   (set by ap_meets_conditions)
945             * HTTP_INTERNAL_SERVER_ERROR (if something went wrong during the
946             * processing of the response of the CGI script, e.g broken headers
947             * or a crashed CGI process).
948             */
949            if : true=0, false=0
i
f (ret : modules/generators/mod_cgi.c line=924 column=13
r
et == : true=0, false=0
=
= HTTP_NOT_MODIFIED) {
950                r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus = : enter=0, leave=0
=
 ret : modules/generators/mod_cgi.c line=924 column=13
r
et;
951                return : pass=0
r
eturn OK;
952            }
953
954            return : pass=0
r
eturn ret : modules/generators/mod_cgi.c line=924 column=13
r
et;
955        }
956
957        location : modules/generators/mod_cgi.c line=922 column=21
l
ocation = : pass=0
=
 apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Location");
958
959        if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

location : modules/generators/mod_cgi.c line=922 column=21
lTF
ocation && : true=0, false=0
&
r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 200) {
960            /* For a redirect whether internal or not, discard any
961             * remaining stdout from the script, and log any remaining
962             * stderr output, as normal. */
963            discard_script_output : enter=0, leave=0

discard_script_output : modules/generators/mod_cgi.c line=538 column=13
d
iscard_script_output(bb : modules/generators/mod_cgi.c line=742 column=25
b
b);
964            apr_brigade_destroy : enter=0, leave=0

apr_brigade_destroy : /usr/include/apr-1/apr_buckets.h line=666 column=27
a
pr_brigade_destroy(bb : modules/generators/mod_cgi.c line=742 column=25
b
b);
965            apr_file_pipe_timeout_set : enter=0, leave=0

apr_file_pipe_timeout_set : /usr/include/apr-1/apr_file_io.h line=700 column=27
a
pr_file_pipe_timeout_set(script_err : modules/generators/mod_cgi.c line=741 column=56
s
cript_err, r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>server : include/httpd.h line=784 column=17
s
erver-> : enter=0, leave=0
-
>timeout : include/httpd.h line=1216 column=25
t
imeout);
966            log_script_err : enter=0, leave=0

log_script_err : modules/generators/mod_cgi.c line=197 column=21
l
og_script_err(r : modules/generators/mod_cgi.c line=733 column=37
r
script_err : modules/generators/mod_cgi.c line=741 column=56
s
cript_err);
967        }
968
969        if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

location : modules/generators/mod_cgi.c line=922 column=21
lTF
ocation && : true=0, false=0
&
location : modules/generators/mod_cgi.c line=922 column=21
l
ocation[] : enter=0, leave=0
[
0] == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= '/' && : true=0, false=0
&
r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 200) {
970            /* This redirect needs to be a GET no matter what the original
971             * method was.
972             */
973            r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>method : include/httpd.h line=829 column=17
m
ethod = : 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(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, "GET");
974            r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>method_number : include/httpd.h line=831 column=9
m
ethod_number = : enter=0, leave=0
=
 M_GET;
975
976            /* We already read the message body (if any), so don't allow
977             * the redirected request to think it has one.  We can ignore
978             * Transfer-Encoding, since we used REQUEST_CHUNKED_ERROR.
979             */
980            apr_table_unset : enter=0, leave=0

apr_table_unset : /usr/include/apr-1/apr_tables.h line=290 column=19
a
pr_table_unset(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>headers_in : include/httpd.h line=901 column=18
h
eaders_in, "Content-Length");
981
982            ap_internal_redirect_handler : enter=0, leave=0

ap_internal_redirect_handler : include/http_request.h line=166 column=18
a
p_internal_redirect_handler(location : modules/generators/mod_cgi.c line=922 column=21
l
ocation, r : modules/generators/mod_cgi.c line=733 column=37
r
);
983            return : pass=0
r
eturn OK;
984        }
985        else if : true=0, false=0
i
f (MC/DC independently affect : true=0, false=0

location : modules/generators/mod_cgi.c line=922 column=21
lTF
ocation && : true=0, false=0
&
r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus == : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= 200) {
986            /* XX Note that if a script wants to produce its own Redirect
987             * body, it now has to explicitly *say* "Status: 302"
988             */
989            return : pass=0
r
eturn HTTP_MOVED_TEMPORARILY;
990        }
991
992        rv : modules/generators/mod_cgi.c line=748 column=18
r
= : pass=0
=
 ap_pass_brigade : enter=0, leave=0

ap_pass_brigade : include/util_filter.h line=312 column=26
a
p_pass_brigade(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>output_filters : include/httpd.h line=990 column=25
o
utput_filters, bb : modules/generators/mod_cgi.c line=742 column=25
b
b);
993    }
994    else /* nph */ {
995        struct ap_filter_t *cur;
996
997        /* get rid of all filters up through protocol...  since we
998         * haven't parsed off the headers, there is no way they can
999         * work
1000         */
1001
1002        cur : modules/generators/mod_cgi.c line=995 column=29
c
ur = : pass=0
=
 r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>proto_output_filters : include/httpd.h line=996 column=25
p
roto_output_filters;
1003        while : true=0, false=0
w
hile (MC/DC independently affect : true=0, false=0

cur : modules/generators/mod_cgi.c line=995 column=29
cTF
ur && : true=0, false=0
&
cur : modules/generators/mod_cgi.c line=995 column=29
c
ur-> : enter=0, leave=0
-
>frec : include/util_filter.h line=265 column=22
f
rec-> : enter=0, leave=0
-
>ftype : include/util_filter.h line=239 column=20
f
type < : true=0, false=0
MC/DC independently affect : true=0, false=0
<TF
 AP_FTYPE_CONNECTION : include/util_filter.h line=182 column=5
A
P_FTYPE_CONNECTION) {
1004            cur : modules/generators/mod_cgi.c line=995 column=29
c
ur = : pass=0
=
 cur : modules/generators/mod_cgi.c line=995 column=29
c
ur-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext;
1005        }
1006        r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>output_filters : include/httpd.h line=990 column=25
o
utput_filters = : enter=0, leave=0
=
 r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>proto_output_filters : include/httpd.h line=996 column=25
p
roto_output_filters = : enter=0, leave=0
=
 cur : modules/generators/mod_cgi.c line=995 column=29
c
ur;
1007
1008        rv : modules/generators/mod_cgi.c line=748 column=18
r
= : pass=0
=
 ap_pass_brigade : enter=0, leave=0

ap_pass_brigade : include/util_filter.h line=312 column=26
a
p_pass_brigade(r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>output_filters : include/httpd.h line=990 column=25
o
utput_filters, bb : modules/generators/mod_cgi.c line=742 column=25
b
b);
1009    }
1010
1011    /* don't soak up script output if errors occurred writing it
1012     * out...  otherwise, we prolong the life of the script when the
1013     * connection drops or we stopped sending output for some other
1014     * reason */
1015    if : true=0, false=0
i
f (rv : modules/generators/mod_cgi.c line=748 column=18
r
== : true=0, false=0
MC/DC independently affect : true=0, false=0
=TF
= APR_SUCCESS && : true=0, false=0
&
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>connection : include/httpd.h line=782 column=15
c
onnection-> : enter=0, leave=0
-
>aborted : include/httpd.h line=1070 column=14
a
borted) {
1016        apr_file_pipe_timeout_set : enter=0, leave=0

apr_file_pipe_timeout_set : /usr/include/apr-1/apr_file_io.h line=700 column=27
a
pr_file_pipe_timeout_set(script_err : modules/generators/mod_cgi.c line=741 column=56
s
cript_err, r : modules/generators/mod_cgi.c line=733 column=37
r
-> : enter=0, leave=0
-
>server : include/httpd.h line=784 column=17
s
erver-> : enter=0, leave=0
-
>timeout : include/httpd.h line=1216 column=25
t
imeout);
1017        log_script_err : enter=0, leave=0

log_script_err : modules/generators/mod_cgi.c line=197 column=21
l
og_script_err(r : modules/generators/mod_cgi.c line=733 column=37
r
script_err : modules/generators/mod_cgi.c line=741 column=56
s
cript_err);
1018    }
1019
1020    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(script_err : modules/generators/mod_cgi.c line=741 column=56
s
cript_err);
1021
1022    return : pass=0
r
eturn OK;                      /* NOT r->status, even if it has changed. */
1023}
1024
1025/*============================================================================
1026 *============================================================================
1027 * This is the beginning of the cgi filter code moved from mod_include. This
1028 *   is the code required to handle the "exec" SSI directive.
1029 *============================================================================
1030 *============================================================================*/
1031static apr_status_t include_cgi : call=0
i
nclude_cgi(include_ctx_t *ctx, ap_filter_t *f,
1032                                apr_bucket_brigade *bb, char *s)
1033{
1034    request_rec *r = f : modules/generators/mod_cgi.c line=1031 column=66
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
;
1035    request_rec *rr = ap_sub_req_lookup_uri : enter=0, leave=0

ap_sub_req_lookup_uri : include/http_request.h line=71 column=27
a
p_sub_req_lookup_uri(s : modules/generators/mod_cgi.c line=1032 column=63
s
r : modules/generators/mod_cgi.c line=1034 column=18
r
f : modules/generators/mod_cgi.c line=1031 column=66
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext);
1036    int rr_status;
1037
1038    if : true=0, false=0
i
f (rr : modules/generators/mod_cgi.c line=1035 column=18
r
r-> : enter=0, leave=0
-
>status : include/httpd.h line=822 column=9
s
tatus != : true=0, false=0
!
= HTTP_OK) {
1039        ap_destroy_sub_req : enter=0, leave=0

ap_destroy_sub_req : include/http_request.h line=144 column=18
a
p_destroy_sub_req(rr : modules/generators/mod_cgi.c line=1035 column=18
r
r);
1040        return : pass=0
r
eturn APR_EGENERAL;
1041    }
1042
1043    /* No hardwired path info or query allowed */
1044    if : true=0, false=0
i
f ((rr : modules/generators/mod_cgi.c line=1035 column=18
r
rMC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>path_info : include/httpd.h line=953 column=11
p
ath_info && : true=0, false=0
&
rr : modules/generators/mod_cgi.c line=1035 column=18
r
r-> : enter=0, leave=0
-
>path_info : include/httpd.h line=953 column=11
p
ath_infoMC/DC independently affect : true=0, false=0
[] : enter=0, leave=0
[TF
0]) || : true=0, false=0
|
rr : modules/generators/mod_cgi.c line=1035 column=18
r
rMC/DC independently affect : true=0, false=0
-> : enter=0, leave=0
-TF
>args : include/httpd.h line=955 column=11
a
rgs) {
1045        ap_destroy_sub_req : enter=0, leave=0

ap_destroy_sub_req : include/http_request.h line=144 column=18
a
p_destroy_sub_req(rr : modules/generators/mod_cgi.c line=1035 column=18
r
r);
1046        return : pass=0
r
eturn APR_EGENERAL;
1047    }
1048    if : true=0, false=0
i
f (rr : modules/generators/mod_cgi.c line=1035 column=18
r
r-> : enter=0, leave=0
-
>finfo : include/httpd.h line=957 column=17
f
info.filetype : /usr/include/apr-1/apr_file_info.h line=186 column=20 filetype != : true=0, false=0
!
APR_REG : /usr/include/apr-1/apr_file_info.h line=64 column=5 APR_REG) {
1049        ap_destroy_sub_req : enter=0, leave=0

ap_destroy_sub_req : include/http_request.h line=144 column=18
a
p_destroy_sub_req(rr : modules/generators/mod_cgi.c line=1035 column=18
r
r);
1050        return : pass=0
r
eturn APR_EGENERAL;
1051    }
1052
1053    /* Script gets parameters of the *document*, for back compatibility */
1054    rr : modules/generators/mod_cgi.c line=1035 column=18
r
r-> : enter=0, leave=0
-
>path_info : include/httpd.h line=953 column=11
p
ath_info = : enter=0, leave=0
=
 r : modules/generators/mod_cgi.c line=1034 column=18
r
-> : enter=0, leave=0
-
>path_info : include/httpd.h line=953 column=11
p
ath_info;       /* hard to get right; see mod_cgi.c */
1055    rr : modules/generators/mod_cgi.c line=1035 column=18
r
r-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs = : enter=0, leave=0
=
 r : modules/generators/mod_cgi.c line=1034 column=18
r
-> : enter=0, leave=0
-
>args : include/httpd.h line=955 column=11
a
rgs;
1056
1057    /* Force sub_req to be treated as a CGI request, even if ordinary
1058     * typing rules would have called it something else.
1059     */
1060    ap_set_content_type : enter=0, leave=0

ap_set_content_type : include/http_protocol.h line=310 column=18
a
p_set_content_type(rr : modules/generators/mod_cgi.c line=1035 column=18
r
r, CGI_MAGIC_TYPE);
1061
1062    /* Run it. */
1063    rr_status : modules/generators/mod_cgi.c line=1036 column=9
r
r_status = : pass=0
=
 ap_run_sub_req : enter=0, leave=0

ap_run_sub_req : include/http_request.h line=138 column=17
a
p_run_sub_req(rr : modules/generators/mod_cgi.c line=1035 column=18
r
r);
1064    if : true=0, false=0
i
f (ap_is_HTTP_REDIRECT(rr_status : modules/generators/mod_cgi.c line=1036 column=9
r
r_status)) {
1065        const char *location = apr_table_get : enter=0, leave=0

apr_table_get : /usr/include/apr-1/apr_tables.h line=258 column=27
a
pr_table_get(rr : modules/generators/mod_cgi.c line=1035 column=18
r
r-> : enter=0, leave=0
-
>headers_out : include/httpd.h line=903 column=18
h
eaders_out, "Location");
1066
1067        if : true=0, false=0
i
f (location : modules/generators/mod_cgi.c line=1065 column=21
l
ocation) {
1068            char *buffer;
1069
1070            location : modules/generators/mod_cgi.c line=1065 column=21
l
ocation = : pass=0
=
 ap_escape_html : enter=0, leave=0

ap_escape_html : include/httpd.h line=1512 column=20
a
p_escape_html(rr : modules/generators/mod_cgi.c line=1035 column=18
r
r-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool, location : modules/generators/mod_cgi.c line=1065 column=21
l
ocation);
1071            buffer : modules/generators/mod_cgi.c line=1068 column=19
b
uffer = : pass=0
=
 apr_pstrcat : enter=0, leave=0

apr_pstrcat : /usr/include/apr-1/apr_strings.h line=139 column=28
a
pr_pstrcat(ctx : modules/generators/mod_cgi.c line=1031 column=48
c
tx-> : enter=0, leave=0
-
>pool : modules/filters/mod_include.h line=71 column=18
p
ool, "<a href=\"", location : modules/generators/mod_cgi.c line=1065 column=21
l
ocation, "\">",
1072                                 location : modules/generators/mod_cgi.c line=1065 column=21
l
ocation, "</a>", NULL);
1073
1074            APR_BRIGADE_INSERT_TAIL(bb : modules/generators/mod_cgi.c line=1032 column=53
b
b, apr_bucket_pool_create : enter=0, leave=0

apr_bucket_pool_create : /usr/include/apr-1/apr_buckets.h line=1373 column=27
a
pr_bucket_pool_create(buffer : modules/generators/mod_cgi.c line=1068 column=19
b
uffer,
1075                                    strlen : enter=0, leave=0

strlen : /usr/include/string.h line=399 column=15
s
trlen(buffer : modules/generators/mod_cgi.c line=1068 column=19
b
uffer), ctx : modules/generators/mod_cgi.c line=1031 column=48
c
tx-> : enter=0, leave=0
-
>pool : modules/filters/mod_include.h line=71 column=18
p
ool,
1076                                    f : modules/generators/mod_cgi.c line=1031 column=66
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc));
1077        }
1078    }
1079
1080    ap_destroy_sub_req : enter=0, leave=0

ap_destroy_sub_req : include/http_request.h line=144 column=18
a
p_destroy_sub_req(rr : modules/generators/mod_cgi.c line=1035 column=18
r
r);
1081
1082    return : pass=0
r
eturn APR_SUCCESS;
1083}
1084
1085static apr_status_t include_cmd : call=0
i
nclude_cmd(include_ctx_t *ctx, ap_filter_t *f,
1086                                apr_bucket_brigade *bb, const char *command)
1087{
1088    cgi_exec_info_t  e_info;
1089    const char **argv;
1090    apr_file_t *script_out = NULL, *script_in = NULL, *script_err = NULL;
1091    apr_status_t rv;
1092    request_rec *r = f : modules/generators/mod_cgi.c line=1085 column=66
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
;
1093
1094    add_ssi_vars : enter=0, leave=0

add_ssi_vars : modules/generators/mod_cgi.c line=319 column=13
a
dd_ssi_vars(r : modules/generators/mod_cgi.c line=1092 column=18
r
);
1095
1096    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.process_cgi : modules/generators/mod_cgi.h line=37 column=26 process_cgi = : pass=0
=
 0;
1097    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.cmd_type : modules/generators/mod_cgi.h line=38 column=26 cmd_type    = : pass=0
=
 APR_SHELLCMD : /usr/include/apr-1/apr_thread_proc.h line=46 column=5 APR_SHELLCMD;
1098    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.detached : modules/generators/mod_cgi.h line=39 column=26 detached    = : pass=0
=
 0;
1099    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.in_pipe : modules/generators/mod_cgi.h line=34 column=26 in_pipe     = : pass=0
=
 APR_NO_PIPE;
1100    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.out_pipe : modules/generators/mod_cgi.h line=35 column=26 out_pipe    = : pass=0
=
 APR_FULL_BLOCK;
1101    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.err_pipe : modules/generators/mod_cgi.h line=36 column=26 err_pipe    = : pass=0
=
 APR_NO_PIPE;
1102    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.prog_type : modules/generators/mod_cgi.h line=40 column=26 prog_type   = : pass=0
=
 RUN_AS_SSI : modules/generators/mod_cgi.h line=31 column=15 RUN_AS_SSI;
1103    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.bb : modules/generators/mod_cgi.h line=41 column=26 bb          = : pass=0
=
 &bb : modules/generators/mod_cgi.c line=1086 column=53
b
b;
1104    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.ctx : modules/generators/mod_cgi.h line=42 column=26 ctx         = : pass=0
=
 ctx : modules/generators/mod_cgi.c line=1085 column=48
c
tx;
1105    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.next : modules/generators/mod_cgi.h line=43 column=26 next        = : pass=0
=
 f : modules/generators/mod_cgi.c line=1085 column=66
f
-> : enter=0, leave=0
-
>next : include/util_filter.h line=271 column=18
n
ext;
1106    e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info.addrspace : modules/generators/mod_cgi.h line=44 column=26 addrspace   = : pass=0
=
 0;
1107
1108    if : true=0, false=0
i
f ((rv : modules/generators/mod_cgi.c line=1091 column=18
r
= : pass=0
=
 cgi_build_command : enter=0, leave=0

cgi_build_command : modules/generators/mod_cgi.c line=63 column=52
c
gi_build_command(&command : modules/generators/mod_cgi.c line=1086 column=69
c
ommand, &argv : modules/generators/mod_cgi.c line=1089 column=18
a
rgv, r : modules/generators/mod_cgi.c line=1092 column=18
r
r : modules/generators/mod_cgi.c line=1092 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool,
1109                                &e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info)) != : true=0, false=0
!
= APR_SUCCESS) {
1110        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, rv : modules/generators/mod_cgi.c line=1091 column=18
r
v, r : modules/generators/mod_cgi.c line=1092 column=18
r
,
1111                      "don't know how to spawn cmd child process: %s",
1112                      r : modules/generators/mod_cgi.c line=1092 column=18
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
1113        return : pass=0
r
eturn rv : modules/generators/mod_cgi.c line=1091 column=18
r
v;
1114    }
1115
1116    /* run the script in its own process */
1117    if : true=0, false=0
i
f ((rv : modules/generators/mod_cgi.c line=1091 column=18
r
= : pass=0
=
 run_cgi_child : enter=0, leave=0

run_cgi_child : modules/generators/mod_cgi.c line=373 column=21
r
un_cgi_child(&script_out : modules/generators/mod_cgi.c line=1090 column=17
s
cript_out, &script_in : modules/generators/mod_cgi.c line=1090 column=37
s
cript_in, &script_err : modules/generators/mod_cgi.c line=1090 column=56
s
cript_err,
1118                            command : modules/generators/mod_cgi.c line=1086 column=69
c
ommand, argv : modules/generators/mod_cgi.c line=1089 column=18
a
rgv, r : modules/generators/mod_cgi.c line=1092 column=18
r
r : modules/generators/mod_cgi.c line=1092 column=18
r
-> : enter=0, leave=0
-
>pool : include/httpd.h line=780 column=17
p
ool,
1119                            &e_info : modules/generators/mod_cgi.c line=1088 column=22
e
_info)) != : true=0, false=0
!
= APR_SUCCESS) {
1120        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, rv : modules/generators/mod_cgi.c line=1091 column=18
r
v, r : modules/generators/mod_cgi.c line=1092 column=18
r
,
1121                      "couldn't spawn child process: %s", r : modules/generators/mod_cgi.c line=1092 column=18
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
1122        return : pass=0
r
eturn rv : modules/generators/mod_cgi.c line=1091 column=18
r
v;
1123    }
1124
1125    APR_BRIGADE_INSERT_TAIL(bb : modules/generators/mod_cgi.c line=1086 column=53
b
b, apr_bucket_pipe_create : enter=0, leave=0

apr_bucket_pipe_create : /usr/include/apr-1/apr_buckets.h line=1442 column=27
a
pr_bucket_pipe_create(script_in : modules/generators/mod_cgi.c line=1090 column=37
s
cript_in,
1126                            f : modules/generators/mod_cgi.c line=1085 column=66
f
-> : enter=0, leave=0
-
>c : include/util_filter.h line=282 column=15
c
-> : enter=0, leave=0
-
>bucket_alloc : include/httpd.h line=1103 column=32
b
ucket_alloc));
1127    ctx : modules/generators/mod_cgi.c line=1085 column=48
c
tx-> : enter=0, leave=0
-
>flush_now : modules/filters/mod_include.h line=86 column=18
f
lush_now = : enter=0, leave=0
=
 1;
1128
1129    /* We can't close the pipe here, because we may return before the
1130     * full CGI has been sent to the network.  That's okay though,
1131     * because we can rely on the pool to close the pipe for us.
1132     */
1133    return : pass=0
r
eturn APR_SUCCESS;
1134}
1135
1136static apr_status_t handle_exec : call=0
h
andle_exec(include_ctx_t *ctx, ap_filter_t *f,
1137                                apr_bucket_brigade *bb)
1138{
1139    char *tag = NULL;
1140    char *tag_val = NULL;
1141    request_rec *r = f : modules/generators/mod_cgi.c line=1136 column=66
f
-> : enter=0, leave=0
-
>r : include/util_filter.h line=277 column=18
r
;
1142    char *file = r : modules/generators/mod_cgi.c line=1141 column=18
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename;
1143    char parsed_string[MAX_STRING_LEN];
1144
1145    if : true=0, false=0
i
f (! : true=0, false=0
!
ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx-> : enter=0, leave=0
-
>argc : modules/filters/mod_include.h line=89 column=18
a
rgc) {
1146        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK,
1147                      (ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx-> : enter=0, leave=0
-
>flags : modules/filters/mod_include.h line=77 column=18
f
lags & : pass=0
&
 SSI_FLAG_PRINTING)
1148                          conditional operator : true=0, false=0
?
 APLOG_ERR : APLOG_WARNING,
1149                      0, r : modules/generators/mod_cgi.c line=1141 column=18
r
, "missing argument for exec element in %s",
1150                      r : modules/generators/mod_cgi.c line=1141 column=18
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
1151    }
1152
1153    if : true=0, false=0
i
f (! : true=0, false=0
!
(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx-> : enter=0, leave=0
-
>flags : modules/filters/mod_include.h line=77 column=18
f
lags & : pass=0
&
 SSI_FLAG_PRINTING)) {
1154        return : pass=0
r
eturn APR_SUCCESS;
1155    }
1156
1157    if : true=0, false=0
i
f (! : true=0, false=0
!
ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx-> : enter=0, leave=0
-
>argc : modules/filters/mod_include.h line=89 column=18
a
rgc) {
1158        SSI_CREATE_ERROR_BUCKET(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx, f : modules/generators/mod_cgi.c line=1136 column=66
f
bb : modules/generators/mod_cgi.c line=1137 column=53
b
b);
1159        return : pass=0
r
eturn APR_SUCCESS;
1160    }
1161
1162    if : true=0, false=0
i
f (ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx-> : enter=0, leave=0
-
>flags : modules/filters/mod_include.h line=77 column=18
f
lags & : pass=0
&
 SSI_FLAG_NO_EXEC) {
1163        ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, r : modules/generators/mod_cgi.c line=1141 column=18
r
, "exec used but not allowed "
1164                      "in %s", r : modules/generators/mod_cgi.c line=1141 column=18
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
1165        SSI_CREATE_ERROR_BUCKET(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx, f : modules/generators/mod_cgi.c line=1136 column=66
f
bb : modules/generators/mod_cgi.c line=1137 column=53
b
b);
1166        return : pass=0
r
eturn APR_SUCCESS;
1167    }
1168
1169    while : true=0, false=0
w
hile (1) {
1170        cgi_pfn_gtv : enter=0, leave=0

cgi_pfn_gtv : modules/generators/mod_cgi.c line=61 column=56
c
gi_pfn_gtv(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx, &tag : modules/generators/mod_cgi.c line=1139 column=11
t
ag, &tag_val : modules/generators/mod_cgi.c line=1140 column=11
t
ag_val, SSI_VALUE_DECODED);
1171        if : true=0, false=0
i
f (! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
tag : modules/generators/mod_cgi.c line=1139 column=11
t
ag || : true=0, false=0
|
! : true=0, false=0
MC/DC independently affect : true=0, false=0
!TF
tag_val : modules/generators/mod_cgi.c line=1140 column=11
t
ag_val) {
1172            break : pass=0
b
reak;
1173        }
1174
1175        if : true=0, false=0
i
f (! : true=0, false=0
!
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(tag : modules/generators/mod_cgi.c line=1139 column=11
t
ag, "cmd")) {
1176            apr_status_t rv;
1177
1178            cgi_pfn_ps : enter=0, leave=0

cgi_pfn_ps : modules/generators/mod_cgi.c line=62 column=51
c
gi_pfn_ps(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx, tag_val : modules/generators/mod_cgi.c line=1140 column=11
t
ag_val, parsed_string : modules/generators/mod_cgi.c line=1143 column=10
p
arsed_string, sizeof(parsed_string),
1179                       SSI_EXPAND_LEAVE_NAME);
1180
1181            rv : modules/generators/mod_cgi.c line=1176 column=26
r
= : pass=0
=
 include_cmd : enter=0, leave=0

include_cmd : modules/generators/mod_cgi.c line=1085 column=21
i
nclude_cmd(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx, f : modules/generators/mod_cgi.c line=1136 column=66
f
bb : modules/generators/mod_cgi.c line=1137 column=53
b
b, parsed_string : modules/generators/mod_cgi.c line=1143 column=10
p
arsed_string);
1182            if : true=0, false=0
i
f (rv : modules/generators/mod_cgi.c line=1176 column=26
r
!= : true=0, false=0
!
= APR_SUCCESS) {
1183                ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, r : modules/generators/mod_cgi.c line=1141 column=18
r
, "execution failure "
1184                              "for parameter \"%s\" to tag exec in file %s",
1185                              tag : modules/generators/mod_cgi.c line=1139 column=11
t
ag, r : modules/generators/mod_cgi.c line=1141 column=18
r
-> : enter=0, leave=0
-
>filename : include/httpd.h line=948 column=11
f
ilename);
1186                SSI_CREATE_ERROR_BUCKET(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx, f : modules/generators/mod_cgi.c line=1136 column=66
f
bb : modules/generators/mod_cgi.c line=1137 column=53
b
b);
1187                break : pass=0
b
reak;
1188            }
1189        }
1190        else if : true=0, false=0
i
f (! : true=0, false=0
!
strcmp : enter=0, leave=0

strcmp : /usr/include/string.h line=143 column=12
s
trcmp(tag : modules/generators/mod_cgi.c line=1139 column=11
t
ag, "cgi")) {
1191            apr_status_t rv;
1192
1193            cgi_pfn_ps : enter=0, leave=0

cgi_pfn_ps : modules/generators/mod_cgi.c line=62 column=51
c
gi_pfn_ps(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx, tag_val : modules/generators/mod_cgi.c line=1140 column=11
t
ag_val, parsed_string : modules/generators/mod_cgi.c line=1143 column=10
p
arsed_string, sizeof(parsed_string),
1194                       SSI_EXPAND_DROP_NAME);
1195
1196            rv : modules/generators/mod_cgi.c line=1191 column=26
r
= : pass=0
=
 include_cgi : enter=0, leave=0

include_cgi : modules/generators/mod_cgi.c line=1031 column=21
i
nclude_cgi(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx, f : modules/generators/mod_cgi.c line=1136 column=66
f
bb : modules/generators/mod_cgi.c line=1137 column=53
b
b, parsed_string : modules/generators/mod_cgi.c line=1143 column=10
p
arsed_string);
1197            if : true=0, false=0
i
f (rv : modules/generators/mod_cgi.c line=1191 column=26
r
!= : true=0, false=0
!
= APR_SUCCESS) {
1198                ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, r : modules/generators/mod_cgi.c line=1141 column=18
r
, "invalid CGI ref "
1199                              "\"%s\" in %s", tag_val : modules/generators/mod_cgi.c line=1140 column=11
t
ag_val, file : modules/generators/mod_cgi.c line=1142 column=11
f
ile);
1200                SSI_CREATE_ERROR_BUCKET(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx, f : modules/generators/mod_cgi.c line=1136 column=66
f
bb : modules/generators/mod_cgi.c line=1137 column=53
b
b);
1201                break : pass=0
b
reak;
1202            }
1203        }
1204        else {
1205            ap_log_rerror : enter=0, leave=0

ap_log_rerror : include/http_log.h line=219 column=18
a
p_log_rerror(APLOG_MARK, APLOG_ERR, 0, r : modules/generators/mod_cgi.c line=1141 column=18
r
, "unknown parameter "
1206                          "\"%s\" to tag exec in %s", tag : modules/generators/mod_cgi.c line=1139 column=11
t
ag, file : modules/generators/mod_cgi.c line=1142 column=11
f
ile);
1207            SSI_CREATE_ERROR_BUCKET(ctx : modules/generators/mod_cgi.c line=1136 column=48
c
tx, f : modules/generators/mod_cgi.c line=1136 column=66
f
bb : modules/generators/mod_cgi.c line=1137 column=53
b
b);
1208            break : pass=0
b
reak;
1209        }
1210    }
1211
1212    return : pass=0
r
eturn APR_SUCCESS;
1213}
1214
1215
1216/*============================================================================
1217 *============================================================================
1218 * This is the end of the cgi filter code moved from mod_include.
1219 *============================================================================
1220 *============================================================================*/
1221
1222
1223static int cgi_post_config : call=0
c
gi_post_config(apr_pool_t *p, apr_pool_t *plog,
1224                                apr_pool_t *ptemp, server_rec *s)
1225{
1226    cgi_pfn_reg_with_ssi : modules/generators/mod_cgi.c line=60 column=59
c
gi_pfn_reg_with_ssi = : pass=0
=
 APR_RETRIEVE_OPTIONAL_FN(ap_register_include_handler);
1227    cgi_pfn_gtv : modules/generators/mod_cgi.c line=61 column=56
c
gi_pfn_gtv          = : pass=0
=
 APR_RETRIEVE_OPTIONAL_FN(ap_ssi_get_tag_and_value);
1228    cgi_pfn_ps : modules/generators/mod_cgi.c line=62 column=51
c
gi_pfn_ps           = : pass=0
=
 APR_RETRIEVE_OPTIONAL_FN(ap_ssi_parse_string);
1229
1230    if : true=0, false=0
i
f ((MC/DC independently affect : true=0, false=0

cgi_pfn_reg_with_ssi : modules/generators/mod_cgi.c line=60 column=59
cTF
gi_pfn_reg_with_ssi) && : true=0, false=0
&
& (MC/DC independently affect : true=0, false=0

cgi_pfn_gtv : modules/generators/mod_cgi.c line=61 column=56
cTF
gi_pfn_gtv) && : true=0, false=0
&
& (MC/DC independently affect : true=0, false=0

cgi_pfn_ps : modules/generators/mod_cgi.c line=62 column=51
cTF
gi_pfn_ps)) {
1231        /* Required by mod_include filter. This is how mod_cgi registers
1232         *   with mod_include to provide processing of the exec directive.
1233         */
1234        cgi_pfn_reg_with_ssi : enter=0, leave=0

cgi_pfn_reg_with_ssi : modules/generators/mod_cgi.c line=60 column=59
c
gi_pfn_reg_with_ssi("exec", handle_exec : modules/generators/mod_cgi.c line=1136 column=21
h
andle_exec);
1235    }
1236
1237    /* This is the means by which unusual (non-unix) os's may find alternate
1238     * means to run a given command (e.g. shebang/registry parsing on Win32)
1239     */
1240    cgi_build_command : modules/generators/mod_cgi.c line=63 column=52
c
gi_build_command    = : pass=0
=
 APR_RETRIEVE_OPTIONAL_FN(ap_cgi_build_command);
1241    if : true=0, false=0
i
f (! : true=0, false=0
!
cgi_build_command : modules/generators/mod_cgi.c line=63 column=52
c
gi_build_command) {
1242        cgi_build_command : modules/generators/mod_cgi.c line=63 column=52
c
gi_build_command = : pass=0
=
 default_build_command : modules/generators/mod_cgi.c line=492 column=21
d
efault_build_command;
1243    }
1244    return : pass=0
r
eturn OK;
1245}
1246
1247static void register_hooks : call=1
r
egister_hooks(apr_pool_t *p)
1248{
1249    static const char * const aszPre[] = { "mod_include.c", NULL };
1250    ap_hook_handler : enter=1, leave=1

ap_hook_handler : modules/generators/ line=8 column=1
a
p_hook_handler(cgi_handler : modules/generators/mod_cgi.c line=733 column=12
c
gi_handler, NULL, NULL, APR_HOOK_MIDDLE);
1251    ap_hook_post_config : enter=1, leave=1

ap_hook_post_config : modules/generators/ line=205 column=1
a
p_hook_post_config(cgi_post_config : modules/generators/mod_cgi.c line=1223 column=12
c
gi_post_config, aszPre : modules/generators/mod_cgi.c line=1249 column=31
a
szPre, NULL, APR_HOOK_REALLY_FIRST);
1252}
1253
1254module AP_MODULE_DECLARE_DATA cgi_module =
1255{
1256    STANDARD20_MODULE_STUFF,
1257    NULL,                        /* dir config creater */
1258    NULL,                        /* dir merger --- default is to override */
1259    create_cgi_config : modules/generators/mod_cgi.c line=91 column=14
c
reate_cgi_config,           /* server config */
1260    merge_cgi_config : modules/generators/mod_cgi.c line=103 column=14
m
erge_cgi_config,            /* merge server config */
1261    cgi_cmds : modules/generators/mod_cgi.c line=149 column=26
c
gi_cmds,                    /* command apr_table_t */
1262    register_hooks : modules/generators/mod_cgi.c line=1247 column=13
r
egister_hooks               /* register hooks */
1263};
1264[EOF]


Generated by expcov