From 8de66bc753d1c894682a3fac870575eb70cee7d0 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sat, 31 Mar 2018 01:34:35 +0200 Subject: [PATCH] Add error checks when copying data in the archive sample Errors when writing the output data in CopyStreamData() were not detected. --- samples/archive/archive.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/samples/archive/archive.cpp b/samples/archive/archive.cpp index f622ca1d99..0292be4d18 100644 --- a/samples/archive/archive.cpp +++ b/samples/archive/archive.cpp @@ -138,7 +138,14 @@ bool ArchiveApp::CopyStreamData(wxInputStream& inputStream, wxOutputStream& outp if (copiedData + readSize > size) readSize = size - copiedData; inputStream.Read(buf, readSize); - outputStream.Write(buf, readSize); + size_t actuallyRead = inputStream.LastRead(); + outputStream.Write(buf, actuallyRead); + if (outputStream.LastWrite() != actuallyRead) + { + wxLogError("Failed to output data"); + return false; + } + copiedData += readSize; } @@ -170,7 +177,8 @@ int ArchiveApp::DoCreate() } if (!archiveOutputStream->PutNextEntry(inputFileName.GetFullName(), wxDateTime::Now(), inputFileStream.GetLength())) break; - CopyStreamData(inputFileStream, *archiveOutputStream, inputFileStream.GetLength()); + if (!CopyStreamData(inputFileStream, *archiveOutputStream, inputFileStream.GetLength())) + return 1; } if (archiveOutputStream->Close()) @@ -225,7 +233,8 @@ int ArchiveApp::DoExtract() { wxPrintf("Extracting: %s...\n", entry->GetName()); wxTempFileOutputStream outputFileStream(entry->GetName()); - CopyStreamData(*archiveStream, outputFileStream, entry->GetSize()); + if (!CopyStreamData(*archiveStream, outputFileStream, entry->GetSize())) + return 1; outputFileStream.Commit(); } wxPrintf("Extracted all files\n");