Skip to content

Commit

Permalink
Fix DurationToMilliseconds mult overflow
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 588443477
  • Loading branch information
protobuf-github-bot authored and Copybara-Service committed Dec 6, 2023
1 parent 43e7e52 commit 17b8dd6
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/google/protobuf/util/time_util.cc
Expand Up @@ -311,11 +311,13 @@ int64_t TimeUtil::DurationToNanoseconds(const Duration& duration) {
}

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

int64_t TimeUtil::DurationToMilliseconds(const Duration& duration) {
return RoundTowardZero(DurationToNanoseconds(duration), kNanosPerMillisecond);
return DurationToSeconds(duration) * kMillisPerSecond +
RoundTowardZero(duration.nanos(), kNanosPerMillisecond);
}

int64_t TimeUtil::DurationToSeconds(const Duration& duration) {
Expand Down
6 changes: 6 additions & 0 deletions src/google/protobuf/util/time_util_test.cc
Expand Up @@ -145,6 +145,12 @@ TEST(TimeUtilTest, DurationIntegerConversion) {
1, TimeUtil::DurationToMilliseconds(TimeUtil::MillisecondsToDuration(1)));
EXPECT_EQ(-1, TimeUtil::DurationToMilliseconds(
TimeUtil::MillisecondsToDuration(-1)));
// Test overflow issue
EXPECT_EQ(315576000000000, TimeUtil::DurationToMilliseconds(
TimeUtil::SecondsToDuration(315576000000)));
// Test overflow issue
EXPECT_EQ(315576000000000000, TimeUtil::DurationToMicroseconds(
TimeUtil::SecondsToDuration(315576000000)));
EXPECT_EQ(1, TimeUtil::DurationToSeconds(TimeUtil::SecondsToDuration(1)));
EXPECT_EQ(-1, TimeUtil::DurationToSeconds(TimeUtil::SecondsToDuration(-1)));
EXPECT_EQ(1, TimeUtil::DurationToMinutes(TimeUtil::MinutesToDuration(1)));
Expand Down

0 comments on commit 17b8dd6

Please sign in to comment.