diff options
| author | benebsiny <stu995106@hotmail.com.tw> | 2023-06-06 16:31:49 +0800 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-06-07 05:44:27 +0200 |
| commit | 7cc138a58f73c17f07cfaf459ef8e7677ac41ac0 (patch) | |
| tree | 682b57b524018c3c51f380f3f536302100eb9ef2 /tests/requests_tests/tests.py | |
| parent | 094b0bea2ce76db9d3dc06c384d4ac3b22705810 (diff) | |
Added MultiPartParser tests for parsing base64-encoded fields.
Diffstat (limited to 'tests/requests_tests/tests.py')
| -rw-r--r-- | tests/requests_tests/tests.py | 52 |
1 files changed, 51 insertions, 1 deletions
diff --git a/tests/requests_tests/tests.py b/tests/requests_tests/tests.py index d3e9e66224..79f82741db 100644 --- a/tests/requests_tests/tests.py +++ b/tests/requests_tests/tests.py @@ -14,7 +14,7 @@ from django.http import ( from django.http.multipartparser import MultiPartParserError from django.http.request import split_domain_port from django.test import RequestFactory, SimpleTestCase, override_settings -from django.test.client import FakePayload +from django.test.client import BOUNDARY, MULTIPART_CONTENT, FakePayload class RequestsTests(SimpleTestCase): @@ -537,6 +537,56 @@ class RequestsTests(SimpleTestCase): self.assertEqual(request.read(1), b"n") self.assertEqual(request.POST, {"name": ["value"]}) + def test_multipart_post_field_with_base64(self): + payload = FakePayload( + "\r\n".join( + [ + f"--{BOUNDARY}", + 'Content-Disposition: form-data; name="name"', + "Content-Transfer-Encoding: base64", + "", + "dmFsdWU=", + f"--{BOUNDARY}--", + "", + ] + ) + ) + request = WSGIRequest( + { + "REQUEST_METHOD": "POST", + "CONTENT_TYPE": MULTIPART_CONTENT, + "CONTENT_LENGTH": len(payload), + "wsgi.input": payload, + } + ) + request.body # evaluate + self.assertEqual(request.POST, {"name": ["value"]}) + + def test_multipart_post_field_with_invalid_base64(self): + payload = FakePayload( + "\r\n".join( + [ + f"--{BOUNDARY}", + 'Content-Disposition: form-data; name="name"', + "Content-Transfer-Encoding: base64", + "", + "123", + f"--{BOUNDARY}--", + "", + ] + ) + ) + request = WSGIRequest( + { + "REQUEST_METHOD": "POST", + "CONTENT_TYPE": MULTIPART_CONTENT, + "CONTENT_LENGTH": len(payload), + "wsgi.input": payload, + } + ) + request.body # evaluate + self.assertEqual(request.POST, {"name": ["123"]}) + def test_POST_after_body_read_and_stream_read_multipart(self): """ POST should be populated even if body is read first, and then |
