B&W print-friendly diagrams + tinkerpop-0001 + wave-3 proof sections. Squash of 94 local commits onto remote master.
2.6 KiB
2.6 KiB
| id | repo | version | scanned | source | method |
|---|---|---|---|---|---|
| scan/minecraft-server | Mojang/minecraft-java-edition | 26.1 (server-26.1.jar, extracted from server.jar bundler) | 2026-03-24 | ~/Downloads/server.jar (bundler) → META-INF/versions/26.1/server-26.1.jar | CFR decompiler + bytecode string scan for List/contains patterns |
Summary
7,351 classes scanned. 2 confirmed defects. Core graph utilities are CLEAN.
Confirmed defects
| ID | Class | Pattern | Severity |
|---|---|---|---|
| minecraft-0001 | util/DependencySorter.isCyclic |
Recursive DFS with no visited set — exponential on diamond dependency graphs | HIGH |
| minecraft-0002 | world/level/block/piston/PistonStructureResolver |
List<BlockPos>.contains() in push chain loop |
LOW (bounded at 12) |
Confirmed CLEAN
| Class | Why clean |
|---|---|
util/Graph.depthFirstSearch |
Uses Set<T> for both discovered and currentlyVisiting — O(1) contains |
util/FeatureSorter |
Uses TreeSet for visited/onStack — O(log n), deliberate for deterministic ordering |
util/DependencySorter.visitDependenciesAndElement |
Uses HashSet alreadyVisited — O(1) |
world/level/lighting/DynamicGraphMinFixedPoint |
No list containers in bytecode |
world/level/chunk/status/ChunkDependencies |
No list containers in bytecode |
Notes
- Minecraft Java Edition is NOT open source. Analysis is from decompiled bytecode.
- CFR decompiler used (cfr-0.152.jar).
- Obfuscated field/method names are NOT remapped (no mappings applied). Class names are unobfuscated in recent versions (Mojang releases class name mappings).
- Disclosure path: bugs.mojang.com (public bug tracker).
minecraft-0001 detail
DependencySorter.isCyclic performs a recursive DFS to check if adding an edge
would create a cycle. No visited set. For a diamond graph of depth D, node count
is 2^D. Called from TagLoader — runs on every world load and /reload.
Large modpacks (Create, Applied Energistics 2, Mekanism, Thermal Expansion) with thousands of cross-mod tag dependencies hit this on every server start. The "tag loading lag" reported by modpack server operators is consistent with this behavior.
Broader scan note
34 classes had the ArrayList + contains bytecode signature. Most are either:
- Bounded inputs (piston: max 12, pack selection: tens of packs)
- Non-hot paths (advancement layout, crash report categories)
- Using
containson aHolderSet(Minecraft's own set wrapper, likely O(1))
The DependencySorter defect is the only site where unbounded graph traversal occurs without visited tracking.