hanggrian / socialview

Android TextView and EditText with hashtag, mention, and hyperlink support
http://hanggrian.com/socialview/
Apache License 2.0
323 stars 81 forks source link

patch index out of bound exception #68

Closed virengujariya closed 3 years ago

virengujariya commented 5 years ago

What is the crash?

Fatal Exception: java.lang.IndexOutOfBoundsException
charAt: 73 >= length 73
android.text.SpannableStringBuilder.charAt (SpannableStringBuilder.java:128)
android.text.CharSequenceCharacterIterator.current (CharSequenceCharacterIterator.java:58)
android.text.CharSequenceCharacterIterator.setIndex (CharSequenceCharacterIterator.java:83)
android.icu.text.RuleBasedBreakIterator.CISetIndex32 (RuleBasedBreakIterator.java:1126)
android.icu.text.RuleBasedBreakIterator.isBoundary (RuleBasedBreakIterator.java:503)
android.text.method.WordIterator.isBoundary (WordIterator.java:95)
android.widget.Editor$SelectionHandleView.positionAtCursorOffset (Editor.java:5467)
android.widget.Editor$HandleView.invalidate (Editor.java:4577)
android.widget.Editor$SelectionModifierCursorController.invalidateHandles (Editor.java:6145)
android.widget.Editor.invalidateHandlesAndActionMode (Editor.java:1985)
android.widget.TextView.spanChange (TextView.java:9958)
android.widget.TextView$ChangeWatcher.onSpanRemoved (TextView.java:12580)
android.text.SpannableStringBuilder.sendSpanRemoved (SpannableStringBuilder.java:1307)
android.text.SpannableStringBuilder.removeSpan (SpannableStringBuilder.java:505)
android.text.SpannableStringBuilder.removeSpan (SpannableStringBuilder.java:814)
android.text.SpannableStringBuilder.removeSpan (SpannableStringBuilder.java:802)
com.hendraanggrian.widget.a.a.a (SocialViewImpl.kt:196)
com.hendraanggrian.widget.a.a$f.onTextChanged (SocialViewImpl.kt:67)
android.widget.TextView.sendOnTextChanged (TextView.java:9786)
android.widget.TextView.handleTextChanged (TextView.java:9883)
android.widget.TextView$ChangeWatcher.onTextChanged (TextView.java:12541)
android.text.SpannableStringBuilder.sendTextChanged (SpannableStringBuilder.java:1278)
android.text.SpannableStringBuilder.replace (SpannableStringBuilder.java:590)
android.text.SpannableStringBuilder.delete (SpannableStringBuilder.java:234)
android.text.SpannableStringBuilder.delete (SpannableStringBuilder.java:41)
android.widget.TextView.deleteText_internal (TextView.java:12050)
android.widget.TextView.onTextContextMenuItem (TextView.java:11316)
android.widget.Editor$TextActionModeCallback.onActionItemClicked (Editor.java:4181)
com.android.internal.policy.DecorView$ActionModeCallback2Wrapper.onActionItemClicked (DecorView.java:2421)
com.android.internal.view.FloatingActionMode$3.onMenuItemSelected (FloatingActionMode.java:98)
com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected (MenuBuilder.java:776)
com.android.internal.view.menu.MenuItemImpl.invoke (MenuItemImpl.java:148)
com.android.internal.view.menu.MenuBuilder.performItemAction (MenuBuilder.java:923)
com.android.internal.view.menu.MenuBuilder.performItemAction (MenuBuilder.java:913)
com.android.internal.view.FloatingActionMode.lambda$setFloatingToolbar$0 (FloatingActionMode.java:123)
com.android.internal.view.-$$Lambda$FloatingActionMode$LU5MpPuKYDtwlFAuYhXYfzgLNLE.onMenuItemClick (Unknown Source:2)
com.android.internal.widget.FloatingToolbar$FloatingToolbarPopup$2.onClick (FloatingToolbar.java:443)
android.view.View.performClick (View.java:6669)
android.view.View.performClickInternal (View.java:6638)
android.view.View.access$3100 (View.java:789)
android.view.View$PerformClick.run (View.java:26145)
android.os.Handler.handleCallback (Handler.java:873)
android.os.Handler.dispatchMessage (Handler.java:99)
android.os.Looper.loop (Looper.java:193)
android.app.ActivityThread.main (ActivityThread.java:6863)
java.lang.reflect.Method.invoke (Method.java)
com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:537)
com.android.internal.os.ZygoteInit.main (ZygoteInit.java:858)

Reproduction steps

Use Samsung device (preferred one with OS 9, tested on Samsung Galaxy S8)

What is fix?

Not really an issue on our end so just swallow IndexOutOfBoundsException

hanggrian commented 3 years ago

I think I could get behind wrapping dangerous lines in try block, only if we're catching IndexOutOfBoundsException. But unfortunately the source code has changed so much to the point where SocialViewImpl and the rest of internal package is no longer available.

If you could submit a new one with newer source, I would merge it as soon as possible.