diff --git a/pressure-vessel/runtime.c b/pressure-vessel/runtime.c index 47d8a41597e93ddba13ddfef08240b0464641012..8f880799300f51966613b418c2b9b5e4ced747fc 100644 --- a/pressure-vessel/runtime.c +++ b/pressure-vessel/runtime.c @@ -128,11 +128,17 @@ G_DEFINE_TYPE_WITH_CODE (PvRuntime, pv_runtime, G_TYPE_OBJECT, * that /etc/ld.so.cache, etc., are not shared. */ static gboolean -path_visible_in_provider_namespace (const char *path) +path_visible_in_provider_namespace (PvRuntimeFlags flags, + const char *path) { while (path[0] == '/') path++; + if ((flags & PV_RUNTIME_FLAGS_FLATPAK_SUBSANDBOX) + && g_str_has_prefix (path, "app") + && (path[3] == '\0' || path[3] == '/')) + return TRUE; + if (g_str_has_prefix (path, "usr") && (path[3] == '\0' || path[3] == '/')) return TRUE; @@ -2581,7 +2587,7 @@ pv_runtime_take_from_provider (PvRuntime *self, /* If it isn't in /usr, /lib, etc., then the symlink will be * dangling and this probably isn't going to work. */ - if (!path_visible_in_provider_namespace (source_in_provider)) + if (!path_visible_in_provider_namespace (self->flags, source_in_provider)) { if (flags & TAKE_FROM_PROVIDER_FLAGS_COPY_FALLBACK) {