示例#1
0
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"])
示例#2
0
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'])
示例#3
0
    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"]
        )
示例#4
0
    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'])
示例#5
0
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'])
示例#6
0
    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'])
示例#7
0
    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)
        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'])
示例#9
0
    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"])
示例#10
0
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