summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjan <jan@152afb58-edef-0310-8abb-c4023f1b3aa9>2005-03-16 09:13:00 +0000
committerjan <jan@152afb58-edef-0310-8abb-c4023f1b3aa9>2005-03-16 09:13:00 +0000
commita10dfe9d4fcd5ecf6a3ed698b33d3fedb313bf8f (patch)
treef8878d9b7e1b73f6a093a217147bbdc8af3aa457
parent90962b09f516c325ce1c8f4be487479d74488561 (diff)
downloadlighttpd-a10dfe9d4fcd5ecf6a3ed698b33d3fedb313bf8f.tar.gz
handle POST_DATA before connect() and off-by-one in sending data
git-svn-id: svn://svn.lighttpd.net/lighttpd/branches/post-upload-cleanup@156 152afb58-edef-0310-8abb-c4023f1b3aa9
-rw-r--r--src/mod_fastcgi.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/mod_fastcgi.c b/src/mod_fastcgi.c
index a1ccc24a..a0f4dd8f 100644
--- a/src/mod_fastcgi.c
+++ b/src/mod_fastcgi.c
@@ -1569,7 +1569,9 @@ static int fcgi_create_env(server *srv, handler_ctx *hctx, size_t request_id) {
/* send FCGI_BEGIN_REQUEST */
- buffer *write_buffer = chunkqueue_get_append_buffer(hctx->write_queue);
+ /* we might be called after the POST_DATA came in
+ */
+ buffer *write_buffer = chunkqueue_get_prepend_buffer(hctx->write_queue);
fcgi_header(&(beginRecord.header), FCGI_BEGIN_REQUEST, request_id, sizeof(beginRecord.body), 0);
beginRecord.body.roleB0 = host->mode;
@@ -1795,7 +1797,7 @@ static int fcgi_create_env(server *srv, handler_ctx *hctx, size_t request_id) {
/* there is no content for use, close stdin */
if (con->request.content_finished) {
fcgi_header(&(header), FCGI_STDIN, hctx->request_id, 0, 0);
- chunkqueue_append_mem(hctx->write_queue, (const char *)&header, sizeof(header));
+ chunkqueue_append_mem(hctx->write_queue, (const char *)&header, sizeof(header) + 1);
}
return 0;
@@ -3346,7 +3348,7 @@ SUBREQUEST_FUNC(mod_fastcgi_fetch_post_data) {
toRead = weHave > weWant ? weWant : weHave;
fcgi_header(&(header), FCGI_STDIN, hctx->request_id, toRead, 0);
- chunkqueue_append_mem(hctx->write_queue, (const char *)&header, sizeof(header));
+ chunkqueue_append_mem(hctx->write_queue, (const char *)&header, sizeof(header) + 1);
chunkqueue_append_mem(hctx->write_queue, c->data.mem->ptr + c->offset, toRead + 1);
c->offset += toRead;
@@ -3359,7 +3361,7 @@ SUBREQUEST_FUNC(mod_fastcgi_fetch_post_data) {
if (hctx->post_data_fetched == con->request.content_length) {
/* terminate STDIN */
fcgi_header(&(header), FCGI_STDIN, hctx->request_id, 0, 0);
- chunkqueue_append_mem(hctx->write_queue, (const char *)&header, sizeof(header));
+ chunkqueue_append_mem(hctx->write_queue, (const char *)&header, sizeof(header) + 1);
con->request.content_finished = 1;
}