some tidy up git-svn-id: https://svn.apache.org/repos/asf/xmlbeans/trunk@1935163 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/xmlbeans/GDate.java b/src/main/java/org/apache/xmlbeans/GDate.java index 2f18fbb..c2308e5 100644 --- a/src/main/java/org/apache/xmlbeans/GDate.java +++ b/src/main/java/org/apache/xmlbeans/GDate.java
@@ -151,7 +151,11 @@ throw new IllegalArgumentException("year value starting with zero must be 4 or less digits: " + string); } - value = value * 10 + digitVal(ch); + long newValue = value * 10L + digitVal(ch); + if (newValue > Integer.MAX_VALUE) { + throw new IllegalArgumentException("date value causes overflow: " + string); + } + value = Math.toIntExact(newValue); start += 1; } digits += start;
diff --git a/src/main/java/org/apache/xmlbeans/GDateBuilder.java b/src/main/java/org/apache/xmlbeans/GDateBuilder.java index fe78811..2d82527 100644 --- a/src/main/java/org/apache/xmlbeans/GDateBuilder.java +++ b/src/main/java/org/apache/xmlbeans/GDateBuilder.java
@@ -1098,7 +1098,7 @@ static Date dateForGDate(GDateSpecification date) { long jDate = julianDateForGDate(date); long to1970Date = jDate - 2440588; - long to1970Ms = 1000 * 60 * 60 * 24 * to1970Date; + long to1970Ms = Math.multiplyExact(1000 * 60 * 60 * 24, to1970Date); to1970Ms += date.getMillisecond(); to1970Ms += date.getSecond() * 1000L;
diff --git a/src/main/java/org/apache/xmlbeans/GDuration.java b/src/main/java/org/apache/xmlbeans/GDuration.java index 42498a3..eb9255d 100644 --- a/src/main/java/org/apache/xmlbeans/GDuration.java +++ b/src/main/java/org/apache/xmlbeans/GDuration.java
@@ -121,9 +121,10 @@ if (!GDate.isDigit(ch)) break; int digit = GDate.digitVal(ch); - if (value > (Integer.MAX_VALUE - digit) / 10) + long newValue = value * 10L + digit; + if (newValue > Integer.MAX_VALUE) throw new IllegalArgumentException("duration field value out of range: " + str); - value = value * 10 + digit; + value = Math.toIntExact(newValue); } if (ch == '.') {
diff --git a/src/main/java/org/apache/xmlbeans/impl/util/XsTypeConverter.java b/src/main/java/org/apache/xmlbeans/impl/util/XsTypeConverter.java index adc2b2b..8124f32 100644 --- a/src/main/java/org/apache/xmlbeans/impl/util/XsTypeConverter.java +++ b/src/main/java/org/apache/xmlbeans/impl/util/XsTypeConverter.java
@@ -399,7 +399,7 @@ prefix = charSeq.subSequence(0, firstcolon).toString(); localname = charSeq.subSequence(firstcolon + 1, charSeq.length()).toString(); if (firstcolon == 0) { - throw new InvalidLexicalValueException("invalid xsd:QName '" + charSeq.toString() + "'"); + throw new InvalidLexicalValueException("invalid xsd:QName '" + charSeq + "'"); } } else { prefix = EMPTY_PREFIX; @@ -590,7 +590,7 @@ // int parser on a CharSequence int length = ch.length(); if (length < 1) { - throw new NumberFormatException("For input string: \"" + ch.toString() + "\""); + throw new NumberFormatException("For input string: \"" + ch + "\""); } int sign = 1; @@ -620,17 +620,17 @@ int v = (c >= '0' && c <= '9') ? c - '0' : -1; if (v < 0) { - throw new NumberFormatException("For input string: \"" + ch.toString() + "\""); + throw new NumberFormatException("For input string: \"" + ch + "\""); } if (result < limit || (result == limit && v > limit2)) { - throw new NumberFormatException("For input string: \"" + ch.toString() + "\""); + throw new NumberFormatException("For input string: \"" + ch + "\""); } - result = result * 10 - v; + result = Math.toIntExact(result * 10L - v); } - return sign * result; + return Math.multiplyExact(sign, result); } // ======================== anyURI ========================