{"record":{"id":"57a8d67224689fc0","repo":"microg/GmsCore","slug":"overread-allowed-size-end","errorCode":null,"errorMessage":"Overread allowed size end=","messagePattern":"Overread allowed size end=","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java","lineNumber":102,"sourceCode":"        int end = SafeParcelReader.readObjectHeader(parcel);\n        while (parcel.dataPosition() < end) {\n            int header = SafeParcelReader.readHeader(parcel);\n            int fieldId = SafeParcelReader.getFieldId(header);\n            ClassDescriptor.FieldDescriptor fieldDescriptor = descriptor.fields.get(fieldId);\n            if (fieldDescriptor == null) {\n                Log.d(TAG, String.format(\"Unknown field id %d in %s, skipping.\", fieldId, descriptor.tClass.getName()));\n                SafeParcelReader.skip(parcel, header);\n            } else {\n                try {\n                    readField(object, parcel, header, fieldDescriptor);\n                } catch (Exception e) {\n                    Log.w(TAG, String.format(\"Error reading field: %d of type %s in %s, skipping.\", fieldId, fieldDescriptor.type, descriptor.tClass.getName()), e);\n                    SafeParcelReader.skip(parcel, header);\n                }\n            }\n        }\n        if (parcel.dataPosition() > end) {\n            throw new RuntimeException(\"Overread allowed size end=\" + end);\n        }\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    private static Parcelable.Creator<Parcelable> getCreator(Field field) {\n        Class<?> clazz = field.getType();\n        if (clazz.isArray()) {\n            clazz = clazz.getComponentType();\n        }\n        if (clazz != null && Parcelable.class.isAssignableFrom(clazz)) {\n            return getCreator((Class<? extends Parcelable>) clazz);\n        }\n        throw new RuntimeException(clazz + \" is not an Parcelable\");\n    }\n\n    @SuppressWarnings(\"unchecked\")\n    public static Parcelable.Creator<Parcelable> getCreator(Class<? extends Parcelable> clazz) {\n        try {","sourceCodeStart":84,"sourceCodeEnd":120,"githubUrl":"https://github.com/microg/GmsCore/blob/157c9d86ac46c195a86c2f15ab55c84036223f95/play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java#L84-L120","documentation":"Corrupt-parcel guard in SafeParcelReflectionUtil.readObject: after consuming all recognized fields, the parcel's data position exceeds the end offset declared in the object header, so a field was over-read and the stream is inconsistent. The allowed end offset is appended.","triggerScenarios":"Thrown at play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java:102 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure writer and reader agree on the field layout (field ids, sizes, types) of the parcelled class","Invalidate stored/transmitted parcels produced by an incompatible version"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"157c9d86ac46c195a86c2f15ab55c84036223f95","analyzedAt":"2026-09-06T17:27:33.892Z","contentChangedAt":"2026-09-06T17:27:33.892Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}