This is not a serious bug but be cautious!
Created by: jay2013
Bug description
We notice that your app use com.fasterxml.jackson.databind as an external library. In this library, it use java7's new feature "java.lang.Throwable: void addSuppressed(java.lang.Throwable)" and this API is added into android SDK since level 19. your app's minSDKVersion is 9, so it may cause your app crash when run into these api.
there is one possible reachable path from your codes: --><org.smssecure.smssecure.notifications.MasterSecretBroadcastReceiver: void onReceive(android.content.Context,android.content.Intent)> --><org.smssecure.smssecure.notifications.MarkReadReceiver: void onReceive(android.content.Context,android.content.Intent,org.smssecure.smssecure.crypto.MasterSecret)> --><org.smssecure.smssecure.notifications.MarkReadReceiver$1: java.lang.Object doInBackground(java.lang.Object[])> --><org.smssecure.smssecure.notifications.MarkReadReceiver$1: java.lang.Void doInBackground(java.lang.Void[])> --><org.smssecure.smssecure.notifications.MessageNotifier: void updateNotification(android.content.Context,org.smssecure.smssecure.crypto.MasterSecret)> --><org.smssecure.smssecure.notifications.MessageNotifier: void updateNotificationWithFlags(android.content.Context,org.smssecure.smssecure.crypto.MasterSecret,int)> --><org.smssecure.smssecure.notifications.MessageNotifier: void updateNotification(android.content.Context,org.smssecure.smssecure.crypto.MasterSecret,int,int)> --><org.smssecure.smssecure.notifications.MessageNotifier: org.smssecure.smssecure.notifications.NotificationState constructNotificationState(android.content.Context,org.smssecure.smssecure.crypto.MasterSecret,android.database.Cursor)> --><org.smssecure.smssecure.database.MmsSmsDatabase$Reader: org.smssecure.smssecure.database.model.MessageRecord getNext()> --><org.smssecure.smssecure.database.MmsSmsDatabase$Reader: org.smssecure.smssecure.database.model.MessageRecord getCurrent()> --><org.smssecure.smssecure.database.SmsDatabase$Reader: org.smssecure.smssecure.database.model.SmsMessageRecord getCurrent()> --><org.smssecure.smssecure.database.SmsDatabase$Reader: java.util.List getMismatches(java.lang.String)> --><org.smssecure.smssecure.util.JsonUtils: java.lang.Object fromJson(java.lang.String,java.lang.Class)> --><com.fasterxml.jackson.databind.ObjectMapper: java.lang.Object readValue(java.lang.String,java.lang.Class)> --><com.fasterxml.jackson.databind.ObjectMapper: java.lang.Object _readMapAndClose(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.JavaType)> --><com.fasterxml.jackson.databind.deser.impl.BeanAsArrayDeserializer: java.lang.Object deserialize(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext)> --><com.fasterxml.jackson.databind.deser.impl.BeanAsArrayDeserializer: java.lang.Object _deserializeNonVanilla(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext)> --><com.fasterxml.jackson.databind.deser.BeanDeserializerBase: java.lang.Object deserializeFromObjectUsingNonDefault(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext)> --><com.fasterxml.jackson.databind.deser.impl.BeanAsArrayDeserializer: java.lang.Object _deserializeUsingPropertyBased(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext)> --><com.fasterxml.jackson.databind.deser.impl.InnerClassProperty: void deserializeAndSet(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext,java.lang.Object)> --><com.fasterxml.jackson.databind.deser.BeanDeserializer: java.lang.Object deserialize(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext,java.lang.Object)> --><com.fasterxml.jackson.databind.deser.BeanDeserializer: java.lang.Object deserializeWithExternalTypeId(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext,java.lang.Object)> --><com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler: java.lang.Object complete(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext,java.lang.Object)> --><com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler: void _deserializeAndSet(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext,java.lang.Object,int,java.lang.String)> --><com.fasterxml.jackson.databind.util.TokenBuffer: void copyCurrentStructure(com.fasterxml.jackson.core.JsonParser)> --><com.fasterxml.jackson.databind.util.TokenBuffer: void copyCurrentEvent(com.fasterxml.jackson.core.JsonParser)> --><com.fasterxml.jackson.databind.util.TokenBuffer: void writeObject(java.lang.Object)> --><com.fasterxml.jackson.databind.ObjectMapper: void writeValue(com.fasterxml.jackson.core.JsonGenerator,java.lang.Object)> --><com.fasterxml.jackson.databind.ObjectMapper: void _writeCloseableValue(com.fasterxml.jackson.core.JsonGenerator,java.lang.Object,com.fasterxml.jackson.databind.SerializationConfig)> --><com.fasterxml.jackson.databind.util.ClassUtil: void closeOnFailAndThrowAsIAE(com.fasterxml.jackson.core.JsonGenerator,java.io.Closeable,java.lang.Exception)> reachable path 5: --><dummyMainClass: void dummyMainMethod(java.lang.String[])> --><org.smssecure.smssecure.notifications.MasterSecretBroadcastReceiver: void onReceive(android.content.Context,android.content.Intent)> --><org.smssecure.smssecure.notifications.MarkReadReceiver: void onReceive(android.content.Context,android.content.Intent,org.smssecure.smssecure.crypto.MasterSecret)> --><org.smssecure.smssecure.notifications.MarkReadReceiver$1: java.lang.Object doInBackground(java.lang.Object[])> --><org.smssecure.smssecure.notifications.MarkReadReceiver$1: java.lang.Void doInBackground(java.lang.Void[])> --><org.smssecure.smssecure.notifications.MessageNotifier: void updateNotification(android.content.Context,org.smssecure.smssecure.crypto.MasterSecret)> --><org.smssecure.smssecure.notifications.MessageNotifier: void updateNotificationWithFlags(android.content.Context,org.smssecure.smssecure.crypto.MasterSecret,int)> --><org.smssecure.smssecure.notifications.MessageNotifier: void updateNotification(android.content.Context,org.smssecure.smssecure.crypto.MasterSecret,int,int)> --><org.smssecure.smssecure.notifications.MessageNotifier: org.smssecure.smssecure.notifications.NotificationState constructNotificationState(android.content.Context,org.smssecure.smssecure.crypto.MasterSecret,android.database.Cursor)> --><org.smssecure.smssecure.database.MmsSmsDatabase$Reader: org.smssecure.smssecure.database.model.MessageRecord getNext()> --><org.smssecure.smssecure.database.MmsSmsDatabase$Reader: org.smssecure.smssecure.database.model.MessageRecord getCurrent()> --><org.smssecure.smssecure.database.SmsDatabase$Reader: org.smssecure.smssecure.database.model.SmsMessageRecord getCurrent()> --><org.smssecure.smssecure.database.SmsDatabase$Reader: java.util.List getMismatches(java.lang.String)> --><org.smssecure.smssecure.util.JsonUtils: java.lang.Object fromJson(java.lang.String,java.lang.Class)> --><com.fasterxml.jackson.databind.ObjectMapper: java.lang.Object readValue(java.lang.String,java.lang.Class)> --><com.fasterxml.jackson.databind.ObjectMapper: java.lang.Object _readMapAndClose(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.JavaType)> --><com.fasterxml.jackson.databind.deser.impl.BeanAsArrayDeserializer: java.lang.Object deserialize(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext)> --><com.fasterxml.jackson.databind.deser.impl.BeanAsArrayDeserializer: java.lang.Object _deserializeNonVanilla(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext)> --><com.fasterxml.jackson.databind.deser.BeanDeserializerBase: java.lang.Object deserializeFromObjectUsingNonDefault(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext)> --><com.fasterxml.jackson.databind.deser.impl.BeanAsArrayDeserializer: java.lang.Object _deserializeUsingPropertyBased(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext)> --><com.fasterxml.jackson.databind.deser.impl.InnerClassProperty: void deserializeAndSet(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext,java.lang.Object)> --><com.fasterxml.jackson.databind.deser.BeanDeserializer: java.lang.Object deserialize(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext,java.lang.Object)> --><com.fasterxml.jackson.databind.deser.BeanDeserializer: java.lang.Object deserializeWithExternalTypeId(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext,java.lang.Object)> --><com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler: java.lang.Object complete(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext,java.lang.Object)> --><com.fasterxml.jackson.databind.deser.impl.ExternalTypeHandler: void _deserializeAndSet(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.DeserializationContext,java.lang.Object,int,java.lang.String)> --><com.fasterxml.jackson.databind.util.TokenBuffer: void copyCurrentStructure(com.fasterxml.jackson.core.JsonParser)> --><com.fasterxml.jackson.databind.util.TokenBuffer: void copyCurrentEvent(com.fasterxml.jackson.core.JsonParser)> --><com.fasterxml.jackson.databind.util.TokenBuffer: void writeObject(java.lang.Object)> --><com.fasterxml.jackson.databind.ObjectMapper: void writeValue(com.fasterxml.jackson.core.JsonGenerator,java.lang.Object)> --><com.fasterxml.jackson.databind.ObjectMapper: void _writeCloseableValue(com.fasterxml.jackson.core.JsonGenerator,java.lang.Object,com.fasterxml.jackson.databind.SerializationConfig)> --><com.fasterxml.jackson.databind.util.ClassUtil: void closeOnFailAndThrowAsIAE(com.fasterxml.jackson.core.JsonGenerator,java.io.Closeable,java.lang.Exception)>
You can de-compile your apk file and in com.fasterxml.jackson.databind.ObjectMapper.class file, the method _readMapAndClose(com.fasterxml.jackson.core.JsonParser,com.fasterxml.jackson.databind.JavaType) method seems really contain api call to "java.lang.Throwable: void addSuppressed(java.lang.Throwable)".
So be cautious about this.
If this did affect your app, please let me know, this is actually detected by our tool. Thanks very much.
best regards,
Dongjie He
How to reproduce
I don't know how to reproduce it.
Actual result: don't know Expected result: don't know
Screenshots
do not have one.
Device info
- Device:
- Android version: [11,16,17,18]
- Silence version: