Procházet zdrojové kódy

fileutl: empty file support: Avoid fstat() on -1 fd and check result

When checking if a file is empty, we forget to check that
fstat() actually worked.
Julian Andres Klode před 10 roky
rodič
revize
15fe8e62d3
1 změnil soubory, kde provedl 3 přidání a 2 odebrání
  1. 3 2
      apt-pkg/contrib/fileutl.cc

+ 3 - 2
apt-pkg/contrib/fileutl.cc

@@ -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;