From c379a9e686bae135d5a00ee554e8f2d4a8b11e62 Mon Sep 17 00:00:00 2001 From: Marco van Dijk Date: Wed, 29 May 2024 11:59:50 +0200 Subject: [PATCH] Fixes to urireader: continue without range request support if HEAD request fails; close socket on error --- lib/urireader.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/urireader.cpp b/lib/urireader.cpp index 92f288fe..b30809d6 100644 --- a/lib/urireader.cpp +++ b/lib/urireader.cpp @@ -213,7 +213,6 @@ namespace HTTP{ downer.getSocket().close(); downer.getSocket().Received().clear(); allData.truncate(0); - if (!downer.isOk()){return false;} supportRangeRequest = false; totalSize = std::string::npos; }else{ @@ -334,7 +333,16 @@ namespace HTTP{ // Note: this function returns true if the full read was completed only. // It's the reason this function returns void rather than bool. size_t prev = cb.getDataCallbackPos(); - downer.continueNonBlocking(cb); + if (downer.continueNonBlocking(cb)){ + if (downer.getStatusCode() >= 400){ + WARN_MSG("Received error response code %" PRIu32 " (%s)", downer.getStatusCode(), downer.getStatusText().c_str()); + // cb.dataCallbackFlush(); + downer.getSocket().close(); + downer.getSocket().Received().clear(); + allData.truncate(0); + return 0; + } + } return cb.getDataCallbackPos() - prev; } // Everything else uses the socket directly