noties / Markwon

Android markdown library (no WebView)
https://noties.io/Markwon/
Apache License 2.0
2.76k stars 313 forks source link

IndexOutOfBoundsException in HeadingEditHandler #389

Open Unpublished opened 2 years ago

Unpublished commented 2 years ago

Given following markdown text:

Repro
=======

https://test.test/likfkfjfjfjfkfkfkfkfknfnnfkfnnf

# Test Test
## Test
## 

Inserting a character after the second '## ' results in:

java.lang.RuntimeException: java.lang.IndexOutOfBoundsException: setSpan (92 ... 95) ends beyond length 92
    at io.noties.markwon.editor.MarkwonEditorTextWatcher$WithPreRender$2$2.run(MarkwonEditorTextWatcher.java:168)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.app.ActivityThread.main(ActivityThread.java:6882)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
Caused by: java.lang.IndexOutOfBoundsException: setSpan (92 ... 95) ends beyond length 92
    at android.text.SpannableStringBuilder.checkRange(SpannableStringBuilder.java:1321)
    at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:682)
    at android.text.SpannableStringBuilder.setSpan(SpannableStringBuilder.java:674)
    at io.noties.markwon.editor.MarkwonEditorImpl$RecordingSpannableStringBuilder.setSpan(MarkwonEditorImpl.java:203)
    at it.niedermann.android.markdown.markwon.handler.HeadingEditHandler.handleMarkdownSpan(HeadingEditHandler.java:69)
    at it.niedermann.android.markdown.markwon.handler.HeadingEditHandler.handleMarkdownSpan(HeadingEditHandler.java:14)
    at io.noties.markwon.editor.MarkwonEditor$SpansHandlerImpl.handle(MarkwonEditor.java:185)
    at io.noties.markwon.editor.MarkwonEditorImpl.process(MarkwonEditorImpl.java:85)
    at io.noties.markwon.editor.MarkwonEditorImpl.preRender(MarkwonEditorImpl.java:157)
    at io.noties.markwon.editor.MarkwonEditorTextWatcher$WithPreRender$2.run(MarkwonEditorTextWatcher.java:137)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:764)

Expected behavior: It should be possible to type (note the additional 't'):

Repro
=======

https://test.test/likfkfjfjfjfkfkfkfkfknfnnfkfnnf

# Test Test
## Test
## t