Skip to content

Commit 4054e73

Browse files
committed
builder-main: Prevent deleting state-dir or its parents with force-clean
Deleting the state dir leaves flatpak-builder in an inconsistent hung state by default as rofiles-fuse tries to recurse indefinitely when resolving paths. ``` statx(AT_FDCWD, "/home/bbhtt/test/.flatpak-builder/rofiles/rofiles-lLitmd/.flatpak-builder/rofiles/rofiles-lLitmd/.flatpak-builder/rofiles/rofiles-lLitmd/.flatpak-builder/rofiles/rofiles-lLitmd/.flatpak-builder/rofiles/rofiles-lLitmd/.flatpak-builder/rofiles/rofiles-lLitmd/.flatpak-builder/rofiles/rofiles-lLitmd/.flatpak-builder/rofiles/rofiles-lLitmd/.flatpak-builder/rofiles/rofiles-lLitmd/.flatpak-builder/rofiles/rofiles-lLitmd/.flatpak-builder/cache/config", AT_STATX_SYNC_AS_STAT|AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_ALL, {stx_mask=STATX_BASIC_STATS|STATX_MNT_ID, stx_attributes=0, stx_mode=S_IFREG|0644, stx_size=67, ...}) = 0 [...] ``` This is reproducible when doing ``` flatpak-builder --state-dir ~/foobar ~/foobar --force-clean MANIFEST ``` or ``` flatpak-builder . --force-clean MANIFEST ``` where state-dir is relative to `.`
1 parent 15baba4 commit 4054e73

File tree

1 file changed

+10
-0
lines changed

1 file changed

+10
-0
lines changed

src/builder-main.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -862,6 +862,16 @@ main (int argc,
862862
{
863863
if (opt_force_clean)
864864
{
865+
g_autoptr(GFile) state_dir = builder_context_get_state_dir (build_context);
866+
867+
if (g_file_equal (app_dir, state_dir) ||
868+
g_file_has_prefix (state_dir, app_dir))
869+
{
870+
g_printerr ("Refusing to delete state directory "
871+
"or its parents\n");
872+
return 1;
873+
}
874+
865875
g_print ("Emptying app dir '%s'\n", app_dir_path);
866876
if (!flatpak_rm_rf (app_dir, NULL, &error))
867877
{

0 commit comments

Comments
 (0)