@@ -27,13 +27,6 @@ internal struct JSONDecoder: Decoder {
2727 throw JSONDecodingError . conflictingOneOf
2828 }
2929
30- internal init ( source: UnsafeRawBufferPointer , options: JSONDecodingOptions ) {
31- self . options = options
32- self . scanner = JSONScanner ( source: source,
33- messageDepthLimit: self . options. messageDepthLimit,
34- ignoreUnknownFields: self . options. ignoreUnknownFields)
35- }
36-
3730 internal init ( source: UnsafeRawBufferPointer , options: JSONDecodingOptions ,
3831 messageType: Message . Type , extensions: ExtensionMap ? ) {
3932 self . options = options
@@ -44,11 +37,12 @@ internal struct JSONDecoder: Decoder {
4437 self . extensions = extensions
4538 }
4639
47- private init ( decoder: JSONDecoder ) {
40+ private init ( decoder: JSONDecoder , messageType : Message . Type ) {
4841 // The scanner is copied over along with the options.
49- scanner = decoder. scanner
50- options = decoder. options
51- extensions = decoder. extensions
42+ self . scanner = decoder. scanner
43+ self . options = decoder. options
44+ self . extensions = decoder. extensions
45+ self . messageType = messageType
5246 }
5347
5448 mutating func nextFieldNumber( ) throws -> Int ? {
@@ -545,7 +539,7 @@ internal struct JSONDecoder: Decoder {
545539 if value == nil {
546540 value = M ( )
547541 }
548- var subDecoder = JSONDecoder ( decoder: self )
542+ var subDecoder = JSONDecoder ( decoder: self , messageType : M . self )
549543 try subDecoder. decodeFullObject ( message: & value!)
550544 assert ( scanner. recursionBudget == subDecoder. scanner. recursionBudget)
551545 scanner = subDecoder. scanner
@@ -576,7 +570,7 @@ internal struct JSONDecoder: Decoder {
576570 }
577571 } else {
578572 var message = M ( )
579- var subDecoder = JSONDecoder ( decoder: self )
573+ var subDecoder = JSONDecoder ( decoder: self , messageType : M . self )
580574 try subDecoder. decodeFullObject ( message: & message)
581575 value. append ( message)
582576 assert ( scanner. recursionBudget == subDecoder. scanner. recursionBudget)
@@ -713,19 +707,20 @@ internal struct JSONDecoder: Decoder {
713707 messageType: Message . Type ,
714708 fieldNumber: Int
715709 ) throws {
716- if let ext = extensions ? [ messageType, fieldNumber] {
717- var fieldValue = values [ fieldNumber]
718- if fieldValue != nil {
719- try fieldValue!. decodeExtensionField ( decoder: & self )
720- } else {
721- fieldValue = try ext. _protobuf_newField ( decoder: & self )
722- }
723- if fieldValue != nil {
724- values [ fieldNumber] = fieldValue
725- } else {
726- // This most likely indicates a bug in our extension support.
727- throw TextFormatDecodingError . internalExtensionError
728- }
710+ guard let ext = extensions ? [ messageType, fieldNumber] else {
711+ return
712+ }
713+ var fieldValue = values [ fieldNumber]
714+ if fieldValue != nil {
715+ try fieldValue!. decodeExtensionField ( decoder: & self )
716+ } else {
717+ fieldValue = try ext. _protobuf_newField ( decoder: & self )
718+ }
719+ if fieldValue != nil {
720+ values [ fieldNumber] = fieldValue
721+ } else {
722+ // This most likely indicates a bug in our extension support.
723+ throw TextFormatDecodingError . internalExtensionError
729724 }
730725 }
731726}
0 commit comments