ghidra: Uncaught exception! index or length is negative
Describe the bug
index or length is negative
java.lang.IndexOutOfBoundsException: index or length is negative
at java.desktop/javax.swing.DefaultListSelectionModel.insertIndexInterval(DefaultListSelectionModel.java:656)
at java.desktop/javax.swing.JTable.tableRowsInserted(JTable.java:4539)
at java.desktop/javax.swing.JTable.tableChanged(JTable.java:4475)
at docking.widgets.table.GTable.tableChanged(GTable.java:170)
at docking.widgets.table.TableModelWrapper.fireTableChanged(TableModelWrapper.java:119)
at docking.widgets.table.GTableFilterPanel$TranslatingTableModelListener.tableChanged(GTableFilterPanel.java:909)
at java.desktop/javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:302)
at docking.widgets.table.AbstractSortedTableModel.fireTableChanged(AbstractSortedTableModel.java:113)
at ghidra.app.plugin.core.osgi.BundleStatusTableModel.access$001(BundleStatusTableModel.java:45)
at ghidra.app.plugin.core.osgi.BundleStatusTableModel.lambda$fireTableChanged$0(BundleStatusTableModel.java:98)
at ghidra.util.Swing.runIfSwingOrRunLater(Swing.java:124)
at ghidra.app.plugin.core.osgi.BundleStatusTableModel.fireTableChanged(BundleStatusTableModel.java:98)
at java.desktop/javax.swing.table.AbstractTableModel.fireTableRowsInserted(AbstractTableModel.java:237)
at ghidra.app.plugin.core.osgi.BundleStatusTableModel$MyBundleHostListener.lambda$bundlesAdded$3(BundleStatusTableModel.java:340)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191)
at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236)
at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234)
at java.desktop/java.awt.Dialog.show(Dialog.java:1079)
at java.desktop/java.awt.Component.show(Component.java:1728)
at java.desktop/java.awt.Component.setVisible(Component.java:1675)
at java.desktop/java.awt.Window.setVisible(Window.java:1036)
at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1015)
at docking.DockingDialog.setVisible(DockingDialog.java:353)
at docking.DockingWindowManager.lambda$doShowDialog$6(DockingWindowManager.java:1801)
at ghidra.util.Swing.doRun(Swing.java:292)
at ghidra.util.Swing.runNow(Swing.java:208)
at ghidra.util.Swing.runNow(Swing.java:163)
at docking.DockingWindowManager.doShowDialog(DockingWindowManager.java:1805)
at docking.DockingWindowManager.showDialog(DockingWindowManager.java:1754)
at ghidra.util.task.TaskDialog.lambda$doShow$7(TaskDialog.java:373)
at ghidra.util.Swing.runIfSwingOrRunLater(Swing.java:124)
at ghidra.util.task.TaskDialog.doShow(TaskDialog.java:370)
at ghidra.util.task.TaskDialog.doShowModal(TaskDialog.java:350)
at ghidra.util.task.TaskDialog.show(TaskDialog.java:324)
at ghidra.util.task.TaskRunner.lambda$showTaskDialog$1(TaskRunner.java:119)
at ghidra.util.Swing.runIfSwingOrRunLater(Swing.java:124)
at ghidra.util.task.TaskRunner.showTaskDialog(TaskRunner.java:116)
at ghidra.util.task.TaskRunner.run(TaskRunner.java:54)
at ghidra.util.task.TaskLauncher.<init>(TaskLauncher.java:221)
at ghidra.util.task.TaskLauncher.<init>(TaskLauncher.java:203)
at ghidra.app.plugin.core.progmgr.ProgramManagerPlugin.loadPrograms(ProgramManagerPlugin.java:840)
at ghidra.app.plugin.core.progmgr.ProgramManagerPlugin.readDataState(ProgramManagerPlugin.java:740)
at ghidra.framework.plugintool.PluginManager.restoreDataStateFromXml(PluginManager.java:381)
at ghidra.framework.plugintool.PluginTool.restoreDataStateFromXml(PluginTool.java:600)
at ghidra.framework.project.tool.WorkspaceImpl.restoreFromXml(WorkspaceImpl.java:183)
at ghidra.framework.project.tool.ToolManagerImpl.restoreFromXml(ToolManagerImpl.java:322)
at ghidra.framework.project.DefaultProject.restore(DefaultProject.java:484)
at ghidra.framework.project.DefaultProjectManager.openProject(DefaultProjectManager.java:142)
at ghidra.GhidraRun.doOpenProject(GhidraRun.java:190)
at ghidra.GhidraRun.lambda$openProject$3(GhidraRun.java:183)
at ghidra.util.Swing.lambda$runNow$2(Swing.java:227)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191)
at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236)
at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:319)
at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234)
at java.desktop/java.awt.Dialog.show(Dialog.java:1079)
at java.desktop/java.awt.Component.show(Component.java:1728)
at java.desktop/java.awt.Component.setVisible(Component.java:1675)
at java.desktop/java.awt.Window.setVisible(Window.java:1036)
at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1015)
at docking.DockingDialog.setVisible(DockingDialog.java:353)
at docking.DockingWindowManager.lambda$doShowDialog$6(DockingWindowManager.java:1801)
at ghidra.util.Swing.doRun(Swing.java:292)
at ghidra.util.Swing.runNow(Swing.java:208)
at ghidra.util.Swing.runNow(Swing.java:163)
at docking.DockingWindowManager.doShowDialog(DockingWindowManager.java:1805)
at docking.DockingWindowManager.showDialog(DockingWindowManager.java:1754)
at ghidra.util.task.TaskDialog.lambda$doShow$7(TaskDialog.java:373)
at ghidra.util.Swing.runIfSwingOrRunLater(Swing.java:124)
at ghidra.util.task.TaskDialog.doShow(TaskDialog.java:370)
at ghidra.util.task.TaskDialog.doShowModal(TaskDialog.java:350)
at ghidra.util.task.TaskDialog.show(TaskDialog.java:324)
at ghidra.util.task.TaskRunner.lambda$showTaskDialog$1(TaskRunner.java:119)
at ghidra.util.Swing.runIfSwingOrRunLater(Swing.java:124)
at ghidra.util.task.TaskRunner.showTaskDialog(TaskRunner.java:116)
at ghidra.util.task.TaskRunner.run(TaskRunner.java:54)
at ghidra.util.task.TaskLauncher.<init>(TaskLauncher.java:221)
at ghidra.util.task.TaskLauncher.<init>(TaskLauncher.java:203)
at ghidra.util.task.TaskLauncher.launchModal(TaskLauncher.java:153)
at ghidra.GhidraRun.openProject(GhidraRun.java:184)
at ghidra.GhidraRun.openProject(GhidraRun.java:175)
at ghidra.GhidraRun.lambda$launch$0(GhidraRun.java:92)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
---------------------------------------------------
Build Date: 2023-Sep-28 1301 EDT
Ghidra Version: 10.4
Java Home: /Library/Java/JavaVirtualMachines/temurin-21.jdk/Contents/Home
JVM Version: Eclipse Adoptium 21.0.1
OS: Mac OS X 14.1 aarch64
To Reproduce Steps to reproduce the behavior:
- open ghidra project
- double click on file in 'Active Project`
- exception dialog window is opened
- details are shown above
Expected behavior Open file without exception.
Screenshots n/a
Attachments n/a
Environment (please complete the following information):
- OS: Mac OS X 14.1 aarch64
- Java Version: Temurin 21.0.1,12 from brew
- Ghidra Version: 10.4 Build Public 2023-Sep-28 1301 EDT
- Ghidra Origin: brew -> ghidra: 10.4,20230928
Additional context n/a
About this issue
- Original URL
- State: closed
- Created 8 months ago
- Comments: 23
Thank you @ryanmkurtz !
I am assigning this to myself and will revisit it when we are doing more testing with JDK 21.
I believe that is because that particular class uses the
listenersfield to store the listener’s type along with the listener itself. Thus, there will always be 2 entries for each listener in that array. That being said, that is Java’s code, not Ghidra’s.The stack trace shows the issue being triggered by the Bundle Manager, which is related to script bundles. My guess is that you have configured one or more script bundles in the past. Something inside of the tool when restoring that bundle state seems to be causing the issue.