BleachBit system cleaner for Windows and Linux
This report summarizes scanner evidence for bleachbit/bleachbit, a Python project with 7,073 GitHub stars. SynthScan examined 63,646 lines of code across 250 source files, recording 1007 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 17.8 (Elevated pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 818 finding(s).
Are imports declared and package/API names verified? 12 finding(s).
Are wrappers, guards, and repeated structures necessary? 810 finding(s).
Which changes need focused human review? 1007 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 1007 distinct pattern matches across 16 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/TestExternalCommand.py | 39 | def is_bleachbit_running_process(process_name, cmdline): | CODE |
| LOW | tests/TestExternalCommand.py | 63 | def wait_for_process_tree_windows(process, timeout=60, poll_interval=0.1): | CODE |
| LOW | tests/TestExternalCommand.py | 175 | def _is_running_based_on_checks(self, is_process_running, window_open): | CODE |
| LOW | tests/TestExternalCommand.py | 353 | def _get_shred_command_string(self, file_to_shred): | CODE |
| LOW | tests/TestExternalCommand.py | 387 | def test_windows_explorer_context_menu_natural(self): | CODE |
| LOW | tests/TestExternalCommand.py | 399 | def test_windows_explorer_context_menu_privilege_escalation(self): | CODE |
| LOW | tests/TestExternalCommand.py | 411 | def test_context_menu_command_while_the_app_is_running(self): | CODE |
| LOW⚡ | tests/TestExternalCommand.py | 440 | def _test_as_non_admin_with_context_menu_path(self, fn_prefix): | CODE |
| LOW⚡ | tests/TestExternalCommand.py | 450 | def shell_execute_synchronous(lpVerb='', lpFile='', lpParameters='', nShow=''): | CODE |
| LOW | tests/TestExternalCommand.py | 490 | def test_is_bleachbit_running_process(self): | CODE |
| LOW | tests/TestExternalCommand.py | 543 | def test_wait_for_grandchild_process(self): | CODE |
| LOW | tests/TestTranslations.py | 79 | def test_nsis_placeholders_match(self): | CODE |
| LOW | tests/TestGtkShim.py | 88 | def test_unknown_error_includes_traceback_and_sysinfo(self): | CODE |
| LOW | tests/TestGtkShim.py | 104 | def test_unknown_error_escapes_html_in_error_message(self): | CODE |
| LOW | tests/TestGtkShim.py | 126 | def test_yes_writes_html_file(self): | CODE |
| LOW | tests/TestGtkShim.py | 139 | def test_no_does_not_write_file(self): | CODE |
| LOW | tests/TestGtkShim.py | 159 | def test_unknown_error_includes_traceback_in_html(self): | CODE |
| LOW | tests/TestGtkShim.py | 189 | def test_valid_unicode_unchanged(self): | CODE |
| LOW | tests/TestGtkShim.py | 205 | def test_restored_on_exception(self): | CODE |
| LOW | tests/TestGtkShim.py | 215 | def test_restores_reference_identity(self): | CODE |
| LOW | tests/TestGtkShim.py | 263 | def test_no_display_does_not_import_gtk_libraries(self): | STRING |
| LOW | tests/TestGtkShim.py | 297 | def test_require_gtk_reports_deferred_import_failure(self): | STRING |
| LOW | tests/TestWipe.py | 46 | def test_detect_orphaned_wipe_files(self): | CODE |
| LOW | tests/TestWipe.py | 119 | def test_wipe_write_refuses_symlink(self): | CODE |
| LOW | tests/TestWipe.py | 140 | def test_wipe_contents_windows_admin_reopen_refuses_symlink(self): | CODE |
| LOW | tests/TestWipe.py | 156 | def test_wipe_contents_windows_admin_locked_fallback_refuses_symlink(self): | CODE |
| LOW | tests/TestWipe.py | 178 | def test_wipe_contents_windows_admin_locked_fallback_still_works(self): | CODE |
| LOW | tests/TestWipe.py | 244 | def test_wipe_name_when_basic_characters_exist(self): | CODE |
| LOW | tests/TestWipe.py | 273 | def test_wipe_name_rejects_windows_invalid_names(self): | CODE |
| LOW | tests/TestWipe.py | 293 | def test_wipe_name_allows_windows_reserved_names_on_linux(self): | CODE |
| LOW | tests/TestWipe.py | 305 | def test_wipe_name_non_retryable_error(self): | CODE |
| LOW | tests/TestWipe.py | 353 | def test_wipe_path_world_writable_warns(self): | CODE |
| LOW | tests/TestWipe.py | 396 | def test_wipe_path_not_directory(self): | CODE |
| LOW | tests/TestWipe.py | 422 | def test_wipe_path_tempfile_enametoolong_retry(self): | CODE |
| LOW | tests/TestWipe.py | 441 | def test_wipe_path_write_enospc(self): | CODE |
| LOW | tests/TestWipe.py | 464 | def test_wipe_path_write_persistent_edquot(self): | CODE |
| LOW | tests/TestWipe.py | 507 | def test_wipe_path_fsync_edquot(self): | CODE |
| LOW | tests/TestWipe.py | 556 | def test_wipe_path_write_efbig(self): | CODE |
| LOW | tests/TestWipe.py | 565 | def test_wipe_path_flush_enospc(self): | CODE |
| LOW | tests/TestWipe.py | 584 | def test_wipe_path_idle_yields_eta(self): | CODE |
| LOW | tests/TestWipe.py | 615 | def test_is_wipe_path_readonly_posix(self): | CODE |
| LOW | tests/TestWipe.py | 646 | def test_wipe_path_readonly_drive(self): | CODE |
| LOW | tests/TestWipe.py | 663 | def test_wipe_path_readonly_drive_detection_missed(self): | CODE |
| LOW | tests/TestWipe.py | 688 | def test_wipe_path_tempfile_write_denied(self): | CODE |
| LOW | tests/TestWipe.py | 711 | def test_wipe_path_tempfile_permission_denied_raises(self): | CODE |
| LOW | tests/TestWipe.py | 728 | def test_wipe_path_full_writable_fs_still_attempts(self): | CODE |
| LOW | tests/TestWipe.py | 742 | def test_wipe_path_cleanup_finally(self): | CODE |
| LOW | tests/TestGuiBasic.py | 28 | def test_open_url_rejects_disallowed_scheme(self): | CODE |
| LOW | tests/TestGuiBasic.py | 51 | def test_open_url_accepts_http_https(self): | CODE |
| LOW | tests/TestNsisUtilities.py | 34 | def test_generate_add_remove_nsis_expressions(self): | CODE |
| LOW | tests/TestNsisUtilities.py | 66 | def _generate_nsis_expressions(self, tree): | CODE |
| LOW | tests/TestNsisUtilities.py | 95 | def _generate_nsis_expressions_helper(self, target_dir, tree, expected_install_expression, | CODE |
| LOW | tests/TestNsisUtilities.py | 120 | def test_walk_with_parent_directory_and_filepaths(self): | CODE |
| LOW | tests/TestNsisUtilities.py | 125 | def test_write_nsis_expressions_to_files(self): | CODE |
| LOW | tests/TestNsisUtilities.py | 172 | def test_generate_delete_expressions(self): | CODE |
| LOW | tests/TestNsisUtilities.py | 249 | def _generate_install_file_expression(cls, files): | CODE |
| LOW | tests/TestNsisUtilities.py | 254 | def _generate_delete_expressions(cls, folder, files): | CODE |
| LOW⚡ | tests/TestNsisUtilities.py | 265 | def _generate_setoutpath_expression(cls, dirname, subdir): | CODE |
| LOW⚡ | tests/TestNsisUtilities.py | 269 | def _generate_rmdir_expression(cls, dirname, subdir): | CODE |
| LOW⚡ | tests/TestNsisUtilities.py | 273 | def _generate_dir_subdir_expression(cls, command, dirname, subdir): | CODE |
| 572 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_with_sudo.py | 122 | except Exception as e: | CODE |
| MEDIUM | tests/test_with_sudo.py | 123 | print(f"Error running sudo tests: {e}") | CODE |
| LOW | tests/TestNsisUtilities.py | 206 | except Exception: | CODE |
| LOW | tests/TestFileUtilities.py | 1267 | except Exception: | CODE |
| LOW | tests/TestWipePath.py | 279 | except Exception: | CODE |
| LOW | tests/TestWipePath.py | 448 | except Exception: | CODE |
| MEDIUM | tests/TestWipePath.py | 512 | print(f"Error: unsupported filesystem(s): {', '.join(invalid)}") | CODE |
| LOW | tests/TestOptions.py | 662 | except Exception as error: | STRING |
| LOW | tests/TestOptions.py | 668 | except Exception as error: | STRING |
| MEDIUM | tests/TestOptions.py | 659 | def restore(): | CODE |
| MEDIUM | tests/TestOptions.py | 665 | def set_option(): | CODE |
| LOW | tests/TestProtectedPath.py | 456 | except Exception: | CODE |
| LOW | tests/TestGeneral.py | 120 | except Exception: | CODE |
| LOW | tests/common.py | 425 | except Exception: | CODE |
| MEDIUM | tests/common.py | 417 | def check_exists(func, path): | CODE |
| MEDIUM | tests/TestWindowsWipe.py | 115 | print(f"Error opening {path}: {e}") | CODE |
| LOW | bleachbit/Update.py | 130 | except Exception: | CODE |
| LOW | bleachbit/Bootstrap.py | 35 | except Exception as e: | CODE |
| LOW | bleachbit/Bootstrap.py | 121 | except Exception: | CODE |
| LOW | bleachbit/Bootstrap.py | 128 | except Exception: | CODE |
| LOW | bleachbit/Bootstrap.py | 169 | except Exception: | CODE |
| LOW | bleachbit/Worker.py | 110 | except Exception as e: | CODE |
| LOW | bleachbit/Worker.py | 403 | except Exception: | CODE |
| LOW | bleachbit/Options.py | 191 | except Exception: | CODE |
| LOW | bleachbit/Options.py | 303 | except Exception: | CODE |
| LOW | bleachbit/Options.py | 500 | except Exception: | CODE |
| LOW | bleachbit/Options.py | 547 | except Exception: | CODE |
| LOW | bleachbit/Options.py | 559 | except Exception: | CODE |
| LOW | bleachbit/GuiStartup.py | 193 | except Exception as e: | CODE |
| MEDIUM | bleachbit/GuiWindow.py | 1337 | def _worker(): | CODE |
| LOW | bleachbit/GuiWindow.py | 306 | except Exception as e: | CODE |
| LOW | bleachbit/GuiWindow.py | 320 | except Exception as e: | CODE |
| LOW | bleachbit/GuiWindow.py | 753 | except Exception: | CODE |
| LOW | bleachbit/GuiWindow.py | 833 | except Exception: | CODE |
| LOW | bleachbit/GuiWindow.py | 880 | except Exception: | CODE |
| LOW | bleachbit/GuiWindow.py | 1340 | except Exception: | CODE |
| LOW | bleachbit/GuiWindow.py | 1394 | except Exception as e: | CODE |
| LOW | bleachbit/Command.py | 82 | except Exception as e: | CODE |
| LOW | bleachbit/Command.py | 185 | except Exception as e: | CODE |
| LOW | bleachbit/Unix.py | 70 | except Exception as errormsg: | CODE |
| LOW | bleachbit/Unix.py | 360 | except Exception as e: | CODE |
| LOW | bleachbit/Unix.py | 396 | except Exception as e: | CODE |
| LOW | bleachbit/Unix.py | 1148 | except Exception as e: | CODE |
| LOW | bleachbit/FileUtilities.py | 491 | except Exception: | CODE |
| LOW | bleachbit/Memory.py | 136 | except Exception: | CODE |
| LOW | bleachbit/Memory.py | 200 | except Exception: | CODE |
| LOW | bleachbit/Memory.py | 274 | except Exception: | CODE |
| LOW | bleachbit/WindowsWipe.py | 702 | except Exception: | CODE |
| LOW | bleachbit/WindowsWipe.py | 1134 | except Exception as e: | CODE |
| LOW | bleachbit/WindowsWipe.py | 1178 | except Exception: | CODE |
| LOW | bleachbit/GuiPreferences.py | 691 | except Exception as e: | CODE |
| LOW | bleachbit/GtkShim.py | 181 | except Exception: | CODE |
| LOW | bleachbit/GtkShim.py | 258 | except Exception as e: | STRING |
| LOW | bleachbit/GtkShim.py | 345 | except Exception as e: | CODE |
| LOW | bleachbit/GtkShim.py | 393 | except Exception as e: | CODE |
| LOW | bleachbit/Action.py | 478 | except Exception as e: | CODE |
| LOW | bleachbit/Action.py | 488 | except Exception as e: | CODE |
| LOW | bleachbit/Action.py | 612 | except Exception as e: | CODE |
| MEDIUM | bleachbit/Action.py | 608 | def run_process(): | CODE |
| LOW | bleachbit/GuiChaff.py | 174 | except Exception as exc: | CODE |
| 49 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bleachbit.py | 17 | CODE | |
| LOW | tests/TestExternalCommand.py | 63 | CODE | |
| LOW | tests/TestExternalCommand.py | 137 | CODE | |
| LOW | tests/TestExternalCommand.py | 208 | CODE | |
| LOW | tests/TestTranslations.py | 28 | CODE | |
| LOW | tests/test_with_sudo.py | 38 | CODE | |
| LOW | tests/TestWipe.py | 688 | CODE | |
| LOW | tests/TestWipe.py | 711 | CODE | |
| LOW | tests/TestFileUtilities.py | 224 | CODE | |
| LOW | tests/TestFileUtilities.py | 294 | CODE | |
| LOW | tests/TestFileUtilities.py | 953 | CODE | |
| LOW | tests/TestFileUtilities.py | 1242 | CODE | |
| LOW | tests/TestWinapp.py | 80 | CODE | |
| LOW | tests/TestCookie.py | 150 | CODE | |
| LOW | tests/TestOptions.py | 525 | CODE | |
| LOW | tests/TestOptions.py | 586 | CODE | |
| LOW | tests/TestCommon.py | 79 | CODE | |
| LOW | tests/TestProtectedPath.py | 441 | CODE | |
| LOW | tests/TestProtectedPath.py | 445 | CODE | |
| LOW | tests/TestGeneral.py | 280 | CODE | |
| LOW | tests/TestGeneral.py | 378 | CODE | |
| LOW | tests/TestLanguage.py | 482 | CODE | |
| LOW | tests/common.py | 660 | CODE | |
| LOW | tests/common.py | 368 | CODE | |
| LOW | tests/TestAction.py | 93 | CODE | |
| LOW | tests/TestAction.py | 159 | CODE | |
| LOW | tests/TestWindows.py | 775 | CODE | |
| LOW | tests/TestWindows.py | 894 | CODE | |
| LOW | tests/TestWindows.py | 1006 | CODE | |
| LOW | tests/TestWindows.py | 1212 | CODE | |
| LOW | tests/TestNetwork.py | 279 | CODE | |
| LOW | tests/TestCLI.py | 253 | CODE | |
| LOW | tests/TestCLI.py | 433 | CODE | |
| LOW | tests/TestCLI.py | 443 | CODE | |
| LOW | tests/TestCLI.py | 453 | CODE | |
| LOW | tests/TestCLI.py | 464 | CODE | |
| LOW | tests/TestCLI.py | 475 | CODE | |
| LOW | tests/TestCLI.py | 513 | CODE | |
| LOW | tests/TestCLI.py | 525 | CODE | |
| LOW | tests/TestWindowsWipe.py | 345 | CODE | |
| LOW | tests/TestMemory.py | 52 | CODE | |
| LOW | tests/TestMemory.py | 65 | CODE | |
| LOW | tests/TestMemory.py | 300 | CODE | |
| LOW | tests/TestMemory.py | 497 | CODE | |
| LOW | tests/TestMemory.py | 525 | CODE | |
| LOW | tests/TestCleaner.py | 345 | CODE | |
| LOW | tests/TestCleaner.py | 399 | CODE | |
| LOW | bleachbit/Worker.py | 96 | CODE | |
| LOW | bleachbit/Worker.py | 169 | CODE | |
| LOW | bleachbit/Worker.py | 223 | CODE | |
| LOW | bleachbit/GuiStartup.py | 270 | CODE | |
| LOW | bleachbit/GuiWindow.py | 429 | CODE | |
| LOW | bleachbit/GuiWindow.py | 686 | CODE | |
| LOW | bleachbit/GuiWindow.py | 1026 | CODE | |
| LOW | bleachbit/Command.py | 163 | CODE | |
| LOW | bleachbit/Unix.py | 346 | CODE | |
| LOW | bleachbit/Unix.py | 95 | CODE | |
| LOW | bleachbit/Unix.py | 126 | CODE | |
| LOW | bleachbit/FileUtilities.py | 124 | CODE | |
| LOW | bleachbit/FileUtilities.py | 388 | CODE | |
| 47 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | scripts/test_freebsd.sh | 320 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/test_freebsd.sh | 322 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 79 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 81 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 166 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 168 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 223 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 225 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 240 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 242 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 265 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 267 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 349 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 351 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 373 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 375 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 397 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 401 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 415 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 417 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 439 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 441 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 454 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/test_freebsd.sh | 456 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/TestGeneral.py | 94 | except KeyError: | CODE |
| HIGH | bleachbit/GuiStartup.py | 215 | except FileNotFoundError: | CODE |
| HIGH | bleachbit/FileUtilities.py | 801 | except UnicodeDecodeError: | CODE |
| HIGH | bleachbit/FileUtilities.py | 206 | except OSError: | CODE |
| HIGH | bleachbit/FileUtilities.py | 1025 | except FileNotFoundError: | CODE |
| HIGH | bleachbit/Process.py | 129 | except OSError: | CODE |
| HIGH | bleachbit/Process.py | 132 | except TypeError: | CODE |
| HIGH | bleachbit/General.py | 264 | except (KeyError, OSError): | CODE |
| HIGH | bleachbit/Mac.py | 533 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | requirements.txt | 1 | # These are universal dependencies. | COMMENT |
| LOW | tests/TestWipePath.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | tests/TestWinapp.py | 281 | # 0=line to write directly to winapp2.ini | COMMENT |
| LOW | tests/TestWinapp.py | 401 | # [0] = Body of winapp2.ini configuration | COMMENT |
| LOW | tests/TestCommand.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | tests/TestNetwork.py | 21 | # Suppress urllib3's NotOpenSSLWarning (raised when the ssl module is | COMMENT |
| LOW | tests/TestUpdate.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | tests/TestChaff.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/Update.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/Bootstrap.py | 101 | win32api.SetErrorMode(win32con.SEM_FAILCRITICALERRORS | | COMMENT |
| LOW | bleachbit/Options.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/Command.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/GuiBasic.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/Memory.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/Log.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/FontCheckDialog.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/WindowsWipe.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/WindowsWipe.py | 1241 | return | COMMENT |
| LOW | bleachbit/GuiPreferences.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/GuiChaff.py | 41 | # TRANSLATORS: Option in a combo box for choosing the stop condition | COMMENT |
| LOW | bleachbit/Cleaner.py | 721 | COMMENT | |
| LOW | bleachbit/Wipe.py | 541 | # EFBIG (generic_write_check_limits). | COMMENT |
| LOW | bleachbit/Wipe.py | 601 | # TRANSLATORS: Debug message showing disk space available to the root (admin) user. | COMMENT |
| LOW | bleachbit/Language.py | 521 | assert isinstance(locale_dir, str), f"locale_dir: {locale_dir}" | COMMENT |
| LOW | bleachbit/Language.py | 541 | # is a GNU gettext-specific extension used purely as a | COMMENT |
| LOW | bleachbit/CleanerML.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/DeepScan.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/Special.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/Special.py | 501 | # to the query we could cause an error in execute_sqlite3 since | COMMENT |
| LOW | bleachbit/GUI.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/ProtectedPath.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/General.py | 1 | # vim: ts=4:sw=4:expandtab | COMMENT |
| LOW | bleachbit/Mac.py | 21 | from bleachbit.Language import normalize_locale_code | COMMENT |
| LOW | scripts/install-deps.sh | 1 | #!/bin/sh | COMMENT |
| LOW | scripts/install-deps.sh | 21 | # VENV_DIR=/path) and installs pure-Python dependencies into it via pip. | COMMENT |
| LOW | scripts/test_freebsd.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/test_freebsd.sh | 21 | # snapshot, seed ISO, SSH key, and VM metadata are kept in $CACHE_DIR/vm. | COMMENT |
| LOW | scripts/test_freebsd.sh | 41 | # DISPLAY/WAYLAND_DISPLAY), so bleachbit.GtkShim.is_gtk_available() returns | COMMENT |
| LOW | scripts/test_freebsd.sh | 61 | # install-deps.sh --dev block, going straight to copying | COMMENT |
| LOW | scripts/test_freebsd.sh | 441 | # --------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | bleachbit/GuiWindow.py | 1064 | self.status_bar.push(context_id, text) | CODE |
| HIGH⚡ | bleachbit/Special.py | 386 | "where moz_bookmarks.id is null); " | CODE |
| HIGH⚡ | bleachbit/Special.py | 393 | cmds += "update moz_places set visit_count=0, frecency=-1, last_visit_date=null;" | CODE |
| HIGH⚡ | bleachbit/Special.py | 400 | "where moz_places.id is null); " | CODE |
| HIGH | bleachbit/Special.py | 411 | "from moz_places where favicon_id is not null ); " | CODE |
| HIGH | bleachbit/Special.py | 473 | "where fk is not null){filter}") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/TestNetwork.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Update.py | 41 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Worker.py | 30 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Options.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/GuiStartup.py | 22 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Command.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Unix.py | 29 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/GuiBasic.py | 40 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/FileUtilities.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/DesktopMenuOptions.py | 10 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Chaff.py | 21 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Memory.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/SystemInformation.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/WindowsWipe.py | 142 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/GuiPreferences.py | 47 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/GtkShim.py | 102 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Action.py | 31 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Cookie.py | 20 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/GuiChaff.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Cleaner.py | 38 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Wipe.py | 34 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/CLI.py | 24 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/GuiCookie.py | 25 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Language.py | 14 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Winapp.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Network.py | 54 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/CleanerML.py | 45 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Windows.py | 81 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Special.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/GUI.py | 36 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/ProtectedPath.py | 44 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/General.py | 39 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/RecognizeCleanerML.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | bleachbit/Mac.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | windows/setup.py | 49 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/TestFileUtilities.py | 575 | # Create a normal directory and file inside the base directory | COMMENT |
| MEDIUM | tests/TestRecognizeCleanerML.py | 32 | # Create a CleanerML file so list_cleanerml_files() returns a file, | COMMENT |
| MEDIUM | tests/TestCommon.py | 296 | # Create a file in the current directory | COMMENT |
| MEDIUM | tests/TestSpecial.py | 816 | # Create a valid SQLite database | COMMENT |
| MEDIUM | tests/TestSystemInformation.py | 136 | # Create a directory with Unicode characters that will have a short path | COMMENT |
| MEDIUM | tests/TestWorker.py | 80 | # Create a file that physically exists at listing time. | COMMENT |
| MEDIUM | tests/TestCleaner.py | 577 | # Create the file | COMMENT |
| MEDIUM | bleachbit/GuiCookie.py | 112 | # Create the TreeView | COMMENT |
| MEDIUM | bleachbit/General.py | 359 | # Define the current operating system. | COMMENT |
| MEDIUM⚡ | scripts/test_freebsd.sh | 321 | # Create a snapshot qcow2 backed by the cached image, then grow it | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/TestExternalCommand.py | 435 | if p.poll() is None: # Check if process is still running | CODE |
| LOW | tests/TestWipe.py | 51 | # Set shred_drives to include our temp directory | COMMENT |
| LOW | tests/TestWindowsWipe.py | 341 | # Close the file handle to release the lock | COMMENT |
| LOW | tests/TestWorker.py | 171 | # Open the file with a blocking handle that allows read/write but blocks delete. | COMMENT |
| LOW | bleachbit/GuiStartup.py | 36 | # Check if old_version < target_version | COMMENT |
| LOW | bleachbit/GuiStartup.py | 319 | # Check if any selected cleaning option has a warning | COMMENT |
| LOW | bleachbit/GuiWindow.py | 361 | # Check if splash screen is forced via environment variable | COMMENT |
| LOW | bleachbit/GuiWindow.py | 962 | # Check if this option has a cookie command | COMMENT |
| LOW | bleachbit/GuiWindow.py | 969 | # Check if this is the system.custom option | COMMENT |
| LOW | bleachbit/GuiPreferences.py | 792 | # Check if user already confirmed this path | COMMENT |
| LOW | bleachbit/Wipe.py | 170 | # Set range to the entire filesystem | COMMENT |
| LOW | bleachbit/Winapp.py | 484 | # Check if this registry key is excluded (exact match or starts with exclusion) | COMMENT |
| LOW | bleachbit/Winapp.py | 489 | # Check if the path matches the exclusion (exact match or starts with exclusion) | COMMENT |
| LOW | bleachbit/Windows.py | 515 | # Check if this key is excluded | COMMENT |
| LOW | bleachbit/Windows.py | 520 | # Check if the key matches the exclusion (exact match or is a child of exclusion) | COMMENT |
| LOW | bleachbit/Windows.py | 546 | # Check if any child keys are excluded | COMMENT |
| LOW | bleachbit/ProtectedPath.py | 198 | # Check if user path is a parent of protected path | COMMENT |
| LOW | bleachbit/ProtectedPath.py | 204 | # Check if user path is a child of protected path (within depth) | COMMENT |
| LOW | windows/setup.py | 323 | # Check if target file exists and compare content | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/TestExternalCommand.py | 64 | Wait for a process and its grandchildren to complete on Windows. This function handles the case where a child proce | STRING |
| HIGH | bleachbit/FileUtilities.py | 859 | Execute SQL commands on SQLite database Args: path (str): Path to the SQLite database file cmds (st | STRING |
| HIGH | bleachbit/Cookie.py | 162 | Process cookies with optional deletion based on keep list Args: path (str): Path to the cookies database fi | STRING |
| HIGH | bleachbit/Network.py | 125 | Fetch a URL using requests library Args: url (str): URL to fetch content from max_retries (int, opt | STRING |
| HIGH | bleachbit/Mac.py | 677 | Process Safari cookies with optional deletion based on keep list Args: path (str): Path to the cookies data | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/TestCleaner.py | 425 | # The nesting is the scaffolding that patches the filesystem. | COMMENT |
| MEDIUM | bleachbit/Constant.py | 38 | # Expert mode is an option in the preferences to relax guardrails. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bleachbit/markovify/__init__.py | 3 | CODE | |
| LOW | bleachbit/markovify/__init__.py | 4 | CODE | |
| LOW | bleachbit/markovify/__init__.py | 4 | CODE | |
| LOW | bleachbit/markovify/__init__.py | 5 | CODE | |
| LOW | bleachbit/markovify/__init__.py | 6 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/install-deps.sh | 13 | # Usage: | COMMENT |
| LOW | scripts/test_freebsd.sh | 44 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/TestDesktopMenuOptions.py | 64 | f.write('placeholder') | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bleachbit/Winapp.py | 85 | CODE |