internal/impl: init map value MessageInfos in validator

I'm not sure how to write a good test for this one, since it's so
specific to both the code and the ordering of initialization. Just
sticking the fuzzer-provided case into our standard test message set
doesn't do it, because something else has initialized the MessageInfo by
the time the test gets there.

Fixes: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=20543
Change-Id: I508222b43e52287f73e2ed32ce9b954a5f81717b
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/218257
Reviewed-by: Joe Tsai <joetsai@google.com>
diff --git a/internal/impl/validate.go b/internal/impl/validate.go
index e210086..e568c75 100644
--- a/internal/impl/validate.go
+++ b/internal/impl/validate.go
@@ -434,6 +434,9 @@
 					vi.mi.init()
 					fallthrough
 				case validationTypeMap:
+					if vi.mi != nil {
+						vi.mi.init()
+					}
 					states = append(states, validationState{
 						typ:     vi.typ,
 						keyType: vi.keyType,