internal/impl: handle legacy ExtensionDesc form
Add support for an ExtensionDesc with only Field populated as returned by
protoV1.ExtensionDescs. Rather than panicking when TypeDescriptor is called,
return a placeholder that preserves the name and/or number.
Change-Id: I60352a7aec8ccd8a0c1fb08db5891043a441695f
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/193725
Reviewed-by: Damien Neil <dneil@google.com>
diff --git a/internal/impl/extension.go b/internal/impl/extension.go
index a895763..723bdb0 100644
--- a/internal/impl/extension.go
+++ b/internal/impl/extension.go
@@ -140,10 +140,12 @@
if xi.desc.ExtensionDescriptor == nil {
xi.initFromLegacy()
}
- if xi.ExtensionType == nil {
- xi.initToLegacy()
+ if !xi.desc.ExtensionDescriptor.IsPlaceholder() {
+ if xi.ExtensionType == nil {
+ xi.initToLegacy()
+ }
+ xi.conv = NewConverter(xi.goType, xi.desc)
}
- xi.conv = NewConverter(xi.goType, xi.desc)
}
type extensionTypeDescriptor struct {