Fix failing test

This commit is contained in:
Kovid Goyal
2026-05-17 08:52:28 +05:30
parent a1b1b89feb
commit 3e0850a864
3 changed files with 18 additions and 7 deletions

View File

@@ -2103,7 +2103,11 @@ add_payload(Window *w, DragRemoteItem *ri, bool has_more, const uint8_t *payload
if (symlinkat((char*)ri->data, dirfd, ri->dir_entry_name) != 0) abrt(errno, "failed to create symlink for drag source item");
break;
default:
if (mkdirat(dirfd, ri->dir_entry_name, dir_permissions) != 0 && errno != EEXIST) abrt(errno, "failed to create directory for drag source item");
if (mkdirat(dirfd, ri->dir_entry_name, dir_permissions) != 0 && errno != EEXIST) {
int err = errno;
log_error("Failed to create directory for drag source item with name: %s and error: %s", ri->dir_entry_name, strerror(err));
abrt(err, "failed to create directory for drag source item");
}
populate_dir_entries(w, ri);
break;
}
@@ -2139,12 +2143,17 @@ toplevel_data_for_drag(
const char *uri = mi.uri_list[uri_item_idx];
char *fname = sanitized_filename_from_url(uri);
if (!fname) abrt(EINVAL, "could not sanitize filename for URI in drag source uri-list");
if (!fname[0]) abrt(EINVAL, "URI must not have an empty path");
ri->dir_entry_name = fname;
char path[32];
snprintf(path, sizeof(path), "%u", uri_item_idx);
if (mkdirat(ds.base_dir_fd_plus_one - 1, path, dir_permissions) != 0 && errno != EEXIST) abrt(errno, "failed to create directory for drag source item");
if (mkdirat(ds.base_dir_fd_plus_one - 1, path, dir_permissions) != 0 && errno != EEXIST) {
int err = errno;
log_error("Failed to create directory for drag source item at: %s/%u with error: %s", ds.base_dir_for_remote_items, uri_item_idx, strerror(err));
abrt(err, "failed to create directory for drag source item");
}
int fd = safe_openat(ds.base_dir_fd_plus_one - 1, path, O_RDONLY | O_DIRECTORY, 0);
if (fd < 0) abrt(errno, "failed to create directory for drag source item");
if (fd < 0) abrt(errno, "failed to open directory for drag source item");
ri->top_level_parent_dir_fd_plus_one = fd + 1;
if (!ds.file_promises) {
free(mi.uri_list[uri_item_idx]);

View File

@@ -1190,7 +1190,8 @@ def sanitized_filename_from_url(url: str) -> str:
from urllib.parse import unquote, urlparse
try:
purl = urlparse(url)
fname = posixpath.basename(unquote(purl.path))
fpath = purl.path.rstrip('/') or '/'
fname = posixpath.basename(unquote(fpath))
return fname.replace(os.sep, '_')
except Exception:
return ''

View File

@@ -446,11 +446,12 @@ class TestDnDKitten(BaseTest):
if line and not line.startswith('#'):
purl = urlparse(line)
if purl.scheme == 'file':
paths.add(purl.path)
fpath = purl.path.rstrip('/') or '/'
paths.add(fpath)
if remote_client:
self.assertNotEqual(self.src_data_dir, os.path.dirname(purl.path))
self.assertNotEqual(self.src_data_dir, os.path.dirname(fpath))
else:
self.assertEqual(self.src_data_dir, os.path.dirname(purl.path))
self.assertEqual(self.src_data_dir, os.path.dirname(fpath))
src_items = set(os.listdir(self.src_data_dir))
self.assertEqual(src_items, {os.path.basename(x) for x in paths})
if remote_client: