From 7027ca0134469b35468af8666528f6ef6b38bc31 Mon Sep 17 00:00:00 2001 From: Julian Andres Klode Date: Tue, 6 Dec 2016 09:35:11 +0100 Subject: gpgv: Flush the files before checking for errors This is a follow up to the previous issue where we did not check if getline() returned -1 due to an end of file or due to an error like memory allocation, treating both as end of file. Here we ensure that we also handle buffered writes correctly by flushing the files before checking for any errors in our error stack. Buffered writes themselves were introduced in 1.1.9, but the function was never called with a buffered file from inside apt until commit 46c4043d741cb2c1d54e7f5bfaa234f1b7580f6c which was first released with apt 1.2.10. The function is public, though, so fixing this is a good idea anyway. Affected: >= 1.1.9 (cherry picked from commit 6212ee84a517ed68217429022bd45c108ecf9f85) (cherry picked from commit e115da452632a024a2885fea27a6c2c5145282b1) --- apt-pkg/contrib/gpgv.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/apt-pkg/contrib/gpgv.cc b/apt-pkg/contrib/gpgv.cc index 7e7b3ac80..a5f2441b7 100644 --- a/apt-pkg/contrib/gpgv.cc +++ b/apt-pkg/contrib/gpgv.cc @@ -329,6 +329,12 @@ bool SplitClearSignedFile(std::string const &InFile, FileFd * const ContentFile, if (buf != NULL) free(buf); + // Flush the files. Errors will be checked below. + if (SignatureFile != nullptr) + SignatureFile->Flush(); + if (ContentFile != nullptr) + ContentFile->Flush(); + // An error occured during reading - propagate it up bool const hasErrored = _error->PendingError(); _error->MergeWithStack(); -- cgit v1.2.3