microg/GmsCore · error · RuntimeException
Overread allowed size end=
Error message
Overread allowed size end=
What it means
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.
Source
Thrown at play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java:102
int end = SafeParcelReader.readObjectHeader(parcel);
while (parcel.dataPosition() < end) {
int header = SafeParcelReader.readHeader(parcel);
int fieldId = SafeParcelReader.getFieldId(header);
ClassDescriptor.FieldDescriptor fieldDescriptor = descriptor.fields.get(fieldId);
if (fieldDescriptor == null) {
Log.d(TAG, String.format("Unknown field id %d in %s, skipping.", fieldId, descriptor.tClass.getName()));
SafeParcelReader.skip(parcel, header);
} else {
try {
readField(object, parcel, header, fieldDescriptor);
} catch (Exception e) {
Log.w(TAG, String.format("Error reading field: %d of type %s in %s, skipping.", fieldId, fieldDescriptor.type, descriptor.tClass.getName()), e);
SafeParcelReader.skip(parcel, header);
}
}
}
if (parcel.dataPosition() > end) {
throw new RuntimeException("Overread allowed size end=" + end);
}
}
@SuppressWarnings("unchecked")
private static Parcelable.Creator<Parcelable> getCreator(Field field) {
Class<?> clazz = field.getType();
if (clazz.isArray()) {
clazz = clazz.getComponentType();
}
if (clazz != null && Parcelable.class.isAssignableFrom(clazz)) {
return getCreator((Class<? extends Parcelable>) clazz);
}
throw new RuntimeException(clazz + " is not an Parcelable");
}
@SuppressWarnings("unchecked")
public static Parcelable.Creator<Parcelable> getCreator(Class<? extends Parcelable> clazz) {
try {View on GitHub (pinned to 157c9d86ac)
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
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at play-services-basement/src/main/java/org/microg/safeparcel/SafeParcelReflectionUtil.java:102 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of microg/GmsCore@157c9d86ac (2026-09-06).
Data as JSON: /api/errors/57a8d67224689fc0.
Report an issue: GitHub.