]> git.ipfire.org Git - thirdparty/public-inbox.git/commitdiff
tmpfile: check `stat' errors, use autodie for unlink
authorEric Wong <e@80x24.org>
Mon, 13 Nov 2023 13:15:35 +0000 (13:15 +0000)
committerEric Wong <e@80x24.org>
Mon, 13 Nov 2023 21:54:56 +0000 (21:54 +0000)
`stat' can fail due to bugs on our end or ENOMEM, but there's
no autodie support for it.  So just die if `unlink' fails, since
the FS wouldn't be usable for tmpfiles in that state, anyways.

lib/PublicInbox/Tmpfile.pm

index 3040dd77d457d02f4517088edcad4f4cf858228f..72dd9d24d6b7d218161ac97f57f983589ba0e874 100644 (file)
@@ -1,9 +1,9 @@
-# Copyright (C) 2019-2021 all contributors <meta@public-inbox.org>
+# Copyright (C) all contributors <meta@public-inbox.org>
 # License: AGPL-3.0+ <https://www.gnu.org/licenses/agpl-3.0.txt>
 package PublicInbox::Tmpfile;
-use strict;
-use v5.10.1;
+use v5.12;
 use parent qw(Exporter);
+use autodie qw(unlink);
 our @EXPORT = qw(tmpfile);
 use Fcntl qw(:DEFAULT);
 use Errno qw(EEXIST);
@@ -21,7 +21,7 @@ sub tmpfile ($;$$) {
        if (defined $sock) {
                # add the socket inode number so we can figure out which
                # socket it belongs to
-               my @st = stat($sock);
+               my @st = stat($sock) or die "stat($sock): $!";
                $id .= '-ino:'.$st[1];
        }
        $id =~ tr!/!^!;
@@ -31,7 +31,7 @@ sub tmpfile ($;$$) {
        do {
                my $fn = File::Spec->tmpdir . "/$id-".time.'-'.rand;
                if (sysopen(my $fh, $fn, $fl, 0600)) { # likely
-                       unlink($fn) or warn "unlink($fn): $!"; # FS broken
+                       unlink($fn);
                        return $fh; # success
                }
        } while ($! == EEXIST);