]> git.saurik.com Git - apt.git/commitdiff
fileutl: empty file support: Avoid fstat() on -1 fd and check result
authorJulian Andres Klode <jak@debian.org>
Fri, 12 Aug 2016 11:55:09 +0000 (13:55 +0200)
committerJulian Andres Klode <jak@debian.org>
Fri, 12 Aug 2016 12:11:14 +0000 (14:11 +0200)
When checking if a file is empty, we forget to check that
fstat() actually worked.

apt-pkg/contrib/fileutl.cc

index a9d51a6bfdfb1625826d5f23e2ec4d886251350e..fd13b45dc61374f6534524becda29e7bce488b0a 100644 (file)
@@ -1908,11 +1908,12 @@ public:
               " but was forced to ignore it in favor of an external binary – which isn't installed.", compressor.Name.c_str());
 
       bool const Comp = (Mode & FileFd::WriteOnly) == FileFd::WriteOnly;
-      if (Comp == false)
+      if (Comp == false && filefd->iFd != -1)
       {
         // Handle 'decompression' of empty files
         struct stat Buf;
-        fstat(filefd->iFd, &Buf);
+        if (fstat(filefd->iFd, &Buf) != 0)
+           return filefd->FileFdErrno("fstat", "Could not stat fd %d for file %s", filefd->iFd, filefd->FileName.c_str());
         if (Buf.st_size == 0 && S_ISFIFO(Buf.st_mode) == false)
            return true;