Skip to content

Commit d3911ac

Browse files
committed
Handle case where input duration overflows
1 parent c210a5c commit d3911ac

File tree

1 file changed

+19
-15
lines changed

1 file changed

+19
-15
lines changed

cloud-core/src/main/java/org/incendo/cloud/parser/standard/DurationParser.java

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -106,21 +106,25 @@ public final class DurationParser<C> implements ArgumentParser<C, Duration>, Blo
106106
}
107107

108108
final char timeUnit = input.charAt(cursor);
109-
switch (timeUnit) {
110-
case 'd':
111-
duration = duration.plusDays(timeValue);
112-
break;
113-
case 'h':
114-
duration = duration.plusHours(timeValue);
115-
break;
116-
case 'm':
117-
duration = duration.plusMinutes(timeValue);
118-
break;
119-
case 's':
120-
duration = duration.plusSeconds(timeValue);
121-
break;
122-
default:
123-
return ArgumentParseResult.failure(new DurationParseException(input, commandContext));
109+
try {
110+
switch (timeUnit) {
111+
case 'd':
112+
duration = duration.plusDays(timeValue);
113+
break;
114+
case 'h':
115+
duration = duration.plusHours(timeValue);
116+
break;
117+
case 'm':
118+
duration = duration.plusMinutes(timeValue);
119+
break;
120+
case 's':
121+
duration = duration.plusSeconds(timeValue);
122+
break;
123+
default:
124+
return ArgumentParseResult.failure(new DurationParseException(input, commandContext));
125+
}
126+
} catch (final ArithmeticException ex) {
127+
return ArgumentParseResult.failure(new DurationParseException(ex, input, commandContext));
124128
}
125129

126130
// skip unit, reset rangeStart to start of next segment

0 commit comments

Comments
 (0)