Version in base suite: 1.57.2-2 Base version: gvfs_1.57.2-2 Target version: gvfs_1.57.2-2+deb13u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/g/gvfs/gvfs_1.57.2-2.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/g/gvfs/gvfs_1.57.2-2+deb13u1.dsc changelog | 11 gbp.conf | 2 patches/ftp-Reject-paths-containing-CR-LF-characters.patch | 335 ++++++++++ patches/ftp-Use-control-connection-address-for-PASV-data.patch | 152 ++++ patches/series | 2 5 files changed, 501 insertions(+), 1 deletion(-) dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmp5byes_w6/gvfs_1.57.2-2.dsc: no acceptable signature found dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmp5byes_w6/gvfs_1.57.2-2+deb13u1.dsc: no acceptable signature found diff -Nru gvfs-1.57.2/debian/changelog gvfs-1.57.2/debian/changelog --- gvfs-1.57.2/debian/changelog 2025-03-23 13:42:23.000000000 +0000 +++ gvfs-1.57.2/debian/changelog 2026-03-29 02:23:19.000000000 +0000 @@ -1,3 +1,14 @@ +gvfs (1.57.2-2+deb13u1) trixie; urgency=high + + * Non-maintainer upload by the LTS Security Team. + * CVE-2026-28295 ftp: Use control connection address for PASV data + (Closes: #1129285) + * CVE-2026-28296 ftp: Reject paths containing CR/LF characters + (Closes: #1129286) + * debian/gbp.conf: Set debian branch to debian/trixie + + -- Andreas Henriksson Sun, 29 Mar 2026 04:23:19 +0200 + gvfs (1.57.2-2) unstable; urgency=medium * Team upload diff -Nru gvfs-1.57.2/debian/gbp.conf gvfs-1.57.2/debian/gbp.conf --- gvfs-1.57.2/debian/gbp.conf 2025-03-23 13:42:23.000000000 +0000 +++ gvfs-1.57.2/debian/gbp.conf 2026-03-29 02:23:04.000000000 +0000 @@ -1,6 +1,6 @@ [DEFAULT] pristine-tar = True -debian-branch = debian/latest +debian-branch = debian/trixie upstream-branch = upstream/latest upstream-vcs-tag = %(version)s diff -Nru gvfs-1.57.2/debian/patches/ftp-Reject-paths-containing-CR-LF-characters.patch gvfs-1.57.2/debian/patches/ftp-Reject-paths-containing-CR-LF-characters.patch --- gvfs-1.57.2/debian/patches/ftp-Reject-paths-containing-CR-LF-characters.patch 1970-01-01 00:00:00.000000000 +0000 +++ gvfs-1.57.2/debian/patches/ftp-Reject-paths-containing-CR-LF-characters.patch 2026-03-29 02:20:41.000000000 +0000 @@ -0,0 +1,335 @@ +From: Ondrej Holy +Date: Thu, 19 Feb 2026 11:24:09 +0100 +Subject: ftp: Reject paths containing CR/LF characters + +Currently, an FTP backend doesn't verify paths. Path with CR/LF can +inject extra commands to the server. Let's validate the paths and fail +with "Filename contains invalid characters." if that happens. + +Co-Authored-By: Cursor + +Fixes: https://gitlab.gnome.org/GNOME/gvfs/-/issues/833 +Part-of: +(cherry picked from commit 447ee8a32fe56529bf92c0a733f6d35e724c2689) +--- + daemon/gvfsbackendftp.c | 125 +++++++++++++++++++++++++++++++++++++++++------- + daemon/gvfsftpfile.c | 22 ++++++--- + daemon/gvfsftpfile.h | 4 +- + 3 files changed, 125 insertions(+), 26 deletions(-) + +diff --git a/daemon/gvfsbackendftp.c b/daemon/gvfsbackendftp.c +index b30fc20..73ccee7 100644 +--- a/daemon/gvfsbackendftp.c ++++ b/daemon/gvfsbackendftp.c +@@ -871,9 +871,14 @@ do_open_for_read (GVfsBackend *backend, + error_550_permission_or_not_found, + NULL }; + +- g_vfs_ftp_task_setup_data_connection (&task); +- file = g_vfs_ftp_file_new_from_gvfs (ftp, filename); ++ file = g_vfs_ftp_file_new_from_gvfs (ftp, filename, &task.error); ++ if (file == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } + ++ g_vfs_ftp_task_setup_data_connection (&task); + g_vfs_ftp_task_send_and_check (&task, + G_VFS_FTP_PASS_100 | G_VFS_FTP_FAIL_200, + open_read_handlers, +@@ -992,7 +997,13 @@ do_create (GVfsBackend *backend, + GFileInfo *info; + GVfsFtpFile *file; + +- file = g_vfs_ftp_file_new_from_gvfs (ftp, filename); ++ file = g_vfs_ftp_file_new_from_gvfs (ftp, filename, &task.error); ++ if (file == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } ++ + info = g_vfs_ftp_dir_cache_lookup_file (ftp->dir_cache, &task, file, FALSE); + if (info) + { +@@ -1022,7 +1033,13 @@ do_append (GVfsBackend *backend, + GVfsFtpTask task = G_VFS_FTP_TASK_INIT (ftp, G_VFS_JOB (job)); + GVfsFtpFile *file; + +- file = g_vfs_ftp_file_new_from_gvfs (ftp, filename); ++ file = g_vfs_ftp_file_new_from_gvfs (ftp, filename, &task.error); ++ if (file == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } ++ + do_start_write (&task, flags, "APPE %s", g_vfs_ftp_file_get_ftp_path (file)); + g_vfs_ftp_dir_cache_purge_file (ftp->dir_cache, file); + g_vfs_ftp_file_free (file); +@@ -1044,14 +1061,25 @@ do_replace (GVfsBackend *backend, + static const GVfsFtpErrorFunc rnfr_handlers[] = { error_550_permission_or_not_found, + NULL }; + +- file = g_vfs_ftp_file_new_from_gvfs (ftp, filename); ++ file = g_vfs_ftp_file_new_from_gvfs (ftp, filename, &task.error); ++ if (file == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } + + if (make_backup) + { + GFileInfo *info; + char *backup_path = g_strconcat (filename, "~", NULL); +- backupfile = g_vfs_ftp_file_new_from_gvfs (ftp, backup_path); ++ backupfile = g_vfs_ftp_file_new_from_gvfs (ftp, backup_path, &task.error); + g_free (backup_path); ++ if (backupfile == NULL) ++ { ++ g_vfs_ftp_file_free (file); ++ g_vfs_ftp_task_done (&task); ++ return; ++ } + + info = g_vfs_ftp_dir_cache_lookup_file (ftp->dir_cache, &task, file, FALSE); + +@@ -1121,7 +1149,7 @@ do_close_write (GVfsBackend *backend, + + stream = g_vfs_ftp_connection_get_data_stream (conn); + filename = g_object_get_data (G_OBJECT (stream), "g-vfs-backend-ftp-filename"); +- file = g_vfs_ftp_file_new_from_gvfs (ftp, filename); ++ file = g_vfs_ftp_file_new_from_gvfs (ftp, filename, NULL); + + g_vfs_ftp_task_give_connection (&task, handle); + g_vfs_ftp_task_close_data_connection (&task); +@@ -1173,8 +1201,14 @@ do_query_info (GVfsBackend *backend, + GVfsFtpTask task = G_VFS_FTP_TASK_INIT (ftp, G_VFS_JOB (job)); + GVfsFtpFile *file; + GFileInfo *real; +- +- file = g_vfs_ftp_file_new_from_gvfs (ftp, filename); ++ ++ file = g_vfs_ftp_file_new_from_gvfs (ftp, filename, &task.error); ++ if (file == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } ++ + real = g_vfs_ftp_dir_cache_lookup_file (ftp->dir_cache, + &task, + file, +@@ -1257,7 +1291,12 @@ do_set_attribute (GVfsBackend *backend, + GVfsFtpTask task = G_VFS_FTP_TASK_INIT (ftp, G_VFS_JOB (job)); + GVfsFtpFile *file; + +- file = g_vfs_ftp_file_new_from_gvfs (ftp, filename); ++ file = g_vfs_ftp_file_new_from_gvfs (ftp, filename, &task.error); ++ if (file == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } + + if (strcmp (attribute, G_FILE_ATTRIBUTE_UNIX_MODE) == 0 && + g_vfs_backend_ftp_has_feature (ftp, G_VFS_FTP_FEATURE_CHMOD)) +@@ -1338,7 +1377,13 @@ do_enumerate (GVfsBackend *backend, + GVfsFtpFile *dir; + GList *list, *walk; + +- dir = g_vfs_ftp_file_new_from_gvfs (ftp, dirname); ++ dir = g_vfs_ftp_file_new_from_gvfs (ftp, dirname, &task.error); ++ if (dir == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } ++ + list = g_vfs_ftp_dir_cache_lookup_dir (ftp->dir_cache, + &task, + dir, +@@ -1380,9 +1425,22 @@ do_set_display_name (GVfsBackend *backend, + GVfsFtpTask task = G_VFS_FTP_TASK_INIT (ftp, G_VFS_JOB (job)); + GVfsFtpFile *original, *dir, *now; + +- original = g_vfs_ftp_file_new_from_gvfs (ftp, filename); ++ original = g_vfs_ftp_file_new_from_gvfs (ftp, filename, &task.error); ++ if (original == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } ++ + dir = g_vfs_ftp_file_new_parent (original); + now = g_vfs_ftp_file_new_child (dir, display_name, &task.error); ++ if (now == NULL) ++ { ++ g_vfs_ftp_file_free (original); ++ g_vfs_ftp_file_free (dir); ++ g_vfs_ftp_task_done (&task); ++ return; ++ } + + /* Rename a directory that has been "opened" by CWD may fail, so cd to root first */ + g_vfs_ftp_task_try_cd (&task, ftp->root); +@@ -1415,7 +1473,13 @@ do_delete (GVfsBackend *backend, + + /* We try file deletion first. If that fails, we try directory deletion. + * The file-first-then-directory order has been decided by coin-toss. */ +- file = g_vfs_ftp_file_new_from_gvfs (ftp, filename); ++ file = g_vfs_ftp_file_new_from_gvfs (ftp, filename, &task.error); ++ if (file == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } ++ + response = g_vfs_ftp_task_send (&task, + G_VFS_FTP_PASS_500, + "DELE %s", g_vfs_ftp_file_get_ftp_path (file)); +@@ -1463,7 +1527,13 @@ do_make_directory (GVfsBackend *backend, + GVfsFtpFile *file; + static const GVfsFtpErrorFunc make_directory_handlers[] = { error_550_exists, error_550_parent_not_found, NULL }; + +- file = g_vfs_ftp_file_new_from_gvfs (ftp, filename); ++ file = g_vfs_ftp_file_new_from_gvfs (ftp, filename, &task.error); ++ if (file == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } ++ + g_vfs_ftp_task_send_and_check (&task, + 0, + make_directory_handlers, +@@ -1494,6 +1564,21 @@ do_move (GVfsBackend *backend, + static const GVfsFtpErrorFunc rnfr_handlers[] = { error_550_permission_or_not_found, + NULL }; + ++ srcfile = g_vfs_ftp_file_new_from_gvfs (ftp, source, &task.error); ++ if (srcfile == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } ++ ++ destfile = g_vfs_ftp_file_new_from_gvfs (ftp, destination, &task.error); ++ if (destfile == NULL) ++ { ++ g_vfs_ftp_file_free (srcfile); ++ g_vfs_ftp_task_done (&task); ++ return; ++ } ++ + /* FIXME: what about G_FILE_COPY_NOFOLLOW_SYMLINKS and G_FILE_COPY_ALL_METADATA? */ + + if (flags & G_FILE_COPY_BACKUP) +@@ -1521,8 +1606,6 @@ do_move (GVfsBackend *backend, + return; + } + +- srcfile = g_vfs_ftp_file_new_from_gvfs (ftp, source); +- destfile = g_vfs_ftp_file_new_from_gvfs (ftp, destination); + if (g_vfs_ftp_task_try_cd (&task, destfile)) + { + char *basename = g_path_get_basename (source); +@@ -1661,8 +1744,14 @@ do_pull (GVfsBackend * backend, + GOutputStream *output; + goffset total_size = 0; + guint64 mtime = 0; +- +- src = g_vfs_ftp_file_new_from_gvfs (ftp, source); ++ ++ src = g_vfs_ftp_file_new_from_gvfs (ftp, source, &task.error); ++ if (src == NULL) ++ { ++ g_vfs_ftp_task_done (&task); ++ return; ++ } ++ + dest = g_file_new_for_path (local_path); + + if (remove_source && (flags & G_FILE_COPY_NO_FALLBACK_FOR_MOVE)) +diff --git a/daemon/gvfsftpfile.c b/daemon/gvfsftpfile.c +index 17ec718..77361e1 100644 +--- a/daemon/gvfsftpfile.c ++++ b/daemon/gvfsftpfile.c +@@ -68,19 +68,29 @@ g_vfs_ftp_file_compute_gvfs_path (const char *ftp_path) + * g_vfs_ftp_file_new_from_gvfs: + * @ftp: the ftp backend this file is to be used on + * @gvfs_path: gvfs path to create the file from ++ * @error: location to take an eventual error or %NULL + * +- * Constructs a new #GVfsFtpFile representing the given gvfs path. ++ * Constructs a new #GVfsFtpFile representing the given gvfs path. If the ++ * display name is invalid, @error is set and %NULL is returned. + * +- * Returns: a new file ++ * Returns: a new file or %NULL on error + **/ + GVfsFtpFile * +-g_vfs_ftp_file_new_from_gvfs (GVfsBackendFtp *ftp, const char *gvfs_path) ++g_vfs_ftp_file_new_from_gvfs (GVfsBackendFtp *ftp, const char *gvfs_path, GError **error) + { + GVfsFtpFile *file; + + g_return_val_if_fail (G_VFS_IS_BACKEND_FTP (ftp), NULL); + g_return_val_if_fail (gvfs_path != NULL, NULL); + ++ if (strpbrk (gvfs_path, "\r\n") != NULL) ++ { ++ g_set_error_literal (error, ++ G_IO_ERROR, G_IO_ERROR_INVALID_FILENAME, ++ _("Filename contains invalid characters.")); ++ return NULL; ++ } ++ + file = g_slice_new (GVfsFtpFile); + file->backend = g_object_ref (ftp); + file->gvfs_path = g_strdup (gvfs_path); +@@ -136,7 +146,7 @@ g_vfs_ftp_file_new_parent (const GVfsFtpFile *file) + return g_vfs_ftp_file_copy (file); + + dirname = g_path_get_dirname (file->gvfs_path); +- dir = g_vfs_ftp_file_new_from_gvfs (file->backend, dirname); ++ dir = g_vfs_ftp_file_new_from_gvfs (file->backend, dirname, NULL); + g_free (dirname); + + return dir; +@@ -163,7 +173,7 @@ g_vfs_ftp_file_new_child (const GVfsFtpFile *parent, const char *display_name, G + g_return_val_if_fail (parent != NULL, NULL); + g_return_val_if_fail (display_name != NULL, NULL); + +- if (strpbrk (display_name, "/\r\n")) ++ if (strchr (display_name, '/') != NULL) + { + g_set_error_literal (error, + G_IO_ERROR, G_IO_ERROR_INVALID_FILENAME, +@@ -172,7 +182,7 @@ g_vfs_ftp_file_new_child (const GVfsFtpFile *parent, const char *display_name, G + } + + new_path = g_strconcat (parent->gvfs_path, parent->gvfs_path[1] == 0 ? "" : "/", display_name, NULL); +- child = g_vfs_ftp_file_new_from_gvfs (parent->backend, new_path); ++ child = g_vfs_ftp_file_new_from_gvfs (parent->backend, new_path, error); + g_free (new_path); + return child; + } +diff --git a/daemon/gvfsftpfile.h b/daemon/gvfsftpfile.h +index dcf2545..f451cac 100644 +--- a/daemon/gvfsftpfile.h ++++ b/daemon/gvfsftpfile.h +@@ -27,9 +27,9 @@ + + G_BEGIN_DECLS + +- + GVfsFtpFile * g_vfs_ftp_file_new_from_gvfs (GVfsBackendFtp * ftp, +- const char * gvfs_path); ++ const char * gvfs_path, ++ GError ** error); + GVfsFtpFile * g_vfs_ftp_file_new_from_ftp (GVfsBackendFtp * ftp, + const char * ftp_path); + GVfsFtpFile * g_vfs_ftp_file_new_parent (const GVfsFtpFile * file); diff -Nru gvfs-1.57.2/debian/patches/ftp-Use-control-connection-address-for-PASV-data.patch gvfs-1.57.2/debian/patches/ftp-Use-control-connection-address-for-PASV-data.patch --- gvfs-1.57.2/debian/patches/ftp-Use-control-connection-address-for-PASV-data.patch 1970-01-01 00:00:00.000000000 +0000 +++ gvfs-1.57.2/debian/patches/ftp-Use-control-connection-address-for-PASV-data.patch 2026-03-29 02:20:41.000000000 +0000 @@ -0,0 +1,152 @@ +From: Ondrej Holy +Date: Thu, 19 Feb 2026 15:45:53 +0100 +Subject: ftp: Use control connection address for PASV data + +Currently, `PASV` uses the IP from the server reply when creating data +connection. This may allow FTP bounce attacks. Let's always use only the +port from the PASV reply and connect to the control connection address. + +Co-Authored-By: Cursor + +Fixes: https://gitlab.gnome.org/GNOME/gvfs/-/issues/832 +Part-of: +(cherry picked from commit 30b89fc61ef620dfa81492f68a21ee1fdb7021f3) +--- + daemon/gvfsbackendftp.c | 5 ++-- + daemon/gvfsbackendftp.h | 1 - + daemon/gvfsftptask.c | 66 ++++++++++--------------------------------------- + 3 files changed, 15 insertions(+), 57 deletions(-) + +diff --git a/daemon/gvfsbackendftp.c b/daemon/gvfsbackendftp.c +index 485b3e9..b30fc20 100644 +--- a/daemon/gvfsbackendftp.c ++++ b/daemon/gvfsbackendftp.c +@@ -63,9 +63,8 @@ + * GVfsFtpMethod: + * @G_VFS_FTP_METHOD_UNKNOWN: method has not yet been determined + * @G_VFS_FTP_METHOD_EPSV: use EPSV command +- * @G_VFS_FTP_METHOD_PASV: use PASV command +- * @G_VFS_FTP_METHOD_PASV_ADDR: use PASV command, but ignore the returned +- * address and only use it's port ++ * @G_VFS_FTP_METHOD_PASV: use PASV command, but ignore the returned address ++ * and only use it's port (bounce attack prevention) + * @G_VFS_FTP_METHOD_EPRT: use the EPRT command + * @G_VFS_FTP_METHOD_PORT: use the PORT command + * +diff --git a/daemon/gvfsbackendftp.h b/daemon/gvfsbackendftp.h +index e63bbea..b093562 100644 +--- a/daemon/gvfsbackendftp.h ++++ b/daemon/gvfsbackendftp.h +@@ -62,7 +62,6 @@ typedef enum { + G_VFS_FTP_METHOD_ANY = 0, + G_VFS_FTP_METHOD_EPSV, + G_VFS_FTP_METHOD_PASV, +- G_VFS_FTP_METHOD_PASV_ADDR, + G_VFS_FTP_METHOD_EPRT, + G_VFS_FTP_METHOD_PORT + } GVfsFtpMethod; +diff --git a/daemon/gvfsftptask.c b/daemon/gvfsftptask.c +index a1e4570..15e0ac4 100644 +--- a/daemon/gvfsftptask.c ++++ b/daemon/gvfsftptask.c +@@ -858,7 +858,7 @@ fail: + static GVfsFtpMethod + g_vfs_ftp_task_setup_data_connection_pasv (GVfsFtpTask *task, GVfsFtpMethod method) + { +- guint ip1, ip2, ip3, ip4, port1, port2; ++ guint port1, port2; + char **reply; + const char *s; + GSocketAddress *addr; +@@ -874,10 +874,8 @@ g_vfs_ftp_task_setup_data_connection_pasv (GVfsFtpTask *task, GVfsFtpMethod meth + */ + for (s = reply[0]; *s; s++) + { +- if (sscanf (s, "%u,%u,%u,%u,%u,%u", +- &ip1, &ip2, &ip3, &ip4, +- &port1, &port2) == 6) +- break; ++ if (sscanf (s, "%*u,%*u,%*u,%*u,%u,%u", &port1, &port2) == 2) ++ break; + } + if (*s == 0) + { +@@ -888,52 +886,16 @@ g_vfs_ftp_task_setup_data_connection_pasv (GVfsFtpTask *task, GVfsFtpMethod meth + } + g_strfreev (reply); + +- if (method == G_VFS_FTP_METHOD_PASV || method == G_VFS_FTP_METHOD_ANY) +- { +- guint8 ip[4]; +- GInetAddress *inet_addr; +- +- ip[0] = ip1; +- ip[1] = ip2; +- ip[2] = ip3; +- ip[3] = ip4; +- inet_addr = g_inet_address_new_from_bytes (ip, G_SOCKET_FAMILY_IPV4); +- addr = g_inet_socket_address_new (inet_addr, port1 << 8 | port2); +- g_object_unref (inet_addr); +- +- success = g_vfs_ftp_connection_open_data_connection (task->conn, +- addr, +- task->cancellable, +- &task->error); +- g_object_unref (addr); +- if (success) +- return G_VFS_FTP_METHOD_PASV; +- if (g_vfs_ftp_task_is_in_error (task) && method != G_VFS_FTP_METHOD_ANY) +- return G_VFS_FTP_METHOD_ANY; +- +- g_vfs_ftp_task_clear_error (task); +- } +- +- if (method == G_VFS_FTP_METHOD_PASV_ADDR || method == G_VFS_FTP_METHOD_ANY) +- { +- /* Workaround code: +- * Various ftp servers aren't setup correctly when behind a NAT. They report +- * their own IP address (like 10.0.0.4) and not the address in front of the +- * NAT. But this is likely the same address that we connected to with our +- * command connetion. So if the address given by PASV fails, we fall back +- * to the address of the command stream. +- */ +- addr = g_vfs_ftp_task_create_remote_address (task, port1 << 8 | port2); +- if (addr == NULL) +- return G_VFS_FTP_METHOD_ANY; +- success = g_vfs_ftp_connection_open_data_connection (task->conn, +- addr, +- task->cancellable, +- &task->error); +- g_object_unref (addr); +- if (success) +- return G_VFS_FTP_METHOD_PASV_ADDR; +- } ++ addr = g_vfs_ftp_task_create_remote_address (task, port1 << 8 | port2); ++ if (addr == NULL) ++ return G_VFS_FTP_METHOD_ANY; ++ success = g_vfs_ftp_connection_open_data_connection (task->conn, ++ addr, ++ task->cancellable, ++ &task->error); ++ g_object_unref (addr); ++ if (success) ++ return G_VFS_FTP_METHOD_PASV; + + return G_VFS_FTP_METHOD_ANY; + } +@@ -1129,7 +1091,6 @@ g_vfs_ftp_task_setup_data_connection (GVfsFtpTask *task) + [G_VFS_FTP_METHOD_ANY] = g_vfs_ftp_task_setup_data_connection_any, + [G_VFS_FTP_METHOD_EPSV] = g_vfs_ftp_task_setup_data_connection_epsv, + [G_VFS_FTP_METHOD_PASV] = g_vfs_ftp_task_setup_data_connection_pasv, +- [G_VFS_FTP_METHOD_PASV_ADDR] = g_vfs_ftp_task_setup_data_connection_pasv, + [G_VFS_FTP_METHOD_EPRT] = g_vfs_ftp_task_setup_data_connection_eprt, + [G_VFS_FTP_METHOD_PORT] = g_vfs_ftp_task_setup_data_connection_port + }; +@@ -1160,7 +1121,6 @@ g_vfs_ftp_task_setup_data_connection (GVfsFtpTask *task) + [G_VFS_FTP_METHOD_ANY] = "any", + [G_VFS_FTP_METHOD_EPSV] = "EPSV", + [G_VFS_FTP_METHOD_PASV] = "PASV", +- [G_VFS_FTP_METHOD_PASV_ADDR] = "PASV with workaround", + [G_VFS_FTP_METHOD_EPRT] = "EPRT", + [G_VFS_FTP_METHOD_PORT] = "PORT" + }; diff -Nru gvfs-1.57.2/debian/patches/series gvfs-1.57.2/debian/patches/series --- gvfs-1.57.2/debian/patches/series 2025-03-23 13:42:23.000000000 +0000 +++ gvfs-1.57.2/debian/patches/series 2026-03-29 02:22:29.000000000 +0000 @@ -5,3 +5,5 @@ 0008-Skip-the-umockdev-test.patch 0009-gvfs-test-Increase-timeout-to-10s.patch fuse-use-fuse_-un-set_feature_flag-instead-of-setting-man.patch +ftp-Use-control-connection-address-for-PASV-data.patch +ftp-Reject-paths-containing-CR-LF-characters.patch