internal/encoding/text: fix eof crash when parsing list of scalars

Need to check for EOF and return proper error.

Bug caught by fuzz test: https://oss-fuzz.com/testcase-detail/6258064955277312.

Change-Id: I63d5c12c301f2ddefc9a0813c13abef40d745e91
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/218258
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/encoding/text/decode.go b/internal/encoding/text/decode.go
index b497090..074e849 100644
--- a/internal/encoding/text/decode.go
+++ b/internal/encoding/text/decode.go
@@ -166,6 +166,9 @@
 
 		case ListOpen:
 			// Next token can be ListClose or comma.
+			if isEOF {
+				return Token{}, io.ErrUnexpectedEOF
+			}
 			switch ch := d.in[0]; ch {
 			case ']':
 				d.popOpenStack()
diff --git a/internal/encoding/text/decode_test.go b/internal/encoding/text/decode_test.go
index 25ef83a..6ad31ce 100644
--- a/internal/encoding/text/decode_test.go
+++ b/internal/encoding/text/decode_test.go
@@ -733,6 +733,15 @@
 			},
 		},
 		{
+			in: `name: [0`,
+			want: []R{
+				{K: text.Name},
+				{K: text.ListOpen},
+				{K: text.Scalar},
+				{E: eofErr},
+			},
+		},
+		{
 			in: `name: [` + space + `"hello"` + space + `]` + space,
 			want: []R{
 				{K: text.Name},