aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-04-08 15:18:41 +0200
committerEelco Dolstra <edolstra@gmail.com>2020-04-08 15:27:09 +0200
commit1ab8d6ac1861e9405ae34af3deb681020c03e82d (patch)
tree370c8d3c58c4214578751bcf2895479515fda873
parent55cefd41d63368d4286568e2956afd535cb44018 (diff)
Downloader: Only write data to the sink on a 200 response
Hopefully fixes #3278.
-rw-r--r--src/libstore/download.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/libstore/download.cc b/src/libstore/download.cc
index af69699a8..bc875f653 100644
--- a/src/libstore/download.cc
+++ b/src/libstore/download.cc
@@ -83,8 +83,15 @@ struct CurlDownloader : public Downloader
, callback(std::move(callback))
, finalSink([this](const unsigned char * data, size_t len) {
if (this->request.dataCallback) {
- writtenToSink += len;
- this->request.dataCallback((char *) data, len);
+ long httpStatus = 0;
+ curl_easy_getinfo(req, CURLINFO_RESPONSE_CODE, &httpStatus);
+
+ /* Only write data to the sink if this is a
+ successful response. */
+ if (httpStatus == 0 || httpStatus == 200 || httpStatus == 201 || httpStatus == 206) {
+ writtenToSink += len;
+ this->request.dataCallback((char *) data, len);
+ }
} else
this->result.data->append((char *) data, len);
})