@@ -197,21 +197,8 @@ internal class CborEncoder(private val output: ByteArrayOutput) {
197197 }
198198}
199199
200- private class CborMapReader (val cbor : Cbor , decoder : CborDecoder ) : CborListReader(cbor, decoder) {
201- /* *
202- * Keys that have been seen so far while reading this map.
203- *
204- * Only used if [Cbor.forbidDuplicateKeys] is in effect.
205- */
206- private val seenKeys = mutableSetOf<Any ?>()
207-
200+ private class CborMapReader (cbor : Cbor , decoder : CborDecoder ) : CborListReader(cbor, decoder) {
208201 override fun skipBeginToken () = setSize(decoder.startMap() * 2 )
209-
210- override fun visitKey (key : Any? ) {
211- if (cbor.forbidDuplicateKeys) {
212- seenKeys.add(key) || throw DuplicateKeyException (key)
213- }
214- }
215202}
216203
217204private open class CborListReader (cbor : Cbor , decoder : CborDecoder ) : CborReader(cbor, decoder) {
@@ -232,6 +219,13 @@ internal open class CborReader(private val cbor: Cbor, protected val decoder: Cb
232219
233220 private var decodeByteArrayAsByteString = false
234221
222+ /* *
223+ * Keys that have been seen so far while reading this map.
224+ *
225+ * Only used if [Cbor.forbidDuplicateKeys] is in effect.
226+ */
227+ private val seenKeys = mutableSetOf<Any ?>()
228+
235229 protected fun setSize (size : Int ) {
236230 if (size >= 0 ) {
237231 finiteMode = true
@@ -259,12 +253,19 @@ internal open class CborReader(private val cbor: Cbor, protected val decoder: Cb
259253 if (! finiteMode) decoder.end()
260254 }
261255
256+ override fun visitKey (key : Any? ) {
257+ if (cbor.forbidDuplicateKeys) {
258+ seenKeys.add(key) || throw DuplicateKeyException (key)
259+ }
260+ }
261+
262262 override fun decodeElementIndex (descriptor : SerialDescriptor ): Int {
263263 val index = if (cbor.ignoreUnknownKeys) {
264264 val knownIndex: Int
265265 while (true ) {
266266 if (isDone()) return CompositeDecoder .DECODE_DONE
267267 val elemName = decoder.nextString()
268+ visitKey(elemName)
268269 readProperties++
269270
270271 val index = descriptor.getElementIndex(elemName)
@@ -279,6 +280,7 @@ internal open class CborReader(private val cbor: Cbor, protected val decoder: Cb
279280 } else {
280281 if (isDone()) return CompositeDecoder .DECODE_DONE
281282 val elemName = decoder.nextString()
283+ visitKey(elemName)
282284 readProperties++
283285 descriptor.getElementIndexOrThrow(elemName)
284286 }
0 commit comments