MCPcopy Create free account
hub / github.com/apache/httpd / ap_fcgi_encode_env

Function ap_fcgi_encode_env

server/util_fcgi.c:179–290  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

177}
178
179AP_DECLARE(apr_status_t) ap_fcgi_encode_env(request_rec *r,
180 apr_table_t *env,
181 void *buffer,
182 apr_size_t buflen,
183 int *starting_elem)
184{
185 apr_status_t rv = APR_SUCCESS;
186 const apr_array_header_t *envarr;
187 const apr_table_entry_t *elts;
188 char *itr;
189 int i;
190
191 envarr = apr_table_elts(env);
192 elts = (const apr_table_entry_t *) envarr->elts;
193
194 itr = buffer;
195
196 for (i = *starting_elem; i < envarr->nelts; ) {
197 apr_size_t keylen, vallen;
198
199 if (!elts[i].key) {
200 (*starting_elem)++;
201 i++;
202 continue;
203 }
204
205 keylen = strlen(elts[i].key);
206
207 if (keylen >> 7 == 0) {
208 if (buflen < 1) {
209 rv = APR_ENOSPC; /* overflow */
210 break;
211 }
212 itr[0] = keylen & 0xff;
213 itr += 1;
214 buflen -= 1;
215 }
216 else {
217 if (buflen < 4) {
218 rv = APR_ENOSPC; /* overflow */
219 break;
220 }
221 itr[0] = ((keylen >> 24) & 0xff) | 0x80;
222 itr[1] = ((keylen >> 16) & 0xff);
223 itr[2] = ((keylen >> 8) & 0xff);
224 itr[3] = ((keylen) & 0xff);
225 itr += 4;
226 buflen -= 4;
227 }
228
229 vallen = elts[i].val ? strlen(elts[i].val) : 0;
230
231 if (vallen >> 7 == 0) {
232 if (buflen < 1) {
233 rv = APR_ENOSPC; /* overflow */
234 break;
235 }
236 itr[0] = vallen & 0xff;

Callers 2

send_environmentFunction · 0.85
send_environmentFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected