Skip to content

Protobuf exception - InvalidProtocolBufferException #1603

@remiwaw

Description

@remiwaw

Describe the bug
We’re seeing a lot of exceptions in Sentry. The stack traces don’t mention the GetStream library, but our app doesn’t use Protobuf directly — nor do any of our other dependencies.

Given the missing information in the stack trace (the triggering event may have happened on a different thread), I can’t be completely sure this is a GetStream issue. Could you verify whether other clients have experienced similar issues or have any insights on this?

Stacktrace:

androidx.datastore.preferences.protobuf.InvalidProtocolBufferException: Protocol message contained an invalid tag (zero).
    at androidx.datastore.preferences.protobuf.CodedInputStream$StreamDecoder.readTag(CodedInputStream.java:2107)
    at androidx.datastore.preferences.protobuf.CodedInputStreamReader.getFieldNumber(CodedInputStreamReader.java:82)
    at androidx.datastore.preferences.protobuf.MessageSchema.mergeFromHelper(MessageSchema.java:3913)
    at androidx.datastore.preferences.protobuf.MessageSchema.mergeFrom(MessageSchema.java:3895)
    at androidx.datastore.preferences.protobuf.GeneratedMessageLite.parsePartialFrom(GeneratedMessageLite.java:1648)
    at androidx.datastore.preferences.protobuf.GeneratedMessageLite.parseFrom(GeneratedMessageLite.java:1784)
    at androidx.datastore.preferences.PreferencesProto$PreferenceMap.parseFrom(PreferencesProto.java:196)
    at androidx.datastore.preferences.PreferencesMapCompat$Companion.readFrom(PreferencesMapCompat.kt:32)
    at androidx.datastore.preferences.core.PreferencesSerializer.readFrom(PreferencesSerializer.jvm.kt:46)
    at androidx.datastore.core.okio.OkioReadScope.readData$suspendImpl(OkioStorage.kt:180)
    at androidx.datastore.core.okio.OkioReadScope.readData(:0)
    at androidx.datastore.core.StorageConnectionKt$readData$2.invokeSuspend(StorageConnection.kt:74)
    at androidx.datastore.core.StorageConnectionKt$readData$2.invoke(:9)
    at androidx.datastore.core.StorageConnectionKt$readData$2.invoke(:10)
    at androidx.datastore.core.okio.OkioStorageConnection.readScope(OkioStorage.kt:113)
    at androidx.datastore.core.StorageConnectionKt.readData(StorageConnection.kt:74)
    at androidx.datastore.core.DataStoreImpl.readDataFromFileOrDefault(DataStoreImpl.kt:331)
    at androidx.datastore.core.DataStoreImpl.readDataOrHandleCorruption(DataStoreImpl.kt:373)
    at androidx.datastore.core.DataStoreImpl.access$readDataOrHandleCorruption(DataStoreImpl.kt:53)
    at androidx.datastore.core.DataStoreImpl$InitDataStore$doRun$initData$1.invokeSuspend(DataStoreImpl.kt:445)
    at androidx.datastore.core.DataStoreImpl$InitDataStore$doRun$initData$1.invoke(:8)
    at androidx.datastore.core.DataStoreImpl$InitDataStore$doRun$initData$1.invoke(:2)
    at androidx.datastore.core.SingleProcessCoordinator.lock(SingleProcessCoordinator.kt:41)
    at androidx.datastore.core.DataStoreImpl$InitDataStore.doRun(DataStoreImpl.kt:442)
    at androidx.datastore.core.RunOnce.runIfNeeded(DataStoreImpl.kt:505)
    at androidx.datastore.core.DataStoreImpl.readAndInitOrPropagateAndThrowFailure(DataStoreImpl.kt:274)
    at androidx.datastore.core.DataStoreImpl.handleUpdate(DataStoreImpl.kt:251)
    at androidx.datastore.core.DataStoreImpl.access$handleUpdate(DataStoreImpl.kt:53)
    at androidx.datastore.core.DataStoreImpl$writeActor$3.invokeSuspend(DataStoreImpl.kt:215)
    at androidx.datastore.core.DataStoreImpl$writeActor$3.invoke(:8)
    at androidx.datastore.core.DataStoreImpl$writeActor$3.invoke(:4)
    at androidx.datastore.core.SimpleActor$offer$2.invokeSuspend(SimpleActor.kt:121)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
    at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124)
    at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:820)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)

