From b2aeef577778ce61eb85f13001fd1cc8faa41176 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sat, 4 May 2024 17:44:05 -0500 Subject: [PATCH 1/2] Prevent integer div by 0 in curl progress callback If the curl callback is called at the exact same time as the download begins, this callback would cause an integer division by zero. --- src/d_netfil.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/d_netfil.c b/src/d_netfil.c index 505a2fefd..d7611b31e 100644 --- a/src/d_netfil.c +++ b/src/d_netfil.c @@ -1787,12 +1787,25 @@ size_t curlwrite_data(void *ptr, size_t size, size_t nmemb, FILE *stream) int curlprogress_callback(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) { + time_t curtime; + (void)clientp; (void)ultotal; (void)ulnow; // Function prototype requires these but we won't use, so just discard + + curtime = time(NULL); + curl_dlnow = dlnow; curl_dltotal = dltotal; - getbytes = curl_dlnow / (time(NULL) - curl_starttime); // To-do: Make this more accurate??? + + if (curtime > curl_starttime) + { + getbytes = curl_dlnow / (curtime - curl_starttime); // To-do: Make this more accurate??? + } + else + { + getbytes = 0; + } return 0; } From 41fa89a3bba6dc33ed7f7cbf863ab98069271ca8 Mon Sep 17 00:00:00 2001 From: Eidolon Date: Sat, 4 May 2024 17:49:55 -0500 Subject: [PATCH 2/2] Make curl callbacks in d_netfil.c static Neither of these are referenced outside this compilation unit, so there is no need to make them visible. --- src/d_netfil.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/d_netfil.c b/src/d_netfil.c index d7611b31e..252aaabdf 100644 --- a/src/d_netfil.c +++ b/src/d_netfil.c @@ -62,8 +62,8 @@ static boolean AddFileToSendQueue(INT32 node, const char *filename, UINT8 fileid); #ifdef HAVE_CURL -size_t curlwrite_data(void *ptr, size_t size, size_t nmemb, FILE *stream); -int curlprogress_callback(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow); +static size_t curlwrite_data(void *ptr, size_t size, size_t nmemb, FILE *stream); +static int curlprogress_callback(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow); #endif // Sender structure @@ -1778,14 +1778,14 @@ filestatus_t findfile(char *filename, const UINT8 *wantedmd5sum, boolean complet } #ifdef HAVE_CURL -size_t curlwrite_data(void *ptr, size_t size, size_t nmemb, FILE *stream) +static size_t curlwrite_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { size_t written; written = fwrite(ptr, size, nmemb, stream); return written; } -int curlprogress_callback(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) +static int curlprogress_callback(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow) { time_t curtime;