Skip to content

Commit 17b8dd6

Browse files
Fix DurationToMilliseconds mult overflow
PiperOrigin-RevId: 588443477
1 parent 43e7e52 commit 17b8dd6

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

src/google/protobuf/util/time_util.cc

+4-2
Original file line numberDiff line numberDiff line change
@@ -311,11 +311,13 @@ int64_t TimeUtil::DurationToNanoseconds(const Duration& duration) {
311311
}
312312

313313
int64_t TimeUtil::DurationToMicroseconds(const Duration& duration) {
314-
return RoundTowardZero(DurationToNanoseconds(duration), kNanosPerMicrosecond);
314+
return DurationToSeconds(duration) * kMicrosPerSecond +
315+
RoundTowardZero(duration.nanos(), kNanosPerMicrosecond);
315316
}
316317

317318
int64_t TimeUtil::DurationToMilliseconds(const Duration& duration) {
318-
return RoundTowardZero(DurationToNanoseconds(duration), kNanosPerMillisecond);
319+
return DurationToSeconds(duration) * kMillisPerSecond +
320+
RoundTowardZero(duration.nanos(), kNanosPerMillisecond);
319321
}
320322

321323
int64_t TimeUtil::DurationToSeconds(const Duration& duration) {

src/google/protobuf/util/time_util_test.cc

+6
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,12 @@ TEST(TimeUtilTest, DurationIntegerConversion) {
145145
1, TimeUtil::DurationToMilliseconds(TimeUtil::MillisecondsToDuration(1)));
146146
EXPECT_EQ(-1, TimeUtil::DurationToMilliseconds(
147147
TimeUtil::MillisecondsToDuration(-1)));
148+
// Test overflow issue
149+
EXPECT_EQ(315576000000000, TimeUtil::DurationToMilliseconds(
150+
TimeUtil::SecondsToDuration(315576000000)));
151+
// Test overflow issue
152+
EXPECT_EQ(315576000000000000, TimeUtil::DurationToMicroseconds(
153+
TimeUtil::SecondsToDuration(315576000000)));
148154
EXPECT_EQ(1, TimeUtil::DurationToSeconds(TimeUtil::SecondsToDuration(1)));
149155
EXPECT_EQ(-1, TimeUtil::DurationToSeconds(TimeUtil::SecondsToDuration(-1)));
150156
EXPECT_EQ(1, TimeUtil::DurationToMinutes(TimeUtil::MinutesToDuration(1)));

0 commit comments

Comments
 (0)