forked from intel/cve-bin-tool
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' into npm_dependencies
- Loading branch information
Showing
21 changed files
with
2,746 additions
and
155 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
# Copyright (C) 2023 Intel Corporation | ||
# SPDX-License-Identifier: GPL-3.0-or-later | ||
|
||
import sys | ||
import tempfile | ||
from pathlib import Path | ||
|
||
import atheris | ||
import atheris_libprotobuf_mutator | ||
from google.protobuf.json_format import MessageToDict | ||
|
||
import fuzz.generated.renv_lock_pb2 as renv_lock_pb2 | ||
from cve_bin_tool.cvedb import CVEDB | ||
from cve_bin_tool.log import LOGGER | ||
|
||
with atheris.instrument_imports(): | ||
from cve_bin_tool.parsers.r import RParser | ||
|
||
|
||
cve_db = CVEDB() | ||
logger = LOGGER.getChild("Fuzz") | ||
|
||
|
||
def RenvLockBuilder(data): | ||
# Parse the JSON data | ||
json_data = MessageToDict( | ||
data, preserving_proto_field_name=True, including_default_value_fields=True | ||
) | ||
|
||
with open(file_path, "w") as f: | ||
# Write R version information | ||
r_version = json_data.get("r", {}).get("version", "") | ||
f.write("{\n") | ||
f.write('"R": {\n') | ||
if r_version: | ||
f.write(f'"Version": {r_version},\n') | ||
repositories = json_data.get("r", {}).get("repositories", {}) | ||
f.write('"Repositories": [\n') | ||
for repository in repositories: | ||
name = repository.get("name", "") | ||
url = repository.get("url", "") | ||
f.write("{\n") | ||
f.write(f'"Name:{name},"') | ||
f.write(f'"URL":{url}') | ||
f.write("}\n") | ||
f.write("]\n") | ||
f.write("},\n") | ||
# Write Bioconductor version information | ||
bioconductor_version = json_data.get("bioconductor", []).get("version", "") | ||
f.write('"Bioconductor":{\n') | ||
if bioconductor_version: | ||
f.write(f"Version: {bioconductor_version}\n") | ||
f.write("},\n") | ||
f.write('"Packages":{\n') | ||
packages = json_data.get("packages", []) | ||
# Write packages | ||
for package in packages: | ||
name = package.get("package", "") | ||
f.write(f'"{name}": ') | ||
f.write("{\n") | ||
f.write(f'"Package:" {name},\n') | ||
version = package.get("version", "") | ||
f.write(f'"Version:" {version},\n') | ||
source = package.get("source", "") | ||
f.write(f'"Source:" {source},\n') | ||
repository = package.get("repository", "") | ||
f.write(f'"Repository:" {repository},\n') | ||
Hash = package.get("hash", "") | ||
f.write(f'"Hash:" {Hash}",\n') | ||
|
||
# Write requirements, if any | ||
requirements = package.get("requirements", []) | ||
if requirements: | ||
f.write("Requirements: [\n") | ||
for requirement in requirements: | ||
f.write(f'"{requirement}",\n') | ||
f.write("]\n") | ||
f.write("}\n") | ||
f.write("}\n") | ||
|
||
|
||
def TestParseData(data): | ||
try: | ||
RenvLockBuilder(data) | ||
|
||
r_parser = RParser(cve_db, logger) | ||
r_parser.run_checker(file_path) | ||
|
||
except SystemExit: | ||
return | ||
|
||
|
||
file_path = str(Path(tempfile.mkdtemp(prefix="cve-bin-tool-")) / "renv.lock") | ||
|
||
atheris_libprotobuf_mutator.Setup(sys.argv, TestParseData, proto=renv_lock_pb2.RenvLock) | ||
atheris.Fuzz() |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
// Copyright (C) 2023 Intel Corporation | ||
// SPDX-License-Identifier: GPL-3.0-or-later | ||
|
||
syntax = "proto3"; | ||
|
||
// Main structure representing the renv.lock file | ||
message RenvLock { | ||
RVersion r = 1; | ||
BioconductorVersion bioconductor = 2; | ||
repeated Package packages = 3; | ||
|
||
|
||
// R version details | ||
message RVersion { | ||
string version = 1; | ||
repeated Repository repositories = 2; | ||
} | ||
|
||
// Bioconductor version details | ||
message BioconductorVersion { | ||
string version = 1; | ||
} | ||
|
||
// Repository information | ||
message Repository { | ||
string name = 1; | ||
string url = 2; | ||
} | ||
|
||
// Package details | ||
message Package { | ||
string package = 1; | ||
string version = 2; | ||
string source = 3; | ||
string repository = 4; | ||
string hash = 5; | ||
repeated string requirements = 6; | ||
} | ||
} | ||
|
Oops, something went wrong.