proto, internal/impl: reject invalid field numbers in map items

Change-Id: I44a44a36538f6f8b94078b43711d865edb6244f5
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/212257
Reviewed-by: Herbie Ong <herbie@google.com>
diff --git a/internal/impl/codec_map.go b/internal/impl/codec_map.go
index 94a1bc4..05d1ecd 100644
--- a/internal/impl/codec_map.go
+++ b/internal/impl/codec_map.go
@@ -5,6 +5,7 @@
 package impl
 
 import (
+	"errors"
 	"reflect"
 	"sort"
 
@@ -120,6 +121,9 @@
 		if n < 0 {
 			return 0, wire.ParseError(n)
 		}
+		if num > wire.MaxValidNumber {
+			return 0, errors.New("invalid field number")
+		}
 		b = b[n:]
 		err := errUnknown
 		switch num {
@@ -169,6 +173,9 @@
 		if n < 0 {
 			return 0, wire.ParseError(n)
 		}
+		if num > wire.MaxValidNumber {
+			return 0, errors.New("invalid field number")
+		}
 		b = b[n:]
 		err := errUnknown
 		switch num {