Skip to content

App crashes with setSpan IndexOutOfBoundsException #1106

@prashantsaini1

Description

@prashantsaini1

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions