def test_lowlevel(): """Lowlevel formparser tests""" assert formparser._line_parse("foo") == ("foo", False) assert formparser._line_parse("foo\r\n") == ("foo", True) assert formparser._line_parse("foo\r") == ("foo", True) assert formparser._line_parse("foo\n") == ("foo", True) lineiter = iter("\n\n\nfoo\nbar\nbaz".splitlines(True)) line = formparser._find_terminator(lineiter) assert line == "foo" assert list(lineiter) == ["bar\n", "baz"] assert formparser._find_terminator([]) == "" assert formparser._find_terminator([""]) == "" assert_raises(ValueError, formparser.parse_multipart, None, "", 20) assert_raises(ValueError, formparser.parse_multipart, None, "broken ", 20) data = "--foo\r\n\r\nHello World\r\n--foo--" assert_raises(ValueError, formparser.parse_multipart, StringIO(data), "foo", len(data)) data = ( "--foo\r\nContent-Disposition: form-field; name=foo\r\n" "Content-Transfer-Encoding: base64\r\n\r\nHello World\r\n--foo--" ) assert_raises(ValueError, formparser.parse_multipart, StringIO(data), "foo", len(data)) data = "--foo\r\nContent-Disposition: form-field; name=foo\r\n\r\nHello World\r\n" assert_raises(ValueError, formparser.parse_multipart, StringIO(data), "foo", len(data)) x = formparser.parse_multipart_headers(["foo: bar\r\n", " x test\r\n"]) assert x["foo"] == "bar\n x test" assert_raises(ValueError, formparser.parse_multipart_headers, ["foo: bar\r\n", " x test"])
def test_lowlevel(): """Lowlevel formparser tests""" assert formparser._line_parse('foo') == ('foo', False) assert formparser._line_parse('foo\r\n') == ('foo', True) assert formparser._line_parse('foo\r') == ('foo', True) assert formparser._line_parse('foo\n') == ('foo', True) lineiter = iter('\n\n\nfoo\nbar\nbaz'.splitlines(True)) line = formparser._find_terminator(lineiter) assert line == 'foo' assert list(lineiter) == ['bar\n', 'baz'] assert formparser._find_terminator([]) == '' assert formparser._find_terminator(['']) == '' assert_raises(ValueError, formparser.parse_multipart, None, '', 20) assert_raises(ValueError, formparser.parse_multipart, None, 'broken ', 20) data = '--foo\r\n\r\nHello World\r\n--foo--' assert_raises(ValueError, formparser.parse_multipart, StringIO(data), 'foo', len(data)) data = '--foo\r\nContent-Disposition: form-field; name=foo\r\n' \ 'Content-Transfer-Encoding: base64\r\n\r\nHello World\r\n--foo--' assert_raises(ValueError, formparser.parse_multipart, StringIO(data), 'foo', len(data)) data = '--foo\r\nContent-Disposition: form-field; name=foo\r\n\r\nHello World\r\n' assert_raises(ValueError, formparser.parse_multipart, StringIO(data), 'foo', len(data)) x = formparser.parse_multipart_headers(['foo: bar\r\n', ' x test\r\n']) assert x['foo'] == 'bar\n x test' assert_raises(ValueError, formparser.parse_multipart_headers, ['foo: bar\r\n', ' x test'])
def test_failures(self): def parse_multipart(stream, boundary, content_length): parser = formparser.MultiPartParser(content_length) return parser.parse(stream, boundary, content_length) pytest.raises(ValueError, parse_multipart, io.BytesIO(), b"broken ", 0) data = b"--foo\r\n\r\nHello World\r\n--foo--" pytest.raises(ValueError, parse_multipart, io.BytesIO(data), b"foo", len(data)) data = ( b"--foo\r\nContent-Disposition: form-field; name=foo\r\n" b"Content-Transfer-Encoding: base64\r\n\r\nHello World\r\n--foo--" ) pytest.raises(ValueError, parse_multipart, io.BytesIO(data), b"foo", len(data)) data = ( b"--foo\r\nContent-Disposition: form-field; name=foo\r\n\r\nHello World\r\n" ) pytest.raises(ValueError, parse_multipart, io.BytesIO(data), b"foo", len(data)) x = formparser.parse_multipart_headers(["foo: bar\r\n", " x test\r\n"]) assert x["foo"] == "bar\n x test" pytest.raises( ValueError, formparser.parse_multipart_headers, ["foo: bar\r\n", " x test"] )
def test_failures(self): def parse_multipart(stream, boundary, content_length): parser = formparser.MultiPartParser(content_length) return parser.parse(stream, boundary, content_length) self.assert_raises(ValueError, parse_multipart, StringIO(''), '', 0) self.assert_raises(ValueError, parse_multipart, StringIO(''), 'broken ', 0) data = '--foo\r\n\r\nHello World\r\n--foo--' self.assert_raises(ValueError, parse_multipart, StringIO(data), 'foo', len(data)) data = '--foo\r\nContent-Disposition: form-field; name=foo\r\n' \ 'Content-Transfer-Encoding: base64\r\n\r\nHello World\r\n--foo--' self.assert_raises(ValueError, parse_multipart, StringIO(data), 'foo', len(data)) data = '--foo\r\nContent-Disposition: form-field; name=foo\r\n\r\nHello World\r\n' self.assert_raises(ValueError, parse_multipart, StringIO(data), 'foo', len(data)) x = formparser.parse_multipart_headers(['foo: bar\r\n', ' x test\r\n']) self.assert_equal(x['foo'], 'bar\n x test') self.assert_raises(ValueError, formparser.parse_multipart_headers, ['foo: bar\r\n', ' x test'])
def test_lowlevel(): """Lowlevel formparser tests""" formparser._line_parse('foo') == ('foo', False) formparser._line_parse('foo\r\n') == ('foo', True) formparser._line_parse('foo\r') == ('foo', True) formparser._line_parse('foo\n') == ('foo', True) lineiter = iter('\n\n\nfoo\nbar\nbaz'.splitlines(True)) line = formparser._find_terminator(lineiter) assert line == 'foo' assert list(lineiter) == ['bar\n', 'baz'] assert formparser._find_terminator([]) == '' assert formparser._find_terminator(['']) == '' assert_raises(ValueError, formparser.parse_multipart, None, '', 20) assert_raises(ValueError, formparser.parse_multipart, None, 'broken ', 20) data = '--foo\r\n\r\nHello World\r\n--foo--' assert_raises(ValueError, formparser.parse_multipart, StringIO(data), 'foo', len(data)) data = '--foo\r\nContent-Disposition: form-field; name=foo\r\n' \ 'Content-Transfer-Encoding: base64\r\n\r\nHello World\r\n--foo--' assert_raises(ValueError, formparser.parse_multipart, StringIO(data), 'foo', len(data)) data = '--foo\r\nContent-Disposition: form-field; name=foo\r\n\r\nHello World\r\n' assert_raises(ValueError, formparser.parse_multipart, StringIO(data), 'foo', len(data)) x = formparser.parse_multipart_headers(['foo: bar\r\n', ' x test\r\n']) assert x['foo'] == 'bar\n x test' assert_raises(ValueError, formparser.parse_multipart_headers, ['foo: bar\r\n', ' x test'])
def test_failures(self): def parse_multipart(stream, boundary, content_length): parser = formparser.MultiPartParser(content_length) return parser.parse(stream, boundary, content_length) self.assert_raises(ValueError, parse_multipart, StringIO(''), '', 0) self.assert_raises(ValueError, parse_multipart, StringIO(''), 'broken ', 0) data = '--foo\r\n\r\nHello World\r\n--foo--' self.assert_raises(ValueError, parse_multipart, StringIO(data), 'foo', len(data)) data = '--foo\r\nContent-Disposition: form-field; name=foo\r\n' \ 'Content-Transfer-Encoding: base64\r\n\r\nHello World\r\n--foo--' self.assert_raises(ValueError, parse_multipart, StringIO(data), 'foo', len(data)) data = '--foo\r\nContent-Disposition: form-field; name=foo\r\n\r\nHello World\r\n' self.assert_raises(ValueError, parse_multipart, StringIO(data), 'foo', len(data)) x = formparser.parse_multipart_headers(['foo: bar\r\n', ' x test\r\n']) y = formparser.parse_multipart_headers(['\n', 'start: end\r\n']) self.assert_equal(x['foo'], 'bar\n x test') self.assert_equal(y['start'], 'end') self.assert_raises(ValueError, formparser.parse_multipart_headers, ['foo: bar\r\n', ' x test'])
def test_failures(self): def parse_multipart(stream, boundary, content_length): parser = formparser.MultiPartParser(content_length) return parser.parse(stream, boundary, content_length) pytest.raises(ValueError, parse_multipart, BytesIO(), b'broken ', 0) data = b'--foo\r\n\r\nHello World\r\n--foo--' pytest.raises(ValueError, parse_multipart, BytesIO(data), b'foo', len(data)) data = b'--foo\r\nContent-Disposition: form-field; name=foo\r\n' \ b'Content-Transfer-Encoding: base64\r\n\r\nHello World\r\n--foo--' pytest.raises(ValueError, parse_multipart, BytesIO(data), b'foo', len(data)) data = b'--foo\r\nContent-Disposition: form-field; name=foo\r\n\r\nHello World\r\n' pytest.raises(ValueError, parse_multipart, BytesIO(data), b'foo', len(data)) x = formparser.parse_multipart_headers(['foo: bar\r\n', ' x test\r\n']) strict_eq(x['foo'], 'bar\n x test') pytest.raises(ValueError, formparser.parse_multipart_headers, ['foo: bar\r\n', ' x test'])
def test_failures(self): def parse_multipart(stream, boundary, content_length): parser = formparser.MultiPartParser(content_length) return parser.parse(stream, boundary, content_length) self.assert_raises(ValueError, parse_multipart, StringIO(""), "", 0) self.assert_raises(ValueError, parse_multipart, StringIO(""), "broken ", 0) data = "--foo\r\n\r\nHello World\r\n--foo--" self.assert_raises(ValueError, parse_multipart, StringIO(data), "foo", len(data)) data = ( "--foo\r\nContent-Disposition: form-field; name=foo\r\n" "Content-Transfer-Encoding: base64\r\n\r\nHello World\r\n--foo--" ) self.assert_raises(ValueError, parse_multipart, StringIO(data), "foo", len(data)) data = "--foo\r\nContent-Disposition: form-field; name=foo\r\n\r\nHello World\r\n" self.assert_raises(ValueError, parse_multipart, StringIO(data), "foo", len(data)) x = formparser.parse_multipart_headers(["foo: bar\r\n", " x test\r\n"]) self.assert_equal(x["foo"], "bar\n x test") self.assert_raises(ValueError, formparser.parse_multipart_headers, ["foo: bar\r\n", " x test"])
def parse_multipart_headers_fix(iterable): # Nintendo, in their ever infinite wisdom, # separate the sent file's name in a field named "imageFileName". # Actual JPEG data, however, is sent in a field named "jpegData". # # Werkzeug interprets "jpegData" as being a form value (instead of a file) # due to this lack of parameter and attempts to encode the raw binary value # sent as an UTF-8 string, which as of writing is its default charset. # # (As a bit of trivia, RFC2183 - https://tools.ietf.org/html/rfc2183 - # does not appear to require this. So we must hack around this...) headers = parse_multipart_headers(iterable) if not headers: # No headers is silly and will break us later on. return exceptions.BadRequest() # Look for our faulty "jpegData" data. for key, value in headers: if value == to_find: # Make "jpegData" have a filename. headers[key] = to_replace return headers