lib/commit: Check that dirent is a directory before cleaning
authorJonathan Lebon <jonathan@jlebon.com>
Fri, 17 Apr 2020 18:29:13 +0000 (14:29 -0400)
committerJonathan Lebon <jonathan@jlebon.com>
Fri, 17 Apr 2020 18:29:13 +0000 (14:29 -0400)
I've only noticed this by inspection. But I think it's possible for
`cleanup_txn_dir` to get called with the `staging-...-lock` file since
it matches the prefix.

Make the checking here stronger by verifying that it's a directory. If
it's not a directory (lockfile), then follow the default pruning expiry
logic so that we still cleanup stray lockfiles eventually.

src/libostree/ostree-repo-commit.c

index 8c4bd3fe834d49ddd79b3d456228fc9d7d32951e..7dd68e9664473efb8d736cb26a1a8d3f7a636d40 100644 (file)
@@ -2011,7 +2011,7 @@ cleanup_tmpdir (OstreeRepo        *self,
         continue;
 
       /* Handle transaction tmpdirs */
-      if (_ostree_repo_has_staging_prefix (dent->d_name))
+      if (_ostree_repo_has_staging_prefix (dent->d_name) && S_ISDIR (stbuf.st_mode))
         {
           if (!cleanup_txn_dir (self, dfd_iter.fd, dent->d_name, cancellable, error))
             return FALSE;