[haiku-commits] Change in haiku[master]: Tracker: add some time_t overflow checks in StatusWindow

  • From: Gerrit <review@xxxxxxxxxxxxxxxxxxx>
  • To: waddlesplash <waddlesplash@xxxxxxxxx>, haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 8 May 2020 18:34:28 +0000

From Adrien Destugues <pulkomandy@xxxxxxxxx>:

Adrien Destugues has uploaded this change for review. ( 
https://review.haiku-os.org/c/haiku/+/2608 ;)


Change subject: Tracker: add some time_t overflow checks in StatusWindow
......................................................................

Tracker: add some time_t overflow checks in StatusWindow

Don't pretend file copies will end in 1901, that's obviously wrong.

Helps with #11176, but we should really not use time_t here, or make it
64bit.

Fun fact: we're now closer to the end of the UNIX epoch than to the creation
of Haiku!
---
M src/kits/tracker/StatusWindow.cpp
1 file changed, 19 insertions(+), 14 deletions(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/08/2608/1

diff --git a/src/kits/tracker/StatusWindow.cpp 
b/src/kits/tracker/StatusWindow.cpp
index 3fdf4f5..4205499 100644
--- a/src/kits/tracker/StatusWindow.cpp
+++ b/src/kits/tracker/StatusWindow.cpp
@@ -794,26 +794,31 @@
        double secondsRemaining = (fTotalSize - fSizeProcessed)
                / totalBytesPerSecond;
        time_t now = (time_t)real_time_clock();
-       time_t finishTime = (time_t)(now + secondsRemaining);

-       char timeText[32];
-       if (finishTime - now > kSecondsPerDay) {
-               BDateTimeFormat().Format(timeText, sizeof(timeText), finishTime,
-                       B_MEDIUM_DATE_FORMAT, B_MEDIUM_TIME_FORMAT);
+       BString string;
+       if (secondsRemaining < 0 || (sizeof(time_t) == 4
+               && now + secondsRemaining > INT32_MAX)) {
+               string = B_TRANSLATE("Finish: after several years");
        } else {
-               BTimeFormat().Format(timeText, sizeof(timeText), finishTime,
-                       B_MEDIUM_TIME_FORMAT);
-       }
+               char timeText[32];
+               time_t finishTime = (time_t)(now + secondsRemaining);

-       BString string(_FullTimeRemainingString(now, finishTime, timeText));
-       float width = StringWidth(string.String());
-       if (width > availableSpace) {
-               string.SetTo(_ShortTimeRemainingString(timeText));
-               width = StringWidth(string.String());
+               if (finishTime - now > kSecondsPerDay) {
+                       BDateTimeFormat().Format(timeText, sizeof(timeText), 
finishTime,
+                                       B_MEDIUM_DATE_FORMAT, 
B_MEDIUM_TIME_FORMAT);
+               } else {
+                       BTimeFormat().Format(timeText, sizeof(timeText), 
finishTime,
+                                       B_MEDIUM_TIME_FORMAT);
+               }
+               string = _FullTimeRemainingString(now, finishTime, timeText);
+               float width = StringWidth(string.String());
+               if (width > availableSpace) {
+                       string.SetTo(_ShortTimeRemainingString(timeText));
+               }
        }

        if (_width != NULL)
-               *_width = width;
+               *_width = StringWidth(string.String());

        return string;
 }

--
To view, visit https://review.haiku-os.org/c/haiku/+/2608
To unsubscribe, or for help writing mail filters, visit 
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I64acc5ab29fb778fe3034c65b5a8418951d30505
Gerrit-Change-Number: 2608
Gerrit-PatchSet: 1
Gerrit-Owner: Adrien Destugues <pulkomandy@xxxxxxxxx>
Gerrit-MessageType: newchange

Other related posts:

  • » [haiku-commits] Change in haiku[master]: Tracker: add some time_t overflow checks in StatusWindow - Gerrit