ministero-salute / it-dgc-verificac19-sdk-android

Digital Covid Certificate SDK
Apache License 2.0
57 stars 30 forks source link

Crash in debug #101

Closed giga89 closed 1 year ago

giga89 commented 2 years ago

Buonasera a tutti, sto usando l'SDK 1.1.1 per la mia app Android e ho un problema quando la uso in debug (build variants debug sia per decoder che per dgc-sdk). Quando chiamo la vm.decode ho il seguente crash:

--------- beginning of crash 2022-01-05 17:27:27.119 20463-20463/com.zucchetti.AccessC19 E/AndroidRuntime: FATAL EXCEPTION: main Process: com.zucchetti.AccessC19, PID: 20463 java.lang.NullPointerException at it.ministerodellasalute.verificaC19sdk.data.VerifierRepositoryImpl.getCertificate(VerifierRepositoryImpl.kt:160) at it.ministerodellasalute.verificaC19sdk.model.VerificationViewModel$decode$1$1.invokeSuspend(VerificationViewModel.kt:185) at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106) at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678) at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)

Cosa potrebbe essere? Grazie

rawmain commented 2 years ago

Buonasera @giga89

ho un problema quando la uso in debug (build variants debug sia per decoder che per dgc-sdk). Quando chiamo la vm.decode ho il seguente crash: [...] PID: 20463 java.lang.NullPointerException at it.ministerodellasalute.verificaC19sdk.data.VerifierRepositoryImpl.getCertificate(VerifierRepositoryImpl.kt:160)

La runtime exception è relativa a key e viene sollevata infatti in VerifierRepositoryImpl nel richiamo della funzione getCertificate :

        val key = db.keyDao().getById(kid)
        return if (key != null) keyStoreCryptor.decrypt(key.key)!!
            .base64ToX509Certificate() else null

Se peraltro non riscontrassi la medesima runtime exception in release variant, ma solo in debug, potrebbe essere una casistica simile a quella della issue #88.

In tale issue veniva riscontrata una simile exception iniziale, in virtù di errata gestione garbage collection, che comportava la non-chiusura corretta dei sync VerifierRepositoryImpl: Cert KID verified & del DB Room per tabella KID al 1° avvio (completati OK poi a riapertura app).

Situazione, che non veniva riscontrata invece in release build del medesimo progetto specifico, in virtù di minore overhead in esecuzione. Tantomeno in debug build della whitelabel-app VerificaC19, considerando la natura basilare del suo codice app (ossia di sola interfaccia/UI - senza ulteriori funzioni).


Potresti quindi riverificare la situazione con le seguenti 2 condizioni :

  1. Abilita i check StrictMode.

Per quanto riguarda app, che integrano DGC-SDK, è già sufficiente l'aggiunta del set predefinito di policy di controllo al constructor dell'application class -> prendendo ad esempio la whitelabel-app VerificaC19 :

[...]

import android.os.StrictMode

[...]

    override fun onCreate() {
        if (BuildConfig.BUILD_TYPE == "debug") {
            StrictMode.enableDefaults()
        }
        super.onCreate()
        setWorkManager()
    }

Ciò consente infatti di vedere da logcat anche situazioni d'errore relative a gestione/leak della memoria, che in log base compaiono però come warning con indicazione generica.

  1. Una volta impostato StrictMode, compila nuovamente il progetto in debug variant & raccogli il log intero di esecuzione su real-device (non emulatore. onde evitare le questioni di diversa gestione VM per heap & garbage collection).

In questo modo dovresti avere un quadro preciso per gli eventi W/E anteriori all'exception con il tuo progetto.

stale[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.