Deduplicating archiver with compression and authenticated encryption.
This report presents the forensic synthetic code analysis of borgbackup/borg, a Python project with 13,660 GitHub stars. SynthScan v2.0 examined 83,802 lines of code across 299 source files, recording 1672 pattern matches distributed across 15 syntactic categories. The overall adjusted score of 20.9 places this repository in the Moderate AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 1672 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/borg/fslocking.py | 436 | def _wait_for_readers_finishing(self, remove, sleep): | CODE |
| LOW | src/borg/conftest.py | 197 | def maybe_clear_flags_and_retry(func, path, _exc_info): | CODE |
| LOW | src/borg/patterns.py | 127 | def get_unmatched_include_patterns(self): | CODE |
| LOW | src/borg/manifest.py | 52 | def get_first_and_last_archive_ts(archives_list): | CODE |
| LOW | src/borg/manifest.py | 527 | def check_repository_compatibility(self, operations): | CODE |
| LOW | src/borg/manifest.py | 541 | def get_all_mandatory_features(self): | CODE |
| LOW | src/borg/security.py | 155 | def assert_no_manifest_replay(self, manifest, key): | CODE |
| LOW | src/borg/cache.py | 61 | def discover_files_cache_names(path, files_cache_name="files"): | CODE |
| LOW | src/borg/cache.py | 351 | def discover_files_cache_names(self, path): | CODE |
| LOW | src/borg/cache.py | 543 | def chunkindex_fragment_entry_size(): | CODE |
| LOW | src/borg/cache.py | 559 | def list_chunkindex_fragments(repository): | CODE |
| LOW | src/borg/cache.py | 600 | def delete_chunkindex_invalid(repository): | CODE |
| LOW | src/borg/cache.py | 608 | def delete_chunkindex_from_repo(repository): | CODE |
| LOW | src/borg/cache.py | 630 | def _store_chunkindex_fragment(repository, batch, stored_hashes, *, force_write): | CODE |
| LOW | src/borg/cache.py | 780 | def read_chunkindex_from_repo(repository, hash): | CODE |
| LOW | src/borg/cache.py | 859 | def build_chunkindex_from_repo( | CODE |
| LOW | src/borg/cache.py | 991 | def archive_reference_cache_name(archive_id: bytes) -> str: | CODE |
| LOW | src/borg/cache.py | 996 | def list_archive_reference_caches(repository) -> set: | CODE |
| LOW | src/borg/cache.py | 1040 | def cleanup_archive_reference_caches(repository, stale_hex_ids: set) -> None: | CODE |
| LOW | src/borg/cache.py | 1163 | def _maybe_write_chunks_index(self, now, force=False, clear=False): | CODE |
| LOW | src/borg/cache.py | 1290 | def check_cache_compatibility(self): | CODE |
| LOW | src/borg/archive.py | 2368 | def rebuild_archives_directory(self): | CODE |
| LOW | src/borg/crypto/key.py | 195 | def encryption_argument_names(): | CODE |
| LOW | src/borg/crypto/key.py | 722 | def get_existing_or_new_target(self, args): | CODE |
| LOW | src/borg/crypto/key.py | 750 | def _find_all_keys_in_keys_dir(self): | CODE |
| LOW | src/borg/crypto/key.py | 777 | def _find_key_file_from_environment(self): | CODE |
| LOW | src/borg/testsuite/compress_test.py | 187 | def test_additive_obfuscation(specs, c_type, obfuscation_padding: int): | CODE |
| LOW | src/borg/testsuite/compress_test.py | 225 | def test_default_compression_level(c_type, c_name): | CODE |
| LOW | src/borg/testsuite/compress_test.py | 238 | def test_specified_compression_level(c_type, c_name, c_levels): | CODE |
| LOW | src/borg/testsuite/compress_test.py | 246 | def test_invalid_compression_level(invalid_spec): | CODE |
| LOW | src/borg/testsuite/compress_test.py | 261 | def test_zstd_level_roundtrip(level): | CODE |
| LOW | src/borg/testsuite/compress_test.py | 272 | def test_zstd_level_roundtrip_legacy_mode(level): | CODE |
| LOW | src/borg/testsuite/compress_test.py | 282 | def test_other_compressors_keep_their_level_byte(): | CODE |
| LOW | src/borg/testsuite/compress_test.py | 329 | def test_robj_specific_obfuscation(data_length, expected_padding, robj_type): | CODE |
| LOW | src/borg/testsuite/compress_test.py | 341 | def test_zstd_mt_workers_from_env(monkeypatch): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 80 | def test_finish_returns_empty_dict(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 90 | def test_ids_returns_binary_ids(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 96 | def test_ids_store_object_not_found_gives_empty(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 102 | def test_ids_passes_deleted_flag(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 159 | def test_exists_name_and_id_true(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 165 | def test_exists_name_and_id_false_wrong_name(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 171 | def test_exists_name_and_id_false_wrong_id(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 177 | def test_exists_name_and_ts_true(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 183 | def test_exists_name_and_ts_false_wrong_ts(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 189 | def test_exists_name_and_ts_false_wrong_name(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 195 | def test_get_archive_meta_object_not_found(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 258 | def test_get_archive_meta_bad_version(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 267 | def test_get_missing_returns_none(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 273 | def test_get_returns_archive_archiveinfo(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 333 | def test_create_calls_store_store(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 339 | def test_create_with_datetime_ts(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 346 | def test_create_overwrite_kwarg_ignored(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 523 | def test_get_one_no_match_raises(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 529 | def test_get_one_multiple_matches_raises(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 537 | def test_get_one_deleted_passes_flag(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 545 | def test_list_considering_raises_if_name_set(): | CODE |
| LOW⚡ | src/borg/testsuite/archives_test.py | 553 | def test_list_considering_delegates(): | CODE |
| LOW | src/borg/testsuite/archives_test.py | 54 | def _stub_matching_info_tuples(infos): | CODE |
| LOW | src/borg/testsuite/archives_test.py | 66 | def test_archives_satisfies_archives_interface(): | CODE |
| LOW | src/borg/testsuite/archives_test.py | 210 | def test_get_archive_meta_success(): | CODE |
| 854 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/errorlist.py | 7 | CODE | |
| LOW | scripts/errorlist.py | 8 | CODE | |
| LOW | src/borg/repoobj.py | 5 | CODE | |
| LOW | src/borg/repoobj.py | 281 | CODE | |
| LOW | src/borg/webdav.py | 30 | CODE | |
| LOW | src/borg/manifest.py | 15 | CODE | |
| LOW | src/borg/cache.py | 172 | CODE | |
| LOW | src/borg/cache.py | 172 | CODE | |
| LOW | src/borg/cache.py | 172 | CODE | |
| LOW | src/borg/cache.py | 172 | CODE | |
| LOW | src/borg/cache.py | 172 | CODE | |
| LOW | src/borg/fuse_impl.py | 8 | CODE | |
| LOW | src/borg/archive.py | 28 | CODE | |
| LOW | src/borg/repository.py | 20 | CODE | |
| LOW | src/borg/crypto/key.py | 17 | CODE | |
| LOW | src/borg/crypto/key.py | 1281 | CODE | |
| LOW | src/borg/crypto/key.py | 1282 | CODE | |
| LOW | src/borg/crypto/key.py | 1286 | CODE | |
| LOW | src/borg/crypto/keymanager.py | 198 | CODE | |
| LOW | src/borg/chunkers/__init__.py | 9 | CODE | |
| LOW | src/borg/testsuite/__init__.py | 23 | CODE | |
| LOW | src/borg/testsuite/__init__.py | 23 | CODE | |
| LOW | src/borg/testsuite/__init__.py | 23 | CODE | |
| LOW | src/borg/testsuite/__init__.py | 23 | CODE | |
| LOW | src/borg/testsuite/__init__.py | 23 | CODE | |
| LOW | src/borg/testsuite/chunkers/buzhash64_self_test.py | 8 | CODE | |
| LOW | src/borg/testsuite/chunkers/buzhash64_test.py | 12 | CODE | |
| LOW | src/borg/testsuite/chunkers/toeplitz_aes_test.py | 10 | CODE | |
| LOW | src/borg/testsuite/chunkers/fixed_self_test.py | 7 | CODE | |
| LOW | src/borg/testsuite/chunkers/buzhash_self_test.py | 8 | CODE | |
| LOW | src/borg/testsuite/chunkers/__init__.py | 8 | CODE | |
| LOW | src/borg/testsuite/chunkers/rabin_aes_test.py | 8 | CODE | |
| LOW | src/borg/testsuite/chunkers/interaction_test.py | 6 | CODE | |
| LOW | src/borg/testsuite/chunkers/reader_test.py | 9 | CODE | |
| LOW | src/borg/testsuite/chunkers/fixed_test.py | 10 | CODE | |
| LOW | src/borg/testsuite/chunkers/buzhash_test.py | 10 | CODE | |
| LOW | src/borg/testsuite/chunkers/failing_test.py | 6 | CODE | |
| LOW | src/borg/testsuite/chunkers/goldilocks_aes_test.py | 16 | CODE | |
| LOW | src/borg/testsuite/chunkers/phte_chunkers_test.py | 20 | CODE | |
| LOW | src/borg/testsuite/chunkers/fastcdc_test.py | 14 | CODE | |
| LOW | src/borg/testsuite/archiver/repo_list_cmd_test.py | 6 | CODE | |
| LOW | src/borg/testsuite/archiver/tar_cmds_test.py | 16 | CODE | |
| LOW | src/borg/testsuite/archiver/prune_cmd_test.py | 7 | CODE | |
| LOW | src/borg/testsuite/archiver/extract_cmd_test.py | 16 | CODE | |
| LOW | src/borg/testsuite/archiver/webdav_cmd_test.py | 23 | CODE | |
| LOW | src/borg/testsuite/archiver/match_archives_date_test.py | 8 | CODE | |
| LOW | src/borg/testsuite/archiver/help_cmd_test.py | 4 | CODE | |
| LOW | src/borg/testsuite/archiver/return_codes_test.py | 3 | CODE | |
| LOW | src/borg/testsuite/archiver/list_cmd_test.py | 5 | CODE | |
| LOW | src/borg/testsuite/archiver/recreate_cmd_test.py | 9 | CODE | |
| LOW | src/borg/testsuite/archiver/delete_cmd_test.py | 3 | CODE | |
| LOW | src/borg/testsuite/archiver/repo_compress_cmd_test.py | 6 | CODE | |
| LOW | src/borg/testsuite/archiver/debug_cmds_test.py | 5 | CODE | |
| LOW | src/borg/testsuite/archiver/compact_cmd_test.py | 6 | CODE | |
| LOW | src/borg/testsuite/archiver/repo_space_cmd_test.py | 1 | CODE | |
| LOW | src/borg/testsuite/archiver/create_cmd_test.py | 15 | CODE | |
| LOW | src/borg/testsuite/archiver/corruption_test.py | 7 | CODE | |
| LOW | src/borg/testsuite/archiver/__init__.py | 20 | CODE | |
| LOW | src/borg/testsuite/archiver/__init__.py | 29 | CODE | |
| LOW | src/borg/testsuite/archiver/repo_delete_cmd_test.py | 5 | CODE | |
| 352 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | scripts/rest_perf_test.sh | 24 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/rest_perf_test.sh | 26 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/rest_perf_test.sh | 63 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/rest_perf_test.sh | 65 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/rest_perf_test.sh | 105 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/rest_perf_test.sh | 107 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/rest_perf_test.sh | 129 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/rest_perf_test.sh | 134 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/rest_perf_test.sh | 162 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/rest_perf_test.sh | 164 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/rest_perf_test.sh | 196 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/rest_perf_test.sh | 198 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/rest_perf_test.sh | 206 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/rest_perf_test.sh | 208 | # ---------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_upgrade_test.py | 43 | # ── upgrade_item ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_upgrade_test.py | 117 | # ── upgrade_archive_metadata ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_upgrade_test.py | 180 | # ── upgrade_compressed_chunk ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/borg/testsuite/legacy_upgrade_test.py | 18 | # ── helpers ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_helpers_test.py | 15 | # ── borg1_hardlinkable ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_helpers_test.py | 46 | # ── borg1_hardlink_with_content ─────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_helpers_test.py | 71 | # ── borg1_hardlink_reference ────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_archives_test.py | 121 | # ── create ─────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_archives_test.py | 149 | # ── get / get_by_id ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_archives_test.py | 189 | # ── NotImplementedError stubs ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_archives_test.py | 228 | # ── _get_archive_meta ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_archives_test.py | 415 | # ── get_one ─────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_archives_test.py | 438 | # ── list_considering ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/legacy_archives_test.py | 468 | # ── ArchivesInterface Protocol / Manifest dispatch ──────────────────────────────── | COMMENT |
| MEDIUM | src/borg/testsuite/legacy_archives_test.py | 16 | # ── helpers ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/borg/testsuite/legacy_archives_test.py | 65 | # ── init / raw-dict operations ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/borg/testsuite/legacy_archives_test.py | 278 | # ── _infos / _info_tuples ──────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/borg/testsuite/legacy_archives_test.py | 293 | # ── list ────────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/borg/testsuite/crypto/legacy_key_test.py | 10 | # ── Pbkdf2FileMixin ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | src/borg/archiver/tar_cmds.py | 117 | # ---------- | COMMENT |
| MEDIUM | src/borg/archiver/tar_cmds.py | 125 | # ----------- | COMMENT |
| MEDIUM | src/borg/cockpit/widgets.py | 317 | # -------------------------- | COMMENT |
| MEDIUM | src/borg/cockpit/widgets.py | 328 | # -------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/lvm-thin-map.py | 78 | CODE | |
| LOW | scripts/endian_interop_test.py | 125 | CODE | |
| LOW | scripts/endian_interop_test.py | 182 | CODE | |
| LOW | scripts/endian_interop_test.py | 211 | CODE | |
| LOW | scripts/make.py | 71 | CODE | |
| LOW | scripts/make.py | 152 | CODE | |
| LOW | scripts/make.py | 203 | CODE | |
| LOW | scripts/blake3-optimize-mt-threshold.py | 199 | CODE | |
| LOW | scripts/chunker_bench.py | 106 | CODE | |
| LOW | src/borg/fslocking.py | 138 | CODE | |
| LOW | src/borg/fslocking.py | 216 | CODE | |
| LOW | src/borg/fslocking.py | 300 | CODE | |
| LOW | src/borg/webdav.py | 208 | CODE | |
| LOW | src/borg/webdav.py | 242 | CODE | |
| LOW | src/borg/webdav.py | 560 | CODE | |
| LOW | src/borg/webdav.py | 623 | CODE | |
| LOW | src/borg/webdav.py | 721 | CODE | |
| LOW | src/borg/version.py | 35 | CODE | |
| LOW | src/borg/manifest.py | 220 | CODE | |
| LOW | src/borg/cache.py | 780 | CODE | |
| LOW | src/borg/cache.py | 859 | CODE | |
| LOW | src/borg/cache.py | 287 | CODE | |
| LOW | src/borg/cache.py | 354 | CODE | |
| LOW | src/borg/cache.py | 397 | CODE | |
| LOW | src/borg/vfs.py | 646 | CODE | |
| LOW | src/borg/xattr.py | 60 | CODE | |
| LOW | src/borg/xattr.py | 99 | CODE | |
| LOW | src/borg/archive.py | 200 | CODE | |
| LOW | src/borg/archive.py | 370 | CODE | |
| LOW | src/borg/archive.py | 854 | CODE | |
| LOW | src/borg/archive.py | 885 | CODE | |
| LOW | src/borg/archive.py | 1080 | CODE | |
| LOW | src/borg/archive.py | 1291 | CODE | |
| LOW | src/borg/archive.py | 1588 | CODE | |
| LOW | src/borg/archive.py | 1697 | CODE | |
| LOW | src/borg/archive.py | 1934 | CODE | |
| LOW | src/borg/archive.py | 2097 | CODE | |
| LOW | src/borg/archive.py | 2272 | CODE | |
| LOW | src/borg/archive.py | 2368 | CODE | |
| LOW | src/borg/archive.py | 2443 | CODE | |
| LOW | src/borg/archive.py | 2864 | CODE | |
| LOW | src/borg/archive.py | 2534 | CODE | |
| LOW | src/borg/storelocking.py | 442 | CODE | |
| LOW | src/borg/storelocking.py | 610 | CODE | |
| LOW | src/borg/repository.py | 427 | CODE | |
| LOW | src/borg/repository.py | 997 | CODE | |
| LOW | src/borg/crypto/key.py | 508 | CODE | |
| LOW | src/borg/crypto/key.py | 876 | CODE | |
| LOW | src/borg/crypto/keymanager.py | 195 | CODE | |
| LOW | src/borg/chunkers/failing.py | 30 | CODE | |
| LOW | src/borg/testsuite/cache_test.py | 470 | CODE | |
| LOW | src/borg/testsuite/repository_test.py | 133 | CODE | |
| LOW | src/borg/testsuite/chunkers/buzhash64_test.py | 25 | CODE | |
| LOW | src/borg/testsuite/chunkers/toeplitz_aes_test.py | 23 | CODE | |
| LOW | src/borg/testsuite/chunkers/rabin_aes_test.py | 21 | CODE | |
| LOW | src/borg/testsuite/chunkers/interaction_test.py | 21 | CODE | |
| LOW | src/borg/testsuite/chunkers/reader_test.py | 415 | CODE | |
| LOW | src/borg/testsuite/chunkers/fixed_test.py | 13 | CODE | |
| LOW | src/borg/testsuite/chunkers/buzhash_test.py | 18 | CODE | |
| LOW | src/borg/testsuite/chunkers/goldilocks_aes_test.py | 29 | CODE | |
| 69 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/conf.py | 4 | # This file is execfile()d with the current directory set to its containing directory. | COMMENT |
| MEDIUM | src/borg/testsuite/cache_test.py | 127 | # Create an index entry so list_chunkindex_hashes finds it. | COMMENT |
| MEDIUM | src/borg/testsuite/repoobj_test.py | 179 | # Create a repository object containing user data (file content data). | COMMENT |
| MEDIUM | src/borg/testsuite/repoobj_test.py | 191 | # Create a repository object containing user data (file content data). | COMMENT |
| MEDIUM | src/borg/testsuite/crypto/csprng_test.py | 170 | # Create a large list | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/crypto/crypto_test.py | 320 | # Create a simple KeyBase subclass with a non-empty crypt_key | COMMENT |
| MEDIUM | src/borg/testsuite/chunkers/reader_test.py | 133 | # Create a mock FileFMAPReader that yields specific chunks | COMMENT |
| MEDIUM | src/borg/testsuite/chunkers/reader_test.py | 145 | # Create a FileReader with a dummy BytesIO to satisfy the assertion | COMMENT |
| MEDIUM | src/borg/testsuite/chunkers/reader_test.py | 271 | # Create a file with all zeros | COMMENT |
| MEDIUM | src/borg/testsuite/chunkers/reader_test.py | 288 | # Create a sparse file | COMMENT |
| MEDIUM | src/borg/testsuite/chunkers/reader_test.py | 336 | # Create a reader with sparse=False | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/archiver/tar_cmds_test.py | 369 | # Create a simple directory structure | COMMENT |
| MEDIUM⚡ | src/borg/testsuite/archiver/tar_cmds_test.py | 372 | # Create a tar file with paths starting with './' | COMMENT |
| MEDIUM | src/borg/testsuite/archiver/transfer_cmd_test.py | 483 | # Create an archive with a comment | COMMENT |
| MEDIUM | src/borg/testsuite/archiver/diff_cmd_test.py | 54 | # Create the first snapshot | COMMENT |
| MEDIUM | src/borg/testsuite/archiver/diff_cmd_test.py | 84 | # Create the second snapshot | COMMENT |
| MEDIUM | …borg/testsuite/archiver/restricted_permissions_test.py | 18 | # Create a repository with unrestricted permissions. | COMMENT |
| MEDIUM | …borg/testsuite/archiver/restricted_permissions_test.py | 43 | # Create a repository first (need unrestricted permissions for that). | COMMENT |
| MEDIUM⚡ | …borg/testsuite/archiver/restricted_permissions_test.py | 103 | # Create a repository first (need unrestricted permissions for that). | COMMENT |
| MEDIUM⚡ | …borg/testsuite/archiver/restricted_permissions_test.py | 107 | # Create an archive to test with. | COMMENT |
| MEDIUM⚡ | …borg/testsuite/archiver/restricted_permissions_test.py | 152 | # Create a repository first (need unrestricted permissions for that). | COMMENT |
| MEDIUM⚡ | …borg/testsuite/archiver/restricted_permissions_test.py | 156 | # Create an initial archive to test with. | COMMENT |
| MEDIUM | src/borg/testsuite/helpers/fs_test.py | 361 | # Create a directory with both a CACHEDIR.TAG and a custom tag file | COMMENT |
| MEDIUM | src/borg/testsuite/helpers/fs_test.py | 368 | # Create a directory without any tag files | COMMENT |
| MEDIUM | src/borg/archiver/transfer_cmd.py | 52 | # Create a chunker with the specified parameters | COMMENT |
| MEDIUM | src/borg/archiver/repo_space_cmd.py | 70 | # Create a new repository: | STRING |
| MEDIUM | src/borg/archiver/help_cmd.py | 227 | # Define the recursion root | STRING |
| MEDIUM | src/borg/legacy/fs.py | 111 | # This file is a cache directory tag created by Borg. | STRING |
| MEDIUM | src/borg/helpers/fs.py | 136 | # This file is a cache directory tag created by Borg. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | src/borg/archiver/completion_cmd.py | 133 | out=$( {PROG} repo-list "${repo_arg[@]}" --format '{id}{NL}' 2>/dev/null </dev/null ) | CODE |
| HIGH⚡ | src/borg/archiver/completion_cmd.py | 135 | out=$( {PROG} repo-list --format '{id}{NL}' 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 152 | out=$( {PROG} repo-list "${repo_arg[@]}" --format '{archive}{NL}' 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 154 | out=$( {PROG} repo-list --format '{archive}{NL}' 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 210 | out=$( {PROG} repo-list "${repo_arg[@]}" --format '{tags}{NL}' 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 212 | out=$( {PROG} repo-list --format '{tags}{NL}' 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 367 | 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 370 | 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 394 | out=$( {PROG} repo-list "${repo_arg[@]}" --format '{archive}{NL}' 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 396 | out=$( {PROG} repo-list --format '{archive}{NL}' 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 458 | out=$( {PROG} repo-list "${repo_arg[@]}" --format '{tags}{NL}' 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 460 | out=$( {PROG} repo-list --format '{tags}{NL}' 2>/dev/null </dev/null ) | CODE |
| HIGH | src/borg/archiver/completion_cmd.py | 784 | '{PROG} repo-list "$@" --format "{archive}{NL}" 2>/dev/null </dev/null; ' | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/blake3-optimize-mt-threshold.py | 125 | except Exception: | CODE |
| LOW | src/borg/webdav.py | 450 | except Exception: | CODE |
| MEDIUM | src/borg/webdav.py | 445 | def _guarded(self, method, *args): | CODE |
| LOW | src/borg/conftest.py | 32 | except Exception: | CODE |
| LOW | src/borg/conftest.py | 64 | except Exception: # nosec B110 | CODE |
| LOW | src/borg/cache.py | 884 | except Exception as err: | CODE |
| LOW | src/borg/cache.py | 1278 | except Exception as exc: | CODE |
| LOW | src/borg/fuse_impl.py | 23 | except Exception as err: | CODE |
| LOW | src/borg/fuse_impl.py | 36 | except Exception as err: | CODE |
| LOW | src/borg/fuse_impl.py | 49 | except Exception as err: # mfusepy raises OSError (not ImportError) if libfuse is missing | CODE |
| LOW | src/borg/logger.py | 186 | except Exception as err: # XXX be more precise | CODE |
| LOW | src/borg/digests.py | 121 | except Exception: # hashing is not expected to fail, but we must not die with a full queue | CODE |
| LOW | src/borg/archive.py | 2604 | except Exception: | CODE |
| LOW | src/borg/storelocking.py | 621 | except Exception as e: | CODE |
| LOW | src/borg/repository.py | 767 | except Exception: | CODE |
| LOW | src/borg/repository.py | 964 | except Exception as exc: | CODE |
| LOW | src/borg/crypto/key.py | 839 | except Exception as exc: # noqa: BLE001 - a corrupted borg key must not break unlocking via the others | CODE |
| LOW | src/borg/crypto/key.py | 947 | except Exception as exc: # noqa: BLE001 - a corrupted borg key must stay visible and removable | CODE |
| MEDIUM | src/borg/crypto/key.py | 533 | def _load(self, key_data, passphrase): | CODE |
| LOW | src/borg/crypto/keymanager.py | 76 | except Exception: # noqa: BLE001 - best-effort: a borg key without a parseable envelope has no label | CODE |
| LOW | src/borg/testsuite/logger_test.py | 67 | except Exception: | CODE |
| LOW | src/borg/testsuite/archiver/extract_cmd_test.py | 835 | except Exception: | CODE |
| LOW | src/borg/testsuite/archiver/remote_repo_test.py | 26 | except Exception: | CODE |
| LOW | src/borg/testsuite/archiver/remote_repo_test.py | 31 | except Exception: | CODE |
| LOW | src/borg/testsuite/helpers/lrucache_test.py | 124 | except Exception as e: | CODE |
| LOW | src/borg/archiver/__init__.py | 552 | except Exception: | CODE |
| LOW | src/borg/archiver/__init__.py | 560 | except Exception: | CODE |
| LOW | src/borg/archiver/__init__.py | 634 | except Exception: | STRING |
| LOW | src/borg/archiver/__init__.py | 674 | except Exception as e: | STRING |
| LOW | src/borg/legacy/remote.py | 285 | except Exception: | CODE |
| MEDIUM | src/borg/legacy/remote.py | 71 | def __init__(self, data): | CODE |
| LOW⚡ | src/borg/legacy/fs.py | 48 | except Exception: | CODE |
| LOW⚡ | src/borg/legacy/fs.py | 54 | except Exception: # nosec B110 | CODE |
| LOW | src/borg/legacy/fs.py | 71 | except Exception: # nosec B110 | CODE |
| LOW | src/borg/legacy/repository.py | 998 | except Exception as exc: | CODE |
| LOW | src/borg/cockpit/runner.py | 58 | except Exception as e: | CODE |
| LOW | src/borg/helpers/time.py | 266 | except Exception: | CODE |
| LOW⚡ | src/borg/helpers/msgpack.py | 105 | except Exception as e: | CODE |
| LOW⚡ | src/borg/helpers/msgpack.py | 113 | except Exception as e: | CODE |
| LOW⚡ | src/borg/helpers/msgpack.py | 121 | except Exception as e: | CODE |
| LOW | src/borg/helpers/msgpack.py | 163 | except Exception as e: | CODE |
| LOW | src/borg/helpers/msgpack.py | 171 | except Exception as e: | CODE |
| LOW | src/borg/helpers/msgpack.py | 184 | except Exception as e: | CODE |
| LOW | src/borg/helpers/msgpack.py | 195 | except Exception as e: | CODE |
| MEDIUM | src/borg/helpers/msgpack.py | 102 | def pack(self, obj): | CODE |
| MEDIUM | src/borg/helpers/msgpack.py | 158 | def unpack(self): | CODE |
| MEDIUM | src/borg/helpers/msgpack.py | 166 | def __next__(self): | CODE |
| LOW | src/borg/helpers/__init__.py | 217 | except Exception: # nosec B110 | CODE |
| LOW | src/borg/helpers/process.py | 406 | except Exception: | CODE |
| LOW | src/borg/helpers/parseformat.py | 508 | except Exception as e: | CODE |
| MEDIUM | src/borg/helpers/parseformat.py | 52 | def hex_to_bin(hex, length=None): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/conf.py | 1 | # Documentation build configuration file, created by | COMMENT |
| LOW | docs/conf.py | 61 | # language = None | COMMENT |
| LOW | docs/conf.py | 81 | # add_function_parentheses = True | COMMENT |
| LOW | docs/conf.py | 121 | COMMENT | |
| LOW | docs/conf.py | 181 | COMMENT | |
| LOW | scripts/rest_perf_test.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/workflows/release.yml | 1 | # Release automation: build the source distribution, publish it to PyPI and | COMMENT |
| LOW | .github/workflows/32bit.yml | 1 | # 32-bit test: build and test borg on armv7 (32-bit) under qemu user-mode | COMMENT |
| LOW | .github/workflows/fame.yml | 1 | # Refresh FAME.md and FAME.svg, the contributor summary generated by | COMMENT |
| LOW | .github/workflows/ci.yml | 101 | # a detailed error report to stderr, including a stack trace, and forces the process to exit with | COMMENT |
| LOW | .github/workflows/ci.yml | 861 | # This job can not live in release.yml with the rest of the release code: | COMMENT |
| LOW | .github/workflows/bigendian.yml | 1 | # Big-endian test: build and test borg on s390x (big-endian) under qemu | COMMENT |
| LOW | src/borg/paperkey.html | 21 | // https://github.com/kazuhikoarase/qrcode-generator/blob/master/js/qrcode.js | COMMENT |
| LOW | src/borg/constants.py | 81 | COMMENT | |
| LOW | src/borg/constants.py | 121 | # borg serve (borg.legacy.remote) read() buffer size | COMMENT |
| LOW | src/borg/cache.py | 661 | # CHUNKINDEX_FRAGMENT_ENTRIES_MAX entries, so no single fragment gets too large (even the one | COMMENT |
| LOW | src/borg/cache.py | 741 | COMMENT | |
| LOW | src/borg/cache.py | 861 | ): | COMMENT |
| LOW | src/borg/storelocking.py | 341 | # refresh): we are obviously alive and can refresh or release it, so it must never | COMMENT |
| LOW | src/borg/storelocking.py | 361 | # residual risk: a store clock that steps BACK by more than the stale timeout during | COMMENT |
| LOW | src/borg/storelocking.py | 561 | try: | COMMENT |
| LOW | src/borg/repository.py | 961 | # while unwinding an error, a pack store may still be in flight: join it, so a stored | COMMENT |
| LOW | src/borg/crypto/key.py | 41 | KEYFILE_ID = "BORG_KEY" | COMMENT |
| LOW | src/borg/crypto/key.py | 281 | # IDHASH_NAME -> "borg repo-create --id-hash" (id hash function) | COMMENT |
| LOW | src/borg/crypto/key.py | 301 | # Whether a key of this class may be stored as a keyfile or as a repokey (configurable at | COMMENT |
| LOW | src/borg/crypto/key.py | 321 | id_check_is_authentication: ClassVar[bool] = True | COMMENT |
| LOW | src/borg/crypto/key.py | 1361 | id_check_is_authentication = False | COMMENT |
| LOW | src/borg/testsuite/legacyrepository_test.py | 441 | # this tests the shadowing-by-double-put behaviour, see issue #5661 | COMMENT |
| LOW | src/borg/testsuite/archiver/prune_cmd_test.py | 201 | COMMENT | |
| LOW | src/borg/testsuite/archiver/__init__.py | 121 | return exec_fn | COMMENT |
| LOW | src/borg/testsuite/archiver/__init__.py | 261 | os.symlink("somewhere", os.path.join(input_path, "link1")) | COMMENT |
| LOW | src/borg/testsuite/archiver/__init__.py | 521 | def fuse_mount(archiver, mountpoint=None, *options, fork=True, os_fork=False, **kwargs): | COMMENT |
| LOW | src/borg/archiver/tar_cmds.py | 121 | # - possibly Linux capabilities, security.* xattrs (TODO) | COMMENT |
| LOW | src/borg/archiver/tar_cmds.py | 361 | # For one the compressor runs on the same thread as the program using the | COMMENT |
| LOW | src/borg/archiver/__init__.py | 341 | # which might be different in the case of a forced command or same otherwise. | COMMENT |
| LOW | src/borg/legacy/remote.py | 81 | class ConnectionBrokenWithHint(Error): | COMMENT |
| LOW | src/borg/legacy/remote.py | 341 | COMMENT | |
| LOW | src/borg/legacy/repository.py | 661 | # (which may grow the index up to twice its current size). | COMMENT |
| LOW | src/borg/legacy/repository.py | 821 | # However, this only happens if the crash also affects the FS to the effect that file deletions | COMMENT |
| LOW | src/borg/legacy/repository.py | 841 | # Now we crash. But only segment 2 gets deleted, while segment 1 is still around. Now key 1 | COMMENT |
| LOW | src/borg/helpers/process.py | 341 | # (non-matching) libraries from there. | COMMENT |
| LOW | src/borg/helpers/parseformat.py | 741 | # locations that borg parses itself, see ssh_re / rest_re / file_re below. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/rest_perf_test.sh | 3 | # rest_perf_test.sh - borg2 performance harness for rest:// repositories. | COMMENT |
| LOW | src/borg/archive.py | 974 | # we just use the existing one and do not remove it. | COMMENT |
| LOW | src/borg/archive.py | 2362 | # collecting any key we encounter in a damaged repo seems unwise, thus we just use | COMMENT |
| MEDIUM | src/borg/archive.py | 2074 | """A restartable/robust version of the streaming msgpack unpacker""" | STRING |
| LOW | src/borg/crypto/key.py | 1482 | # setting: the advantages of the individual session keys just add up, so the quantity that matters | COMMENT |
| LOW | src/borg/testsuite/repoobj_test.py | 119 | # Here, we just use len_data. For Borg transfer, we also know the size from another metadata source. | COMMENT |
| MEDIUM | src/borg/testsuite/platform/linux_test.py | 88 | # Testing non-ASCII ACL processing to see whether our code is robust. | STRING |
| LOW | src/borg/testsuite/archiver/extract_cmd_test.py | 1048 | # we should just use the existing directory and not remove/recreate it. | COMMENT |
| MEDIUM | src/borg/testsuite/archiver/completion_cmd_test.py | 649 | # the harness' compadd stub prints the candidates - replace it by one printing the descriptions | COMMENT |
| MEDIUM | src/borg/testsuite/archiver/benchmark_cmd_test.py | 23 | # Filter for JSON lines only; the test harness merges stdout and stderr, | COMMENT |
| MEDIUM⚡ | src/borg/legacy/fs.py | 38 | # 2. Prefer HOME, but be robust against mount helpers that set HOME to root's home for non-root users. | COMMENT |
| LOW | src/borg/helpers/fs.py | 532 | fname, parent_fd = path, None # just use the path | CODE |
| LOW | src/borg/helpers/fs.py | 577 | fname, parent_fd = path, None # just use the path | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/borg/manifest.py | 108 | CODE | |
| LOW | src/borg/manifest.py | 365 | CODE | |
| LOW | src/borg/vfs.py | 72 | CODE | |
| LOW | src/borg/archive.py | 560 | CODE | |
| LOW | src/borg/archive.py | 2136 | CODE | |
| LOW | src/borg/archive.py | 2443 | CODE | |
| LOW | src/borg/archive.py | 2732 | CODE | |
| LOW | src/borg/testsuite/archiver/__init__.py | 186 | CODE | |
| LOW | src/borg/archiver/_common.py | 79 | CODE | |
| LOW | src/borg/archiver/__init__.py | 591 | CODE | |
| LOW | src/borg/legacy/archives.py | 210 | CODE | |
| LOW | src/borg/helpers/msgpack.py | 126 | CODE | |
| LOW | src/borg/helpers/yes_no.py | 17 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/borg/archiver/completion_cmd.py | 125 | # Check if completing aid: prefix | COMMENT |
| LOW | src/borg/archiver/completion_cmd.py | 356 | # Check if completing aid: prefix | COMMENT |
| LOW | src/borg/archiver/transfer_cmd.py | 59 | # Check if the chunk is already in the repository | COMMENT |
| LOW | src/borg/archiver/list_cmd.py | 68 | # Check if the item matches the patterns/paths. | COMMENT |
| LOW | src/borg/archiver/__init__.py | 513 | # Open the file early, before running the main program, to avoid | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | src/borg/paperkey.html | 2346 | typein.classList.add("placeholder"); | CODE |
| LOW⚡ | src/borg/paperkey.html | 2347 | svg.classList.add("placeholder"); | CODE |
| LOW⚡ | src/borg/paperkey.html | 2357 | typein.classList.remove("placeholder"); | CODE |
| LOW⚡ | src/borg/paperkey.html | 2358 | svg.classList.remove("placeholder"); | CODE |
| LOW | src/borg/testsuite/legacyrepository_test.py | 956 | assert remote_repository.ssh_cmd(Location("ssh://user@example.com/foo")) == ["ssh", "user@example.com"] | CODE |
| LOW | src/borg/testsuite/legacyrepository_test.py | 961 | "user@example.com", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/borg/constants.py | 262 | # if you still need to, you can use "borg key migrate-to-repokey" with borg 1.0, 1.1 and 1.2. | COMMENT |
| LOW | src/borg/archiver/create_cmd.py | 563 | # we better do a fresh stat on the file, just to make sure to get the current file | COMMENT |
| LOW | src/borg/legacy/upgrade.py | 62 | # make sure we only have desired stuff in the new item. specifically, make sure to get rid of: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | src/borg/repoobj.py | 118 | def set_assert_id_place(self, place: str) -> None: | CODE |
| LOW | src/borg/legacy/repoobj.py | 15 | def set_assert_id_place(self, place: str) -> None: | CODE |
| LOW | src/borg/cockpit/widgets.py | 197 | def _update_art(self) -> None: | CODE |
| LOW | src/borg/cockpit/widgets.py | 256 | def update_art(self) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/rest_perf_test.sh | 15 | # Usage: | COMMENT |