diff --git a/Lib/test/test_cgi.py b/Lib/test/test_cgi.py --- a/Lib/test/test_cgi.py +++ b/Lib/test/test_cgi.py @@ -261,16 +261,44 @@ Content-Disposition: form-data; name="su {'name':'title', 'filename':None, 'value':''}, {'name':'file', 'filename':'test.txt','value':'Testing 123.\n'}, {'name':'submit', 'filename':None, 'value':' Add '}] for x in range(len(fs.list)): for k, exp in expect[x].items(): got = getattr(fs.list[x], k) self.assertEqual(got, exp) + def test_fieldstorage_multipart_baddata_oneblock(self): + data = "0" * 65535 + env = {'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': 'multipart/form-data; boundary=---------------------------721837373350705526688164684', 'CONTENT_LENGTH': str(len(data))} + postdata = "\r\n".join( + ['-----------------------------721837373350705526688164684', + 'Content-Disposition: form-data; name="data"; filename="thefile.txt"', + '', + data, + '-----------------------------721837373350705526688164684--', + ]) + "\r\n" + fs = cgi.FieldStorage(fp=StringIO(postdata), environ=env) + self.assertEqual(len(fs.list), 1) + self.assertEqual(fs['data'].value, data, "data mismatch (%i,%i bytes)" % (len(fs['data'].value), len(data))) + + def test_fieldstorage_multipart_baddata_manyblocks(self): + data = "0" * 65535 + "\r\n" + "0" * 65535 + "\r" + "0" * 65535 + env = {'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': 'multipart/form-data; boundary=---------------------------721837373350705526688164684', 'CONTENT_LENGTH': str(len(data))} + postdata = "\r\n".join( + ['-----------------------------721837373350705526688164684', + 'Content-Disposition: form-data; name="data"; filename="thefile.txt"', + '', + data, + '-----------------------------721837373350705526688164684--', + ]) + "\r\n" + fs = cgi.FieldStorage(fp=StringIO(postdata), environ=env) + self.assertEqual(len(fs.list), 1) + self.assertEqual(fs['data'].value, data, "data mismatch (%i,%i bytes)" % (len(fs['data'].value), len(data))) + _qs_result = { 'key1': 'value1', 'key2': ['value2x', 'value2y'], 'key3': 'value3', 'key4': 'value4' } def testQSAndUrlEncode(self): data = "key2=value2x&key3=value3&key4=value4"