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