Skip to content

Commit e5b4e4d

Browse files
fix: restrict folder dialog to file:// scheme (#2476)
Sets QFileDialog supportedSchemes to file only for choose_file_dialog (add repo, mount, extract). Adds unit test. Fixes #1631
1 parent 9174fd7 commit e5b4e4d

2 files changed

Lines changed: 12 additions & 0 deletions

File tree

src/vorta/utils.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ def choose_file_dialog(parent, title, want_folder=True):
175175
dialog.setParent(parent, QtCore.Qt.WindowType.Sheet)
176176
if want_folder:
177177
dialog.setOption(QFileDialog.Option.ShowDirsOnly)
178+
# Avoid unsupported URL schemes (e.g. smb://) freezing the platform dialog (#1631).
179+
dialog.setSupportedSchemes(['file'])
178180
return dialog
179181

180182

tests/unit/test_utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
import uuid
33

44
import pytest
5+
from PyQt6.QtWidgets import QWidget
56

67
from vorta.keyring.abc import VortaKeyring
78
from vorta.utils import (
9+
choose_file_dialog,
810
find_best_unit_for_sizes,
911
get_path_datasize,
1012
is_system_tray_available,
@@ -166,3 +168,11 @@ def test_is_system_tray_available(mocker):
166168
assert is_system_tray_available() is False
167169
mocker.patch('PyQt6.QtWidgets.QSystemTrayIcon.isSystemTrayAvailable', return_value=True)
168170
assert is_system_tray_available() is True
171+
172+
173+
def test_choose_file_dialog_sets_file_scheme_only(mocker, qapp):
174+
"""Local path pickers must not offer unsupported schemes (borgbase/vorta#1631)."""
175+
mock_dialog = mocker.MagicMock()
176+
mocker.patch('vorta.utils.QFileDialog', return_value=mock_dialog)
177+
choose_file_dialog(QWidget(), 'Test')
178+
mock_dialog.setSupportedSchemes.assert_called_once_with(['file'])

0 commit comments

Comments
 (0)