From 5182203a206a47c059061b95eabfa5a39c20609e Mon Sep 17 00:00:00 2001 From: Osama Alwaly <160242270+OsamaGharibElwaly@users.noreply.github.com> Date: Tue, 24 Mar 2026 18:47:53 +0200 Subject: [PATCH] fix: restrict folder dialog to file:// scheme (#1631) Sets QFileDialog supportedSchemes to file only for choose_file_dialog (add repo, mount, extract). Adds unit test. Made-with: Cursor --- src/vorta/utils.py | 2 ++ tests/unit/test_utils.py | 10 ++++++++++ 2 files changed, 12 insertions(+) diff --git a/src/vorta/utils.py b/src/vorta/utils.py index 3b6229897..658f2b5b7 100644 --- a/src/vorta/utils.py +++ b/src/vorta/utils.py @@ -175,6 +175,8 @@ def choose_file_dialog(parent, title, want_folder=True): dialog.setParent(parent, QtCore.Qt.WindowType.Sheet) if want_folder: dialog.setOption(QFileDialog.Option.ShowDirsOnly) + # Avoid unsupported URL schemes (e.g. smb://) freezing the platform dialog (#1631). + dialog.setSupportedSchemes(['file']) return dialog diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py index 40d7cb65b..2129152a6 100644 --- a/tests/unit/test_utils.py +++ b/tests/unit/test_utils.py @@ -2,9 +2,11 @@ import uuid import pytest +from PyQt6.QtWidgets import QWidget from vorta.keyring.abc import VortaKeyring from vorta.utils import ( + choose_file_dialog, find_best_unit_for_sizes, get_path_datasize, is_system_tray_available, @@ -166,3 +168,11 @@ def test_is_system_tray_available(mocker): assert is_system_tray_available() is False mocker.patch('PyQt6.QtWidgets.QSystemTrayIcon.isSystemTrayAvailable', return_value=True) assert is_system_tray_available() is True + + +def test_choose_file_dialog_sets_file_scheme_only(mocker, qapp): + """Local path pickers must not offer unsupported schemes (borgbase/vorta#1631).""" + mock_dialog = mocker.MagicMock() + mocker.patch('vorta.utils.QFileDialog', return_value=mock_dialog) + choose_file_dialog(QWidget(), 'Test') + mock_dialog.setSupportedSchemes.assert_called_once_with(['file'])