whitepaper: 366/178 — wave5 defect tables + PDF rebuild
This commit is contained in:
parent
835ae73b0f
commit
a4b0cf4edd
79 changed files with 3829 additions and 17 deletions
31
defects/jgit/CLEAN.md
Normal file
31
defects/jgit/CLEAN.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# JGit — CWE-407 scan result: CLEAN
|
||||
|
||||
## Scan date: 2026-03-27
|
||||
|
||||
## Files scanned
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/revwalk/PedestrianObjectReachabilityChecker.java` — uses RevWalk with markUninteresting; no list membership in object loop
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/revwalk/BitmappedReachabilityChecker.java` — BitmapBuilder for reached set, O(1) contains; remainingTargets ArrayList but removeIf bounded by #targets, not repository scale
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriter.java` — have/want are Set<? extends ObjectId> (HashSet), O(1)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackWriterBitmapPreparer.java` — excessiveBranches is HashSet<RevCommit>, newWants is HashSet, O(1)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/pack/PackBitmapCalculator.java` — bitmap operations only
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/RefDirectory.java` — RefList.contains uses binary search O(log N)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/ObjectDirectory.java` — skips is HashSet<AlternateHandle.Id>, O(1)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/PackDirectory.java` — indexOf in remove() is single call, not inside a loop proportional to pack count
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java` — existing/objectsToKeep/seenParentIds are HashSet, O(1)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/CachedObjectDirectory.java` — unpackedObjects is ObjectIdOwnerMap (hashmap), O(1)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableDatabase.java` — deleted is HashSet, added is TreeSet (O(log N)), ceiling() is O(log N)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableBatchRefUpdate.java` — checkConflicting uses TreeSet<String> added and HashSet deleted, O(log N)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/reftable/ReftableWriter.java` — LongList.contains is O(B) where B = #blocks per OID (typically 1-3), not repository scale
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/lib/RefDatabase.java` — getConflictingNames uses allRefs.keySet() which is a Map, containsKey is O(1)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectChecker.java` — EnumSet and ObjectIdSet, O(1)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/MidxPackFilter.java` — coveredPacksAndMidxs is HashSet, O(1)
|
||||
- `org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/dfs/DfsPackCompactor.java` — packs and reftables are HashSet, O(1)
|
||||
|
||||
## Conclusion
|
||||
No unbounded O(n²) membership defects found in the scanned JGit files.
|
||||
All hot-path membership tests use hash structures (HashSet, ObjectIdOwnerMap,
|
||||
ObjectIdSet, EnumSet) or sorted/binary-search structures (TreeSet, RefList).
|
||||
|
||||
The LongList.contains in ReftableWriter.addBlock is O(B) but B is bounded by
|
||||
the number of pack file blocks containing a given OID, which is effectively
|
||||
constant (1-3) in practice — not proportional to repository scale.
|
||||
Loading…
Add table
Add a link
Reference in a new issue