From: Julian Andres Klode Date: Fri, 12 Aug 2016 11:55:09 +0000 (+0200) Subject: fileutl: empty file support: Avoid fstat() on -1 fd and check result X-Git-Tag: 1.2.15~22 X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/984a637a21acbbecc7ebec3f6eada09a221f068b?ds=inline 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. (cherry picked from commit 15fe8e62d37bc87114c59d385bed7ceefb72886b) --- diff --git a/apt-pkg/contrib/fileutl.cc b/apt-pkg/contrib/fileutl.cc index b8409c35d..20ccaa1c6 100644 --- a/apt-pkg/contrib/fileutl.cc +++ b/apt-pkg/contrib/fileutl.cc @@ -1882,11 +1882,12 @@ public: return filefd->FileFdError("ReadWrite mode is not supported for file %s", filefd->FileName.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;