[solved ]Recurring crash, cannot start K9 anymore

Today, I received a couple new emails. I had K9 fetch them, and it crashed. It has since crashed on every attempt to start it, including after a system reboot. (Debug trace follows at end of post)

I had this issue a while back, and I suspect a certain kind of email that causes a crash because of the way it is structured. Question is, can I let K9 forget the last few mails without being able to start it?

I have Android 8.0 on a Shiftphone 5me (February 2020 update) and K9 5.600 (suggested version on F-Droid)

Debug trace follows:

--------- beginning of main
06-12 22:00:35.984  6935  6962 I OpenGLRenderer: Initialized EGL, version 1.4
06-12 22:00:35.987  6935  6962 I ProgramBinary/Service: ProgramBinaryService client side disable debugging.
06-12 22:00:35.987  6935  6962 I ProgramBinary/Service: ProgramBinaryService client side disable binary content debugging.
06-12 22:00:36.070  6935  6935 W StaticLayout: maxLineHeight should not be -1.  maxLines:1 lineCount:1
06-12 22:00:36.070  6935  6935 W StaticLayout: maxLineHeight should not be -1.  maxLines:1 lineCount:1
--------- beginning of crash
06-12 22:00:36.171  6935  6935 E AndroidRuntime: FATAL EXCEPTION: main
06-12 22:00:36.171  6935  6935 E AndroidRuntime: Process: com.fsck.k9, PID: 6935
06-12 22:00:36.171  6935  6935 E AndroidRuntime: java.lang.IndexOutOfBoundsException
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.graphics.Paint.getRunAdvance(Paint.java:2632)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.text.TextLine.handleText(TextLine.java:824)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.text.TextLine.handleRun(TextLine.java:1056)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.text.TextLine.drawRun(TextLine.java:475)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.text.TextLine.draw(TextLine.java:252)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.text.Layout.drawText(Layout.java:545)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.text.Layout.draw(Layout.java:289)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.widget.TextView.onDraw(TextView.java:6972)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19380)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.updateDisplayListIfDirty(View.java:18287)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19092)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.drawChild(ViewGroup.java:4340)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4126)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.updateDisplayListIfDirty(View.java:18275)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19092)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.drawChild(ViewGroup.java:4340)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4126)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19392)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.updateDisplayListIfDirty(View.java:18287)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19092)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.drawChild(ViewGroup.java:4340)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.widget.ListView.drawChild(ListView.java:3625)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4126)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.widget.AbsListView.dispatchDraw(AbsListView.java:2789)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.widget.ListView.dispatchDraw(ListView.java:3620)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19392)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.widget.AbsListView.draw(AbsListView.java:4705)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.updateDisplayListIfDirty(View.java:18287)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19092)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.drawChild(ViewGroup.java:4340)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4126)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19392)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.updateDisplayListIfDirty(View.java:18287)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19092)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.drawChild(ViewGroup.java:4340)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4126)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.updateDisplayListIfDirty(View.java:18275)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19092)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.drawChild(ViewGroup.java:4340)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4126)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.updateDisplayListIfDirty(View.java:18275)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19092)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.drawChild(ViewGroup.java:4340)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4126)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.updateDisplayListIfDirty(View.java:18275)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19092)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.drawChild(ViewGroup.java:4340)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4126)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19392)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at com.android.internal.widget.ActionBarOverlayLayout.draw(ActionBarOverlayLayout.java:505)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.updateDisplayListIfDirty(View.java:18287)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19092)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.drawChild(ViewGroup.java:4340)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4126)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at com.android.internal.policy.DecorView.dispatchDraw(DecorView.java:821)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.draw(View.java:19392)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at com.android.internal.policy.DecorView.draw(DecorView.java:807)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.View.updateDisplayListIfDirty(View.java:18287)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:643)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:649)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:757)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewRootImpl.draw(ViewRootImpl.java:3380)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3182)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2703)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1602)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:7407)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:948)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.Choreographer.doCallbacks(Choreographer.java:750)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.Choreographer.doFrame(Choreographer.java:682)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:934)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:869)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:101)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:206)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:6760)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
06-12 22:00:36.171  6935  6935 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:845)

From the stack trace this looks like a bug in the Android version you’re using. I’m guessing this happens when the message list is displayed.

It might be related to exactly how some text is laid out. So you could try changing the device orientation and see if this is enough to not trigger the bug. Then delete the messages you suspect are responsible for this.

If you have automatic sync enabled you could remove the messages from the server and wait for the app to refresh in the background. I believe this won’t happen automatically if the app has crashed. You’ll probably have to reboot the device and wait for the mail sync to happen (don’t manually open the app).

If that doesn’t work you’ll probably have to remove all data (‘clear storage’ in Android’s ‘app info’ screen) and set up your account again.

1 Like

Very cool! Changing the screen orientation did the trick. Could delete the culprit (spam anyway), and things work again. Just happy I disabled notification banners, as these crash the Android UI and force a factory reset of the device (been there…)

1 Like