internal/impl: support packed extensions

Change-Id: I5a9e22f1c98f5db9caae1681775017da5aa67394
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/185541
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
diff --git a/internal/impl/codec_extension.go b/internal/impl/codec_extension.go
index 10a9fa2..3a23bb0 100644
--- a/internal/impl/codec_extension.go
+++ b/internal/impl/codec_extension.go
@@ -29,7 +29,12 @@
 		return e
 	}
 
-	wiretag := wire.EncodeTag(xt.Number(), wireTypes[xt.Kind()])
+	var wiretag uint64
+	if !xt.IsPacked() {
+		wiretag = wire.EncodeTag(xt.Number(), wireTypes[xt.Kind()])
+	} else {
+		wiretag = wire.EncodeTag(xt.Number(), wire.BytesType)
+	}
 	e = &extensionFieldInfo{
 		wiretag: wiretag,
 		tagsize: wire.SizeVarint(wiretag),