kotlinx.coroutines.internal.DiagnosticCoroutineContextException: null

androidx.datastore.core.CorruptionException: Unable to parse preferences proto.
    at androidx.datastore.preferences.PreferencesMapCompat$Companion.readFrom(PreferencesMapCompat.kt:34)
    at androidx.datastore.preferences.core.PreferencesSerializer.readFrom(PreferencesSerializer.jvm.kt:46)
    at androidx.datastore.core.okio.OkioReadScope.readData$suspendImpl(OkioStorage.kt:180)
    at androidx.datastore.core.okio.OkioReadScope.readData(:0)
    at androidx.datastore.core.StorageConnectionKt$readData$2.invokeSuspend(StorageConnection.kt:74)
    at androidx.datastore.core.StorageConnectionKt$readData$2.invoke(:9)
    at androidx.datastore.core.StorageConnectionKt$readData$2.invoke(:10)
    at androidx.datastore.core.okio.OkioStorageConnection.readScope(OkioStorage.kt:113)
    at androidx.datastore.core.StorageConnectionKt.readData(StorageConnection.kt:74)
    at androidx.datastore.core.DataStoreImpl.readDataFromFileOrDefault(DataStoreImpl.kt:331)
    at androidx.datastore.core.DataStoreImpl.readDataOrHandleCorruption(DataStoreImpl.kt:373)
    at androidx.datastore.core.DataStoreImpl.access$readDataOrHandleCorruption(DataStoreImpl.kt:53)
    at androidx.datastore.core.DataStoreImpl$InitDataStore$doRun$initData$1.invokeSuspend(DataStoreImpl.kt:445)
    at androidx.datastore.core.DataStoreImpl$InitDataStore$doRun$initData$1.invoke(:8)
    at androidx.datastore.core.DataStoreImpl$InitDataStore$doRun$initData$1.invoke(:2)
    at androidx.datastore.core.SingleProcessCoordinator.lock(SingleProcessCoordinator.kt:41)
    at androidx.datastore.core.DataStoreImpl$InitDataStore.doRun(DataStoreImpl.kt:442)
    at androidx.datastore.core.RunOnce.runIfNeeded(DataStoreImpl.kt:505)
    at androidx.datastore.core.DataStoreImpl.readAndInitOrPropagateAndThrowFailure(DataStoreImpl.kt:274)
    at androidx.datastore.core.DataStoreImpl.handleUpdate(DataStoreImpl.kt:251)
    at androidx.datastore.core.DataStoreImpl.access$handleUpdate(DataStoreImpl.kt:53)
    at androidx.datastore.core.DataStoreImpl$writeActor$3.invokeSuspend(DataStoreImpl.kt:215)
    at androidx.datastore.core.DataStoreImpl$writeActor$3.invoke(:8)
    at androidx.datastore.core.DataStoreImpl$writeActor$3.invoke(:4)
    at androidx.datastore.core.SimpleActor$offer$2.invokeSuspend(SimpleActor.kt:121)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:34)
    at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
    at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124)
    at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
    at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:820)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
    at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)

SDK version

  • 1.8.0

To Reproduce
Steps to reproduce the behavior:
Not reproducible on local devices

Expected behavior
Exception handled on GetStream side, without leaking to app.

Device:

  • Vendor and model: Various
  • Android version: Android 10-16

Screenshots
Not applicable

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions