AztecEditor-Android icon indicating copy to clipboard operation
AztecEditor-Android copied to clipboard

App crashes with setSpan IndexOutOfBoundsException

Open prashantsaini1 opened this issue 7 months ago • 0 comments

Recently we saw over 10 crashes on Firebase, with this stack trace.

  • Device - Samsung S23 Ultra.
  • OS - Android 15.
  • AztecEditor v1.6.2.
Fatal Exception: java.lang.IndexOutOfBoundsException: setSpan (120 ... 119) has end before start
       at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1319)
       at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:685)
       at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:677)
       at androidx.emoji2.text.SpannableBuilder.setSpan(SpannableBuilder.java:140)
       at org.wordpress.aztec.util.SpanWrapper.setSpanOrLogError(SpanWrapper.kt:42)
       at org.wordpress.aztec.util.SpanWrapper.setStart(SpanWrapper.kt:28)
       at org.wordpress.aztec.handlers.ListItemHandler.handleNewlineAtStartOfBlock(ListItemHandler.kt:23)
       at org.wordpress.aztec.handlers.BlockHandler.handleTextChanged(BlockHandler.kt:62)
       at org.wordpress.aztec.watchers.BlockElementWatcher.onTextChanged(BlockElementWatcher.kt:81)
       at android.widget.TextView.sendOnTextChanged(TextView.java:13461)
       at android.widget.TextView.handleTextChanged(TextView.java:13590)
       at android.widget.TextView$ChangeWatcher.onTextChanged(TextView.java:17363)
       at android.text.SpannableStringBuilder.sendTextChanged(SpannableStringBuilder.java:1268)
       at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:577)
       at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:315)
       at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:508)
       at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:305)
       at androidx.emoji2.text.SpannableBuilder.replace(SpannableBuilder.java:49)
       at android.view.inputmethod.BaseInputConnection.replaceTextInternal(BaseInputConnection.java:1027)
       at android.view.inputmethod.BaseInputConnection.replaceText(BaseInputConnection.java:962)
       at android.view.inputmethod.BaseInputConnection.commitText(BaseInputConnection.java:241)
       at com.android.internal.inputmethod.EditableInputConnection.commitText(EditableInputConnection.java:220)
       at android.view.inputmethod.InputConnectionWrapper.commitText(InputConnectionWrapper.java:207)
       at android.view.inputmethod.RemoteInputConnectionImpl.lambda$commitText$17(RemoteInputConnectionImpl.java:635)
       at android.view.inputmethod.RemoteInputConnectionImpl.$r8$lambda$jNtA8MXobPnaECkNr8D9WTYrxk0()
       at android.view.inputmethod.RemoteInputConnectionImpl$$ExternalSyntheticLambda46.run(D8$$SyntheticClass)
       at android.os.Handler.handleCallback(Handler.java:959)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loopOnce(Looper.java:257)
       at android.os.Looper.loop(Looper.java:342)
       at android.app.ActivityThread.main(ActivityThread.java:9634)
       at java.lang.reflect.Method.invoke(Method.java)
       at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:619)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)

It looks like the previous fixes around the setSpanOrLogError leaks in some edge cases. For now, we would like to see a quick-fix so our users do not face crashes, and then the root-cause with its proper fix in long run.

prashantsaini1 avatar Jun 25 '25 05:06 prashantsaini1