TrianguloY / UrlChecker

Android app by TrianguloY: URLCheck
Other
891 stars 52 forks source link

UrlChecker crashes when opening app #72

Closed PabloOQ closed 2 years ago

PabloOQ commented 2 years ago

Describe the bug UrlChecker crashes when opening a link to firefox focus two consecutive times

To Reproduce Steps to reproduce the behavior:

  1. Click on any link, the one from the main dialog of UrlChecker works
  2. Open it in firefox focus
  3. Close firefox focus and go back to the previous app
  4. Click on any link
  5. Open it in firefox focus
  6. UrlChecker crashes

Expected behavior Firefox focus opens correctly

System Info:

Additional context The app crashes because of this method. Being more specific, in this line I have been able to reproduce this opening Youtube links too.

Log:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.trianguloy.urlchecker, PID: 13676
    java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
        at java.util.ArrayList.set(ArrayList.java:453)
        at java.util.Collections.swap(Collections.java:544)
        at com.trianguloy.urlchecker.utilities.LastOpened.usedPackage(LastOpened.java:76)
        at com.trianguloy.urlchecker.modules.list.OpenDialog.openUrl(OpenModule.java:210)
        at com.trianguloy.urlchecker.modules.list.OpenDialog.onMenuItemClick(OpenModule.java:160)
        at android.widget.PopupMenu$1.onMenuItemSelected(PopupMenu.java:108)
        at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:787)
        at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:151)
        at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:934)
        at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:924)
        at com.android.internal.view.menu.MenuPopup.onItemClick(MenuPopup.java:128)
        at android.widget.AdapterView.performItemClick(AdapterView.java:330)
        at android.widget.AbsListView.performItemClick(AbsListView.java:1187)
        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3179)
        at android.widget.AbsListView.onTouchUp(AbsListView.java:4109)
        at android.widget.AbsListView.onTouchEvent(AbsListView.java:3867)
        at android.widget.DropDownListView.onTouchEvent(DropDownListView.java:116)
        at android.view.View.dispatchTouchEvent(View.java:14309)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3112)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2785)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3118)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2799)
        at android.widget.PopupWindow$PopupDecorView.dispatchTouchEvent(PopupWindow.java:2553)
        at android.view.View.dispatchPointerEvent(View.java:14568)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6016)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5819)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5310)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5485)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5542)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5367)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5333)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5341)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5314)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8080)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8031)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:7992)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8203)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:220)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:335)
        at android.os.Looper.loop(Looper.java:183)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
TrianguloY commented 2 years ago

https://en.m.wikipedia.org/wiki/Off-by-one_error

And I remember thinking about that condition thoroughly...seems not

(Super detailed report. Thanks!)