Skip to content

Commit 591f0e7

Browse files
committed
enhancements
Signed-off-by: Jefferson <jefferson.rios.caro@gmail.com>
1 parent b514d39 commit 591f0e7

File tree

4 files changed

+86
-28
lines changed

4 files changed

+86
-28
lines changed

.github/workflows/check-vulns.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ jobs:
110110
VULN_DEP_NAME: ${{ matrix.vulnerabilities.dependency }}
111111
VULN_DEP_VERSION: ${{ matrix.vulnerabilities.version }}
112112
VULN_SOURCE: ${{ matrix.vulnerabilities.source }}
113+
VULN_TITLE: ${{ matrix.vulnerabilities.title }}
113114
VULN_MAIN_DEP_NAME: ${{ matrix.vulnerabilities.main_dep_name }}
114115
VULN_MAIN_DEP_PATH: ${{ matrix.vulnerabilities.main_dep_path }}
115116
NODEJS_STREAM: ${{ inputs.nsolidStream }}

.github/workflows/create_issue.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ VULN_URL="${VULN_URL}"
2121
VULN_DEP_NAME="${VULN_DEP_NAME}"
2222
VULN_DEP_VERSION="${VULN_DEP_VERSION}"
2323
VULN_SOURCE="${VULN_SOURCE}"
24+
VULN_TITLE="${VULN_TITLE:-}"
2425
VULN_MAIN_DEP_NAME="${VULN_MAIN_DEP_NAME:-}"
2526
VULN_MAIN_DEP_PATH="${VULN_MAIN_DEP_PATH:-}"
2627
NODEJS_STREAM="${NODEJS_STREAM}"
@@ -35,6 +36,12 @@ ISSUE_BODY="A new vulnerability for ${VULN_DEP_NAME} ${VULN_DEP_VERSION} was fou
3536
Vulnerability ID: ${VULN_ID}
3637
Vulnerability URL: ${VULN_URL}"
3738

39+
# Add vulnerability title if available
40+
if [ -n "${VULN_TITLE}" ]; then
41+
ISSUE_BODY="${ISSUE_BODY}
42+
Vulnerability Title: ${VULN_TITLE}"
43+
fi
44+
3845
# Add npm-specific info if applicable
3946
if [ "${VULN_SOURCE}" = "npm" ] && [ -n "${VULN_MAIN_DEP_NAME}" ]; then
4047
ISSUE_BODY="${ISSUE_BODY}

.github/workflows/format_matrix.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ def generate_labels_for_vulnerability(vuln: Dict[str, Any], nsolid_stream: str)
2323
if vuln.get("source") == "npm":
2424
labels.append("NPM")
2525

