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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions