From cd574cfbfec45c05c3e893c802cbc4a530e8afeb Mon Sep 17 00:00:00 2001 From: Juan Pablo Ugarte Date: Mon, 5 Sep 2016 14:33:30 -0300 Subject: [PATCH] document-portal: Fix the document portal for files outside /app Strip /newroot prefix from document path since validate_parent_dir() depends on a system path to get the parent directory stat. --- document-portal/xdp-main.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/document-portal/xdp-main.c b/document-portal/xdp-main.c index b83238e3..a3bacc0a 100644 --- a/document-portal/xdp-main.c +++ b/document-portal/xdp-main.c @@ -440,22 +440,29 @@ validate_fd (int fd, if (!validate_fd_common (fd, st_buf, path_buffer, error)) return FALSE; - if (app_id != NULL && *app_id != 0 && - g_str_has_prefix (path_buffer, "/newroot/app/")) + if (app_id != NULL && *app_id != 0) { - char *rel_path = path_buffer + strlen ("/newroot/app/"); - g_autofree char *app_path = NULL; - - app_path = resolve_flatpak_path (rel_path, app_id); - if (app_path == NULL) + if (g_str_has_prefix (path_buffer, "/newroot/app/")) { - g_set_error (error, - FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, - "Invalid fd passed"); - return FALSE; - } + char *rel_path = path_buffer + strlen ("/newroot/app/"); + g_autofree char *app_path = NULL; - strncpy (path_buffer, app_path, PATH_MAX); + app_path = resolve_flatpak_path (rel_path, app_id); + if (app_path == NULL) + { + g_set_error (error, + FLATPAK_PORTAL_ERROR, FLATPAK_PORTAL_ERROR_INVALID_ARGUMENT, + "Invalid fd passed"); + return FALSE; + } + + strncpy (path_buffer, app_path, PATH_MAX); + } + else if (g_str_has_prefix (path_buffer, "/newroot/")) + { + char *rel_path = path_buffer + strlen ("/newroot"); + g_strlcpy (path_buffer, rel_path, PATH_MAX); + } } if (!validate_parent_dir (path_buffer, st_buf, real_parent_st_buf, error))