From 28c9b75fb5ebe989b5064c9d60b2ca58dc3391e1 Mon Sep 17 00:00:00 2001 From: "roberto@longshot" Date: Wed, 18 May 2011 21:10:18 +0200 Subject: [PATCH] wsgi.input fix --- plugins/python/wsgi_handlers.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/plugins/python/wsgi_handlers.c b/plugins/python/wsgi_handlers.c index 78b6ed58..3b5707f1 100644 --- a/plugins/python/wsgi_handlers.c +++ b/plugins/python/wsgi_handlers.c @@ -113,10 +113,24 @@ static PyObject *uwsgi_Input_read(uwsgi_Input *self, PyObject *args) { } // return empty string if no post_cl or pos >= post_cl - if (!self->wsgi_req->post_cl || (size_t) self->pos >= self->wsgi_req->post_cl) { + if ((!self->wsgi_req->post_cl || (size_t) self->pos >= self->wsgi_req->post_cl ) && !self->readline_pos) { return PyString_FromString(""); } + // some residual data ? + if (self->readline_pos && self->readline_size) { + if (len > 0) { + if ((size_t) len < (self->readline_size - self->readline_pos)) { + res = PyString_FromStringAndSize(self->readline + self->readline_pos, len); + self->readline_pos+=len; + if (self->readline_pos >= self->readline_size) self->readline_pos = 0; + return res; + } + } + self->readline_pos = 0; + return PyString_FromStringAndSize(self->readline + self->readline_pos, self->readline_size - self->readline_pos); + } + // return the whole input if (len <= 0) { remains = self->wsgi_req->post_cl; @@ -125,7 +139,7 @@ static PyObject *uwsgi_Input_read(uwsgi_Input *self, PyObject *args) { remains = len ; } - if (remains + self->pos > self->wsgi_req->post_cl) { + if (remains + self->pos > self->wsgi_req->post_cl) { remains = self->wsgi_req->post_cl - self->pos; } @@ -134,7 +148,7 @@ static PyObject *uwsgi_Input_read(uwsgi_Input *self, PyObject *args) { } if (uwsgi.post_buffering > 0) { - res = PyString_FromStringAndSize( self->wsgi_req->post_buffering_buf, remains); + res = PyString_FromStringAndSize( self->wsgi_req->post_buffering_buf+self->pos, remains); self->pos += remains; return res; }