Skip to content

Bug: getting "DecodingException: Unable to decode KnownChildSensitiveDataConsents" #81

@AndroidDeveloperLB

Description

@AndroidDeveloperLB

I use this library to detect if data-sharing is enabled, by using this:

implementation("com.iabgpp:iabgpp-encoder:3.2.3")

    /** @return returns null if not initialized yet, or initialized and it's ok to share data.
     * When returned true, it means all kinds of data sharing is allowed:SALE_OPT_OUT, SHARING_OPT_OUT, TARGETED_ADVERTISING_OPT_OUT.
     * Otherwise returns false*/
    fun isDataShareAllowed(context: Context): Boolean? {
        val defaultSharedPreferences = PreferenceUtil.getDefaultSharedPreferences(context)
        val gppString = defaultSharedPreferences.getString("IABGPP_HDR_GppString", null) ?: return null
        when(gppString){
            "DBABL~BVQqAAAAAg" -> return true
            "DBABL~BVQVAAAAAg" -> return false
        }
        CrashlyticsUtil.logException("AdConsentUtil isDataShareAllowed unknown gppString detected:$gppString, so using fallback")
        val model = GppModel(gppString)
        val usNatSection1 = model.getSection(UsNat.ID)
        val fieldsToCheck = arrayOf(UsNatField.SALE_OPT_OUT, UsNatField.SHARING_OPT_OUT, UsNatField.TARGETED_ADVERTISING_OPT_OUT)
        for (fieldName in fieldsToCheck) {
            if (usNatSection1.hasField(fieldName)) {
                val fieldValue = usNatSection1.getFieldValue(fieldName) ?: continue
                if (fieldValue == 2)
                    continue
                return false
            }
        }
        return true
    }

Recently I got a crash of this sort, reported via Crashlytics, on the line of "getFieldValue":

...
          Caused by com.iab.gpp.encoder.error.DecodingException: Unable to decode KnownChildSensitiveDataConsents
       at com.iab.gpp.encoder.bitstring.BitStringEncoder.decode(BitStringEncoder.java:49)
       at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:107)
       at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:16)
       at com.iab.gpp.encoder.segment.AbstractLazilyEncodableSegment.getFieldValue(AbstractLazilyEncodableSegment.java:31)
       at com.iab.gpp.encoder.section.AbstractLazilyEncodableSection.getFieldValue(AbstractLazilyEncodableSection.java:51)
          Caused by com.iab.gpp.encoder.datatype.SubstringException: java.lang.StringIndexOutOfBoundsException: begin 56, end 62, length 60
       at com.iab.gpp.encoder.datatype.EncodableFixedIntegerList.substring(EncodableFixedIntegerList.java:54)
       at com.iab.gpp.encoder.bitstring.BitStringEncoder.decode(BitStringEncoder.java:44)
       at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:107)
       at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:16)
       at com.iab.gpp.encoder.segment.AbstractLazilyEncodableSegment.getFieldValue(AbstractLazilyEncodableSegment.java:31)
       at com.iab.gpp.encoder.section.AbstractLazilyEncodableSection.getFieldValue(AbstractLazilyEncodableSection.java:51)
          Caused by java.lang.StringIndexOutOfBoundsException: begin 56, end 62, length 60
       at java.lang.String.checkBoundsBeginEnd(String.java:4519)
       at java.lang.String.substring(String.java:2537)
       at com.iab.gpp.encoder.datatype.EncodableFixedIntegerList.substring(EncodableFixedIntegerList.java:52)
       at com.iab.gpp.encoder.bitstring.BitStringEncoder.decode(BitStringEncoder.java:44)
       at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:107)
       at com.iab.gpp.encoder.segment.UsNatCoreSegment.decodeSegment(UsNatCoreSegment.java:16)
       at com.iab.gpp.encoder.segment.AbstractLazilyEncodableSegment.getFieldValue(AbstractLazilyEncodableSegment.java:31)
       at com.iab.gpp.encoder.section.AbstractLazilyEncodableSection.getFieldValue(AbstractLazilyEncodableSection.java:51)

Why does it occur?

Metadata

Metadata

Assignees

No one assigned

    Labels

    investigateTo validate if still an issuereviewedFor library maintainers only. Indicates that this issue was reviewed.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions