GNU bug report logs - #54180
[PATCH 00/12] Home: Clarify and better test symlink-manager.scm

Previous Next

Package: guix-patches;

Reported by: Ludovic Courtès <ludo <at> gnu.org>

Date: Sun, 27 Feb 2022 13:41:02 UTC

Severity: normal

Tags: patch

Done: Ludovic Courtès <ludo <at> gnu.org>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Maxime Devos <maximedevos <at> telenet.be>
To: Ludovic Courtès <ludo <at> gnu.org>, 54180 <at> debbugs.gnu.org
Subject: [bug#54180] [PATCH 05/12] home: symlink-manager: Remove 'empty-directory?' and avoid TOCTTOU race.
Date: Sun, 27 Feb 2022 16:54:56 +0100
[Message part 1 (text/plain, inline)]
Ludovic Courtès schreef op zo 27-02-2022 om 14:53 [+0100]:
> +                 (let ((directory (get-target-path directory)))
> +                   (catch 'system-error
> +                     (lambda ()
> +                       (rmdir directory)
> +                       (format #t (G_ "Removed ~a.\n") directory))
> +                     (lambda args
> +                       (let ((errno (system-error-errno args)))
> +                         (cond ((= ENOTEMPTY errno)
> +                                (format
> +                                 #t
> +                                 (G_ "Skipping ~a (not an empty directory)...\n")
> +                                 directory))
> +                               ((= ENOTDIR errno)
> +                                #t)
> +                               (else
> +                                (apply throw args))))))))

Like with my comment on ‘Avoid extra 'lstat call.’, I would move the
(format #t (G_ "Removed ~a.\n") directory) outside the catch.

If 'format' somehow throws a ENOTEMPTY/ENOTDIR system-error, something
is very wrong.

Greetings,
Maxime.
[signature.asc (application/pgp-signature, inline)]

This bug report was last modified 3 years and 156 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.