{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-71d792613da0f4d5", "name": "Possibly dead Python function: open_file", "shortDescription": {"text": "Possibly dead Python function: open_file"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8aca30cf7bcb03ec", "name": "Possibly dead Python function: reset_crop", "shortDescription": {"text": "Possibly dead Python function: reset_crop"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a711d518ced91982", "name": "Possibly dead Python function: export", "shortDescription": {"text": "Possibly dead Python function: export"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70c7f24f930cd108", "name": "Network/subprocess call without timeout or try/except \u2014 video_trim_crop.py:78", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 video_trim_crop.py:78"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/30287"}, "properties": {"repository": "Ville-Mattila/VideoTrimCropperResizer", "repoUrl": "https://github.com/Ville-Mattila/VideoTrimCropperResizer", "branch": "main"}, "results": [{"ruleId": "scanner-71d792613da0f4d5", "level": "note", "message": {"text": "Possibly dead Python function: open_file"}, "properties": {"repobilityId": "4de20a14e3f8df58", "scanner": "scanner-primary", "fingerprint": "71d792613da0f4d5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "video_trim_crop.py:319"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8aca30cf7bcb03ec", "level": "note", "message": {"text": "Possibly dead Python function: reset_crop"}, "properties": {"repobilityId": "64e474eea5884399", "scanner": "scanner-primary", "fingerprint": "8aca30cf7bcb03ec", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "video_trim_crop.py:506"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-a711d518ced91982", "level": "note", "message": {"text": "Possibly dead Python function: export"}, "properties": {"repobilityId": "eb9ca389f8cda1a9", "scanner": "scanner-primary", "fingerprint": "a711d518ced91982", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "video_trim_crop.py:688"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-70c7f24f930cd108", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 video_trim_crop.py:78"}, "properties": {"repobilityId": "dc9d6ba2995b0fef", "scanner": "scanner-primary", "fingerprint": "70c7f24f930cd108", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}