mirror of
https://github.com/nlohmann/json.git
synced 2026-10-23 14:28:54 +00:00
Fix Semgrep findings in Python tooling (#5899)
- generate_docset.py: use SHA-256 instead of SHA-1 for the cache file name digest of downloaded images. - generate_docset.py: suppress dynamic-urllib-use-detected; the URL scheme is restricted to http(s) right before the call. - generate_natvis.py: suppress direct-use-of-jinja2; the template renders a local XML file with autoescape enabled. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
This commit is contained in:
1 parent
e28506dd86
commit
ffcd392be0
2 files changed
+5
-1
No files matched your search
@@ -341,13 +341,14 @@ def download(url, docs) -> str:
|
|||||||
raise ValueError(f'not an http(s) URL: {url}')
|
raise ValueError(f'not an http(s) URL: {url}')
|
||||||
req = urllib.request.Request(u.geturl(), headers={'User-Agent': USER_AGENT})
|
req = urllib.request.Request(u.geturl(), headers={'User-Agent': USER_AGENT})
|
||||||
# (the scheme is checked above)
|
# (the scheme is checked above)
|
||||||
|
# nosemgrep: python.lang.security.audit.dynamic-urllib-use-detected.dynamic-urllib-use-detected
|
||||||
with urllib.request.urlopen(req, timeout=20) as r: # nosec B310
|
with urllib.request.urlopen(req, timeout=20) as r: # nosec B310
|
||||||
data = r.read()
|
data = r.read()
|
||||||
ctype = r.headers.get_content_type()
|
ctype = r.headers.get_content_type()
|
||||||
path = urllib.parse.unquote(u.path).lstrip('/')
|
path = urllib.parse.unquote(u.path).lstrip('/')
|
||||||
ext = os.path.splitext(path)[1]
|
ext = os.path.splitext(path)[1]
|
||||||
if u.query or not ext or path.endswith('/'):
|
if u.query or not ext or path.endswith('/'):
|
||||||
digest = hashlib.sha1(url.encode(), usedforsecurity=False).hexdigest()[:12]
|
digest = hashlib.sha256(url.encode()).hexdigest()[:12]
|
||||||
path = os.path.join(os.path.dirname(path), digest + CONTENT_TYPE_EXT.get(ctype, ext or '.bin'))
|
path = os.path.join(os.path.dirname(path), digest + CONTENT_TYPE_EXT.get(ctype, ext or '.bin'))
|
||||||
rel = os.path.normpath(os.path.join('assets', 'external', u.hostname, path))
|
rel = os.path.normpath(os.path.join('assets', 'external', u.hostname, path))
|
||||||
out = os.path.join(docs, rel)
|
out = os.path.join(docs, rel)
|
||||||
|
|||||||
@@ -139,9 +139,12 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
namespaces += [f'{namespaces[0]}::{ns}' for ns in inline_namespaces]
|
namespaces += [f'{namespaces[0]}::{ns}' for ns in inline_namespaces]
|
||||||
|
|
||||||
|
# The template renders a local XML file, not a web response, and autoescape is enabled.
|
||||||
|
# nosemgrep: python.flask.security.xss.audit.direct-use-of-jinja2.direct-use-of-jinja2
|
||||||
env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=sys.path[0]), autoescape=True, trim_blocks=True,
|
env = jinja2.Environment(loader=jinja2.FileSystemLoader(searchpath=sys.path[0]), autoescape=True, trim_blocks=True,
|
||||||
lstrip_blocks=True, keep_trailing_newline=True)
|
lstrip_blocks=True, keep_trailing_newline=True)
|
||||||
template = env.get_template('nlohmann_json.natvis.j2')
|
template = env.get_template('nlohmann_json.natvis.j2')
|
||||||
|
# nosemgrep: python.flask.security.xss.audit.direct-use-of-jinja2.direct-use-of-jinja2
|
||||||
natvis = template.render(namespaces=namespaces)
|
natvis = template.render(namespaces=namespaces)
|
||||||
|
|
||||||
output = args.output or os.path.join(args.repo_root, 'nlohmann_json.natvis')
|
output = args.output or os.path.join(args.repo_root, 'nlohmann_json.natvis')
|
||||||
|
|||||||
Reference in new issue
Block a user