From 510c2e15c5b55a48f15f0ba680c5e82a2db5456f Mon Sep 17 00:00:00 2001 From: Valentin Bartenev Date: Thu, 20 Sep 2018 16:04:49 +0300 Subject: [PATCH] Python: adjusted input.read(size) argument value interpretation. Previously, passing 0 resulted in reading the whole body and all negative values raised an exception. Now the behaviour is in consistentance with io.RawIOBase.read() interface, and passing 0 returns empty (byte) string, while -1 results in reading the whole body. --- src/nxt_python_wsgi.c | 8 +++++--- test/test_python_application.py | 1 - 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/nxt_python_wsgi.c b/src/nxt_python_wsgi.c index d925b33f..3a5f1913 100644 --- a/src/nxt_python_wsgi.c +++ b/src/nxt_python_wsgi.c @@ -1136,11 +1136,13 @@ nxt_py_input_read(nxt_py_input_t *self, PyObject *args) return NULL; } - return PyErr_Format(PyExc_ValueError, - "the read body size cannot be zero or less"); + if (size != -1) { + return PyErr_Format(PyExc_ValueError, + "the read body size cannot be zero or less"); + } } - if (size == 0 || size > (Py_ssize_t) ctx->req->content_length) { + if (size == -1 || size > (Py_ssize_t) ctx->req->content_length) { size = ctx->req->content_length; } } diff --git a/test/test_python_application.py b/test/test_python_application.py index 146223ec..f1e2cbf7 100644 --- a/test/test_python_application.py +++ b/test/test_python_application.py @@ -243,7 +243,6 @@ Connection: close self.assertEqual(self.post(body=body)['body'], body, 'input iter') - @unittest.expectedFailure def test_python_application_input_read_length(self): self.load('input_read_length')