From d5c2ed6b14d612b5de9dc4b65de35b54ea22118d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Thu, 23 Jan 2014 10:19:24 +0100 Subject: [PATCH] FileRequest: Better error handling for size mismatches --- src/kits/network/libnetapi/FileRequest.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/kits/network/libnetapi/FileRequest.cpp b/src/kits/network/libnetapi/FileRequest.cpp index 75bc534cd9..d24285758d 100644 --- a/src/kits/network/libnetapi/FileRequest.cpp +++ b/src/kits/network/libnetapi/FileRequest.cpp @@ -65,8 +65,11 @@ BFileRequest::_ProtocolLoop() // Send all notifications to listener, if any if (fListener != NULL) { fListener->ConnectionOpened(this); + off_t size = 0; - file.GetSize(&size); + error = file.GetSize(&size); + if (error != B_OK) + return error; fResult.SetLength(size); ssize_t chunkSize; @@ -75,9 +78,13 @@ BFileRequest::_ProtocolLoop() fListener->DataReceived(this, chunk, chunkSize); transferredSize += chunkSize; } - // Return last error if we didn't transfer everything - if (transferredSize != size) - return chunkSize; + // Return error if we didn't transfer everything + if (transferredSize != size) { + if (chunkSize < 0) + return (status_t)chunkSize; + else + return B_IO_ERROR; + } fListener->DownloadProgress(this, size, size); }