In the V2 API, an extendable message can have extensions that are neither present in the return values from proto.ExtensionDescs nor in the message's unknown/unrecognized field bytes.
That means that they are simply dropped if such a message is converted to a *dynamic.Message.
This simple fix targets just the extensions in question and merges them into the dynamic message via marshalling to bytes and then unmarshalling.
While in here, the files I touched got reformetted with the Go 1.19 version of gofmt. And I also updated a few places that were relying on reflection to utilize newer(ish) features of the protobuf runtime (back when the version pinned was old enough that the simple/non-reflection logic wouldn't compile).
In the V2 API, an extendable message can have extensions that are neither present in the return values from
proto.ExtensionDescs
nor in the message's unknown/unrecognized field bytes.That means that they are simply dropped if such a message is converted to a
*dynamic.Message
.This simple fix targets just the extensions in question and merges them into the dynamic message via marshalling to bytes and then unmarshalling.
While in here, the files I touched got reformetted with the Go 1.19 version of
gofmt
. And I also updated a few places that were relying on reflection to utilize newer(ish) features of the protobuf runtime (back when the version pinned was old enough that the simple/non-reflection logic wouldn't compile).