diff options
author | Julian Andres Klode <jak@debian.org> | 2016-12-06 09:35:11 +0100 |
---|---|---|
committer | Julian Andres Klode <jak@debian.org> | 2016-12-08 15:19:30 +0100 |
commit | 6212ee84a517ed68217429022bd45c108ecf9f85 (patch) | |
tree | 9f8aee2e0c4863cc3fe1d0ec40521a0ebe31de4e | |
parent | 51be550c5c38a2e1ddfc2af50a9fab73ccf78026 (diff) |
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
-rw-r--r-- | apt-pkg/contrib/gpgv.cc | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/apt-pkg/contrib/gpgv.cc b/apt-pkg/contrib/gpgv.cc index 7d493fdf6..b6c4b6e08 100644 --- a/apt-pkg/contrib/gpgv.cc +++ b/apt-pkg/contrib/gpgv.cc @@ -381,6 +381,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(); |