Skip to content

Commit 88d08b5

Browse files
committed
Handle overflow in Deadline calculation to ensure correct behavior for large time values.
1 parent b435a0b commit 88d08b5

2 files changed

Lines changed: 12 additions & 3 deletions

File tree

httpcore5/src/main/java/org/apache/hc/core5/util/Deadline.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,8 @@ public class Deadline {
8383
*/
8484
public static Deadline calculate(final long timeMillis, final TimeValue timeValue) {
8585
if (TimeValue.isPositive(timeValue)) {
86-
// TODO handle unlikely overflow
87-
final long deadline = timeMillis + timeValue.toMilliseconds();
88-
return deadline < 0 ? Deadline.MAX_VALUE : Deadline.fromUnixMilliseconds(deadline);
86+
return Deadline.fromUnixMilliseconds(timeMillis +
87+
Math.min(timeValue.toMilliseconds(), Long.MAX_VALUE - timeMillis));
8988
}
9089
return Deadline.MAX_VALUE;
9190
}

httpcore5/src/test/java/org/apache/hc/core5/util/TestDeadline.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,14 @@ void testValue() {
130130
final Deadline deadline = Deadline.fromUnixMilliseconds(nowPlusOneMin);
131131
Assertions.assertEquals(nowPlusOneMin, deadline.getValue());
132132
}
133+
134+
@Test
135+
void testOverflowHandling() {
136+
final long currentTime = Long.MAX_VALUE - 5000; // Simulate close to overflow
137+
final TimeValue tenSeconds = TimeValue.ofMilliseconds(10000); // 10 seconds
138+
final Deadline deadline = Deadline.calculate(currentTime, tenSeconds);
139+
140+
Assertions.assertEquals(Deadline.MAX_VALUE, deadline,
141+
"Overflow should result in the maximum deadline value.");
142+
}
133143
}

0 commit comments

Comments
 (0)