Hyades backport: Preprocess CWE dictionary #3284
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
The current setup is parsing the CWE dictionary XML at runtime and persisting it to the database (
CweImporter
), just to load it from the database again into memory (CweResolver
). BothCweImporter
andCweResolver
end up holding the entire CWE dictionary in staticMap
s, which is unnecessary.CWEs are synchronized with the database on startup, where each CWE is processed in a database transaction. That is over 1400 transactions before anything meaningful is done.
As of v4.5 (#1467), CWEs are stored as serialized list in the
VULNERABILITY
table. TheCWE
table is thus not required anymore, as nothing is referring to it. Lookups can be served immediately from in-memory maps.With this change, the CWE dictionary is pre-processed with a Python script. It generates a Java class that holds all entries in a static
LinkedHashMap
. Persistence logic around CWEs is removed, and theCWE
table is dropped.This is a backport from Hyades.
Addressed Issue
N/A
Additional Details
N/A
Checklist
This PR fixes a defect, and I have provided tests to verify that the fix is effectiveThis PR introduces changes to the database model, and I have added corresponding update logicThis PR introduces new or alters existing behavior, and I have updated the documentation accordingly