OSV v3 parser shares introduced/fixed commit patches across affected packages
Les mainteneurs répondent en général sous 1 jour
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 84/100
Piste de recherche
Commencez dans vulnerabilities/pipes/osv_v2.py, à parse_advisory_data_v3, où l’issue signale les listes de commits qui sont initialisées et transmises à chaque paquet. Exécutez les tests de régression du véritable analyseur pour des blocs Git distincts et un bloc contenant uniquement des versions, dans l’un ou l’autre ordre ; le travail est terminé lorsque chaque paquet reçoit uniquement ses propres commits et des listes distinctes, tandis que plusieurs plages Git au sein d’un même bloc continuent de s’accumuler.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
When an OSV advisory contains multiple affected blocks, parse_advisory_data_v3 puts all collected Git commits into each parsed package. Packages with only version ranges inherit commits too.
Reproduced on current main, commit 8af2bd39510f909c852c5cc086e9b56addc8c50a, with Python 3.12.14, univers==32.0.1, and packageurl-python==0.17.6.
Reproduction
Run this in the project's configured Django shell. The package names, repositories and hashes below are synthetic. Parsing these GitHub URLs does not fetch any repositories.
python manage.py shell
from vulnerabilities.pipes.osv_v2 import parse_advisory_data_v3
raw = {
"id": "x_REPRO-OSV-COMMIT-SCOPE",
"modified": "2026-11-03T00:00:00Z",
"affected": [
{
"package": {"ecosystem": "PyPI", "name": f"demo-{suffix}"},
"ranges": [{
"type": "GIT",
"repo": f"https://github.com/example/repo-{suffix}",
"events": [{"introduced": intro * 40}, {"fixed": fixed * 40}],
}],
}
for suffix, intro, fixed in [("a", "a", "b"), ("b", "c", "d")]
],
}
advisory = parse_advisory_data_v3(
raw, ["pypi"], "https://example.org/advisory", ""
)
first, second = advisory.affected_packages
for package in advisory.affected_packages:
print(package.package, len(package.introduced_by_commit_patches),
len(package.fixed_by_commit_patches))
print(first.introduced_by_commit_patches is second.introduced_by_commit_patches)
print(first.fixed_by_commit_patches is second.fixed_by_commit_patches)
Actual output:
pkg:pypi/demo-a 2 2
pkg:pypi/demo-b 2 2
True
True
Each package contains both repositories' introduced and fixed commits. Expected output is 1 1 for each package and separate lists: demo-a should only have repo-a commits and demo-b only repo-b commits.
With a Git block and a version-only block in the same advisory, the version-only package receives the Git block's introduced and fixed patches in either order.
Cause
The parser initializes the two commit lists before the affected-package loop and passes them unchanged to every AffectedPackageV2. The constructor validates the lists without copying them, so the parsed advisory associates packages with other packages' commits.
The lists should be initialized for each affected block, alongside its version constraints. Multiple Git ranges within the same block should still accumulate into that block's lists.
I checked existing OSV issues and PRs, including #2080, #2066, #2116 and the current parser PRs, and found no report of this attribution bug. Tests using the real parser and classifier fail for two distinct Git blocks and for a version-only block in either order. The control with multiple Git ranges in one block passes.
I'd like to work on the fix. Would you welcome a PR that scopes the lists to each affected block and adds these regression tests?
- Langage dominant
- Python
- Étoiles
- 717
- Forks
- 352
- Merge moyen
- 6 h 19 min
- PR mergées (30 j)
- 6
Préparer son environnement
- Fournit un Dockerfile ou un fichier Docker Compose
- Aucun modèle de pull request
- Aucun guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de aboutcode-org/vulnerablecode
-
OSV parser drops all crates.io affected entries because the ecosystem mapping uses cargoPeut-être pris @Ashutosh-Panda2004 l’a pris il y a 7 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
aboutcode-org/vulnerablecode#2485 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Docker Compose setup fails on wait-for-it host web:8000 and missing runtime .envPeut-être pris @Anurag-S1ngh l’a pris il y a 11 jours. Ouverte
Difficulté 2/5 Une demi-journée Accessibilité débutants 77/100
aboutcode-org/vulnerablecode#2477 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
OVAL parser corrupts version bounds when the epoch is 10, 20 or the version contains "0:"Peut-être pris @Ashutosh-Panda2004 l’a pris il y a 8 jours. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
aboutcode-org/vulnerablecode#2474 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Docker build fails on Apple Silicon (arm64) — only x86_64 wheels pinned for extractcode-7z, extractcode-libarchive, typecode-libmagicPeut-être à nouveau libre Une pull request pour cette issue a été fermée sans être fusionnée. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
aboutcode-org/vulnerablecode#2426 ·
Les mainteneurs répondent en général sous 1 jour
-
Get NuGet package versions from federated PURL version data in https://github.com/aboutcode-data/Peut-être à nouveau libre @Anshi321 l’a pris il y a 30 jours, et aucune pull request n’est ouverte. Ouvertebug data-quality
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
aboutcode-org/vulnerablecode#2418 · 4 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de aboutcode-org/vulnerablecode
Issues similaires
-
bug ready-for-dev
Difficulté 1/5 1-3 heures Accessibilité débutants 92/100
OpenHands/extensions#897 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
tensorflow/datasets#11253 ·
Les mainteneurs répondent en général sous 1 jour
-
fix(core): a config section with all keys commented out crashes startupPeut-être pris @Aryanbhargava18 l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
kubeflow/mcp-server#512 ·
Les mainteneurs répondent en général sous 1 jour
-
Stop trusting the compromised eMudhra CA certificatesPeut-être pris @anth-volk l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
PolicyEngine/uk-triple-lock#54 ·
Les mainteneurs répondent en général sous 1 jour
-
DBFS append mode silently overwrites existing filesPeut-être pris @IlyaKhalafi l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 77/100
fsspec/filesystem_spec#2429 ·
Les mainteneurs répondent en général sous 1 jour