NationalSecurityAgency / ghidra

Ghidra is a software reverse engineering (SRE) framework
https://www.nsa.gov/ghidra
Apache License 2.0
51.23k stars 5.84k forks source link

ConcurrentModificationException while loading 2 files at the same time #6765

Closed justanotheranonymoususer closed 2 months ago

justanotheranonymoususer commented 2 months ago

Describe the bug Opened Ghidra, dragged a file and it started loading, at this time I dragged another file, so they both started loading. After a couple of minutes, I got this error

To Reproduce Steps to reproduce the behavior:

  1. See description, not sure how easy to repro

Expected behavior A clear and concise description of what you expected to happen.

Screenshots image

Attachments

java.util.ConcurrentModificationException
    at java.base/java.util.ArrayList.sort(ArrayList.java:1806)
    at java.base/java.util.Collections.sort(Collections.java:145)
    at ghidra.program.model.data.EnumDataType.getNames(EnumDataType.java:133)
    at ghidra.program.model.data.EnumDataType.replaceWith(EnumDataType.java:517)
    at ghidra.program.model.data.EnumDataType.clone(EnumDataType.java:235)
    at ghidra.program.model.data.StructureDataType.addBitField(StructureDataType.java:683)
    at ghidra.app.util.bin.format.pe.PEx64UnwindInfoDataType.getStructure(PEx64UnwindInfoDataType.java:90)
    at ghidra.app.util.bin.format.pe.PEx64UnwindInfoDataType.getAllComponents(PEx64UnwindInfoDataType.java:130)
    at ghidra.program.model.data.DynamicDataType.getComps(DynamicDataType.java:72)
    at ghidra.program.model.data.DynamicDataType.getLength(DynamicDataType.java:149)
    at ghidra.program.model.data.DataTypeInstance.getDataTypeInstance(DataTypeInstance.java:195)
    at ghidra.program.model.data.DataTypeInstance.getDataTypeInstance(DataTypeInstance.java:97)
    at ghidra.program.model.data.DataUtilities.getDtInstance(DataUtilities.java:278)
    at ghidra.program.model.data.DataUtilities.createData(DataUtilities.java:211)
    at ghidra.app.util.bin.format.pe.ImageRuntimeFunctionEntries_X86$ImageRuntimeFunctionEntry_X86.markup(ImageRuntimeFunctionEntries_X86.java:149)
    at ghidra.app.util.bin.format.pe.ImageRuntimeFunctionEntries_X86.markup(ImageRuntimeFunctionEntries_X86.java:121)
    at ghidra.app.util.bin.format.pe.ExceptionDataDirectory.markup(ExceptionDataDirectory.java:96)
    at ghidra.app.util.opinion.PeLoader.load(PeLoader.java:141)
    at ghidra.app.util.opinion.AbstractLibrarySupportLoader.doLoad(AbstractLibrarySupportLoader.java:864)
    at ghidra.app.util.opinion.AbstractLibrarySupportLoader.loadLibrary(AbstractLibrarySupportLoader.java:822)
    at ghidra.app.util.opinion.AbstractLibrarySupportLoader.loadLibraryFromSearchPaths(AbstractLibrarySupportLoader.java:628)
    at ghidra.app.util.opinion.AbstractLibrarySupportLoader.loadLibraries(AbstractLibrarySupportLoader.java:530)
    at ghidra.app.util.opinion.AbstractLibrarySupportLoader.loadProgram(AbstractLibrarySupportLoader.java:104)
    at ghidra.app.util.opinion.AbstractProgramLoader.load(AbstractProgramLoader.java:131)
    at ghidra.plugin.importer.ImporterUtilities.importSingleFile(ImporterUtilities.java:395)
    at ghidra.plugin.importer.ImporterDialog.lambda$okCallback$7(ImporterDialog.java:338)
    at ghidra.util.task.TaskBuilder$TaskBuilderTask.run(TaskBuilder.java:306)
    at ghidra.util.task.Task.monitoredRun(Task.java:134)
    at ghidra.util.task.TaskRunner.lambda$startTaskThread$0(TaskRunner.java:106)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at java.base/java.lang.Thread.run(Thread.java:1583)

---------------------------------------------------
Build Date: 2024-Jul-09 1157 EDT
Ghidra Version: 11.1.2
Java Home: C:\Program Files\Amazon Corretto\jdk21.0.3_9
JVM Version: Amazon.com Inc. 21.0.3
OS: Windows 11 10.0 amd64

Environment (please complete the following information):

Additional context Add any other context about the problem here.

ghidra1 commented 2 months ago

A fix is in the works. EnumDataType.getNames() is improperly modifying datatype state.