From b3dfe37aeac0fbe3c036dcb65cf3760a0e796849 Mon Sep 17 00:00:00 2001 From: Sergei Zimmerman Date: Wed, 19 Nov 2025 01:50:19 +0300 Subject: [PATCH] libstore/filetransfer: Handle exceptions in progressCallback --- src/libstore/filetransfer.cc | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/libstore/filetransfer.cc b/src/libstore/filetransfer.cc index ba5e000b3..c3ad763e4 100644 --- a/src/libstore/filetransfer.cc +++ b/src/libstore/filetransfer.cc @@ -277,14 +277,17 @@ struct curlFileTransfer : public FileTransfer return ((TransferItem *) userp)->headerCallback(contents, size, nmemb); } - int progressCallback(curl_off_t dltotal, curl_off_t dlnow) - { - try { - act.progress(dlnow, dltotal); - } catch (nix::Interrupted &) { - assert(getInterrupted()); - } + int progressCallback(curl_off_t dltotal, curl_off_t dlnow) noexcept + try { + act.progress(dlnow, dltotal); return getInterrupted(); + } catch (nix::Interrupted &) { + assert(getInterrupted()); + return 1; + } catch (...) { + /* Something unexpected has happened like logger throwing an exception. */ + callbackException = std::current_exception(); + return 1; } static int progressCallbackWrapper(