26+
# Add Main Dependency label if main_dep_name is present
27+
if vuln.get("main_dep_name") and vuln.get("main_dep_name") != "null":
28+
labels.append("Main Dependency")
29+
2630
# Add severity label if available
2731
severity = vuln.get("severity")
2832
if severity and severity != "null":
@@ -70,6 +74,9 @@ def build_vulnerability_matrix(vulnerabilities_data: Dict[str, Any], nsolid_stre
7074
matrix_entry["severity"] = vuln["severity"]
7175
if "via" in vuln and vuln["via"]:
7276
matrix_entry["via"] = vuln["via"]
77+
# Extract title from via array for display purposes
78+
if isinstance(vuln["via"], list) and vuln["via"]:
79+
matrix_entry["title"] = vuln["via"][0] if vuln["via"][0] else ""
7380
if "main_dep_name" in vuln and vuln["main_dep_name"] is not None:
7481
matrix_entry["main_dep_name"] = vuln["main_dep_name"]
7582
if "main_dep_path" in vuln and vuln["main_dep_path"] is not None:

dep_checker/npm_audit.py

Lines changed: 71 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
# You can also use folder names for broader exclusions (e.g., "test" excludes all test folders)
2222
EXCLUDE_PATHS = [
2323
# Specific path exclusions
24-
"deps/v8/tools/turbolizer",
24+
"deps/v8/tools",
2525

2626
# General folder name exclusions (will match any folder with this name)
2727
"test",
@@ -179,37 +179,80 @@ def parse_audit_results(self, audit_data: Dict, package_dir: Path, vulnerability
179179
severity = vuln_data.get("severity", "unknown")
180180
via = vuln_data.get("via", [])
181181
fix_available = vuln_data.get("fixAvailable", False)
182+
range_info = vuln_data.get("range", "unknown")
182183

183-
# Handle different via formats
184+
# Handle different via formats - create separate vulnerabilities for each advisory
184185
if isinstance(via, list) and via:
185-
# Get the first vulnerability ID from via
186-
first_via = via[0]
187-
if isinstance(first_via, dict):
188-
vuln_id = first_via.get("source", f"npm-{vuln_name}")
189-
url = first_via.get("url", f"https://npmjs.com/advisories/{vuln_id}")
190-
else:
191-
vuln_id = str(first_via)
192-
url = f"https://npmjs.com/advisories/{vuln_id}"
186+
for via_item in via:
187+
if isinstance(via_item, dict):
188+
# Extract individual advisory information
189+
advisory_id = via_item.get("source")
190+
advisory_url = via_item.get("url")
191+
advisory_title = via_item.get("title", "")
192+
advisory_severity = via_item.get("severity", severity)
193+
194+
# Use advisory ID as vulnerability ID, fallback to package name
195+
if advisory_id:
196+
vuln_id = str(advisory_id)
197+
else:
198+
vuln_id = f"npm-{vuln_name}"
199+
200+
# Use proper GitHub advisory URL if available
201+
if advisory_url:
202+
url = advisory_url
203+
else:
204+
url = f"https://github.com/advisories?query={vuln_name}"
205+
206+
# Create vulnerability with advisory-specific information
207+
vulnerability = vulnerability_class(
208+
id=vuln_id,
209+
url=url,
210+
dependency=vuln_name,
211+
version=str(range_info),
212+
source="npm",
213+
severity=advisory_severity,
214+
via=[advisory_title] if advisory_title else [],
215+
fix_available=bool(fix_available),
216+
main_dep_name=main_dep_name,
217+
main_dep_path=main_dep_path
218+
)
219+
vulnerabilities.append(vulnerability)
220+
else:
221+
# Handle string via items (legacy format)
222+
vuln_id = str(via_item)
223+
url = f"https://github.com/advisories?query={vuln_id}"
224+
225+
vulnerability = vulnerability_class(
226+
id=vuln_id,
227+
url=url,
228+
dependency=vuln_name,
229+
version=str(range_info),
230+
source="npm",
231+
severity=severity,
232+
via=[str(via_item)],
233+
fix_available=bool(fix_available),
234+
main_dep_name=main_dep_name,
235+
main_dep_path=main_dep_path
236+
)
237+
vulnerabilities.append(vulnerability)
193238
else:
239+
# No via information, create basic vulnerability
194240
vuln_id = f"npm-{vuln_name}"
195-
url = f"https://npmjs.com/package/{vuln_name}"
196-
197-
# Get version range
198-
range_info = vuln_data.get("range", "unknown")
199-
200-
vulnerability = vulnerability_class(
201-
id=vuln_id,
202-
url=url,
203-
dependency=vuln_name,
204-
version=str(range_info),
205-
source="npm",
206-
severity=severity,
207-
via=[str(v) for v in via] if via else [],
208-
fix_available=bool(fix_available),
209-
main_dep_name=main_dep_name,
210-
main_dep_path=main_dep_path
211-
)
212-
vulnerabilities.append(vulnerability)
241+
url = f"https://github.com/advisories?query={vuln_name}"
242+
243+
vulnerability = vulnerability_class(
244+
id=vuln_id,
245+
url=url,
246+
dependency=vuln_name,
247+
version=str(range_info),
248+
source="npm",
249+
severity=severity,
250+
via=[],
251+
fix_available=bool(fix_available),
252+
main_dep_name=main_dep_name,
253+
main_dep_path=main_dep_path
254+
)
255+
vulnerabilities.append(vulnerability)
213256

214257
except Exception as e:
215258
logger.error(f"Error parsing vulnerability {vuln_name}: {e}")

0 commit comments

Comments
 (0)