File tree Expand file tree Collapse file tree 2 files changed +9
-5
lines changed
Expand file tree Collapse file tree 2 files changed +9
-5
lines changed Original file line number Diff line number Diff line change @@ -298,8 +298,11 @@ internal struct JSONEncodingVisitor: Visitor {
298298 encoder. append ( text: json)
299299 }
300300 } else if let newNameMap = ( M . self as? _ProtoNameProviding . Type) ? . _protobuf_nameMap {
301+ // Install inner object's name map
301302 let oldNameMap = self . nameMap
302303 self . nameMap = newNameMap
304+ // Restore outer object's name map before returning
305+ defer { self . nameMap = oldNameMap }
303306 for v in value {
304307 if comma {
305308 encoder. comma ( )
@@ -309,7 +312,6 @@ internal struct JSONEncodingVisitor: Visitor {
309312 try v. traverse ( visitor: & self )
310313 encoder. endObject ( )
311314 }
312- self . nameMap = oldNameMap
313315 } else {
314316 throw JSONEncodingError . missingFieldNames
315317 }
Original file line number Diff line number Diff line change @@ -246,6 +246,12 @@ internal struct TextFormatEncodingVisitor: Visitor {
246246 self . nameMap = ( M . self as? _ProtoNameProviding . Type) ? . _protobuf_nameMap
247247 self . nameResolver = [ : ]
248248 self . extensions = ( value as? ExtensibleMessage ) ? . _protobuf_extensionFieldValues
249+ // Restore state before returning
250+ defer {
251+ self . extensions = oldExtensions
252+ self . nameResolver = oldNameResolver
253+ self . nameMap = oldNameMap
254+ }
249255 // Encode submessage
250256 encoder. startMessageField ( )
251257 if let any = value as? Google_Protobuf_Any {
@@ -254,10 +260,6 @@ internal struct TextFormatEncodingVisitor: Visitor {
254260 try ! value. traverse ( visitor: & self )
255261 }
256262 encoder. endMessageField ( )
257- // Restore state
258- self . extensions = oldExtensions
259- self . nameResolver = oldNameResolver
260- self . nameMap = oldNameMap
261263 }
262264
263265 // Emit the full "verbose" form of an Any. This writes the typeURL
You can’t perform that action at this time.
0 commit comments