aboutsummaryrefslogtreecommitdiff
path: root/src/mime
diff options
context:
space:
mode:
authorHiroshi Ioka <hirochachacha@gmail.com>2017-04-08 13:16:26 +0900
committerBrad Fitzpatrick <bradfitz@golang.org>2017-04-29 04:14:36 +0000
commitb225396f935737cbd64164b67aeb8f1bb8ac08be (patch)
treec57a027e4348358158ac8d9871fc69c9bb2ba72f /src/mime
parent38fbada5579823378217d57671de54fc5ebfa8c6 (diff)
downloadgo-b225396f935737cbd64164b67aeb8f1bb8ac08be.tar.gz
go-b225396f935737cbd64164b67aeb8f1bb8ac08be.zip
mime: re-accept empty encoded-text
https://go-review.googlesource.com/37812 prohibits empty encoded-text. This CL accepts it again for backward compatibility. Change-Id: I0e0840b501927f147160b999bb59d2d029ea314c Reviewed-on: https://go-review.googlesource.com/40051 Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/mime')
-rw-r--r--src/mime/encodedword.go7
-rw-r--r--src/mime/encodedword_test.go2
2 files changed, 5 insertions, 4 deletions
diff --git a/src/mime/encodedword.go b/src/mime/encodedword.go
index 158feaad4f..99eb432f54 100644
--- a/src/mime/encodedword.go
+++ b/src/mime/encodedword.go
@@ -194,8 +194,9 @@ type WordDecoder struct {
// Decode decodes an RFC 2047 encoded-word.
func (d *WordDecoder) Decode(word string) (string, error) {
- // See https://tools.ietf.org/html/rfc2047#section-2
- if len(word) < 9 || !strings.HasPrefix(word, "=?") || !strings.HasSuffix(word, "?=") || strings.Count(word, "?") != 4 {
+ // See https://tools.ietf.org/html/rfc2047#section-2 for details.
+ // Our decoder is permissive, we accept empty encoded-text.
+ if len(word) < 8 || !strings.HasPrefix(word, "=?") || !strings.HasSuffix(word, "?=") || strings.Count(word, "?") != 4 {
return "", errInvalidWord
}
word = word[2 : len(word)-2]
@@ -208,7 +209,7 @@ func (d *WordDecoder) Decode(word string) (string, error) {
if len(charset) == 0 {
return "", errInvalidWord
}
- if len(word) <= split+3 {
+ if len(word) < split+3 {
return "", errInvalidWord
}
encoding := word[split+1]
diff --git a/src/mime/encodedword_test.go b/src/mime/encodedword_test.go
index b63fe043ed..6c54e502ad 100644
--- a/src/mime/encodedword_test.go
+++ b/src/mime/encodedword_test.go
@@ -89,8 +89,8 @@ func TestDecodeWord(t *testing.T) {
{"=?UTF-8?Q?=A?=", "", true},
{"=?UTF-8?A?A?=", "", true},
{"=????=", "", true},
- {"=?UTF-8?Q??=", "", true},
{"=?UTF-8???=", "", true},
+ {"=?UTF-8?Q??=", "", false},
}
for _, test := range tests {