]> Cypherpunks repositories - gostls13.git/commitdiff
mime/quotedprintable: accept badly encoded bytes
authorAlexandre Cesaro <alexandre.cesaro@gmail.com>
Fri, 20 Mar 2015 11:22:49 +0000 (12:22 +0100)
committerBrad Fitzpatrick <bradfitz@golang.org>
Tue, 24 Mar 2015 22:35:58 +0000 (22:35 +0000)
RFC 2045 says:
    An "=" followed by two hexadecimal digits, one or both
    of which are lowercase letters in "abcdef", is formally
    illegal. A robust implementation might choose to
    recognize them as the corresponding uppercase letters.

    https://tools.ietf.org/html/rfc2045#page-22

Change-Id: Ibb4b1e4b8bf4fa65ff895ba486a931d90308bf70
Reviewed-on: https://go-review.googlesource.com/7891
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/mime/quotedprintable/reader.go
src/mime/quotedprintable/reader_test.go

index 86c7f58cc8e9ef18b0269f5930e7ea751d0d37f6..a39a20ef8358b546879f9c06d928773bbe0c061f 100644 (file)
@@ -36,6 +36,9 @@ func fromHex(b byte) (byte, error) {
                return b - '0', nil
        case b >= 'A' && b <= 'F':
                return b - 'A' + 10, nil
+       // Accept badly encoded bytes.
+       case b >= 'a' && b <= 'f':
+               return b - 'a' + 10, nil
        }
        return 0, fmt.Errorf("quotedprintable: invalid hex byte 0x%02x", b)
 }
index 23dae2becba6059e0fd3761a67e8052d7154113f..e77b2610ec104a083da6a88f63cbf7ea81bbeebb 100644 (file)
@@ -27,10 +27,10 @@ func TestReader(t *testing.T) {
                {in: "", want: ""},
                {in: "foo bar", want: "foo bar"},
                {in: "foo bar=3D", want: "foo bar="},
+               {in: "foo bar=3d", want: "foo bar="}, // lax.
                {in: "foo bar=\n", want: "foo bar"},
                {in: "foo bar\n", want: "foo bar\n"}, // somewhat lax.
                {in: "foo bar=0", want: "foo bar", err: io.ErrUnexpectedEOF},
-               {in: "foo bar=ab", want: "foo bar", err: "quotedprintable: invalid hex byte 0x61"},
                {in: "foo bar=0D=0A", want: "foo bar\r\n"},
                {in: " A B        \r\n C ", want: " A B\r\n C"},
                {in: " A B =\r\n C ", want: " A B  C"},