# HG changeset patch # User igerasim # Date 1565222180 25200 # Wed Aug 07 16:56:20 2019 -0700 # Node ID 5ad49c966f1f1a0e70d608fb546cd5b68960208f # Parent 314e62bbdb168fd89fe37ba57519dcd0129c805f [mq]: 8221307-String-substring-OOB-exception-on-start-index-reports-improper-information diff --git a/src/java.base/share/classes/java/lang/String.java b/src/java.base/share/classes/java/lang/String.java --- a/src/java.base/share/classes/java/lang/String.java +++ b/src/java.base/share/classes/java/lang/String.java @@ -1868,15 +1868,16 @@ * length of this {@code String} object. */ public String substring(int beginIndex) { - if (beginIndex < 0) { - throw new StringIndexOutOfBoundsException(beginIndex); - } int subLen = length() - beginIndex; - if (subLen < 0) { - throw new StringIndexOutOfBoundsException(subLen); - } - if (beginIndex == 0) { - return this; + if (beginIndex <= 0 || subLen <= 0) { + if (beginIndex == 0) { + return this; + } + if (subLen == 0) { + return ""; + } + throw new StringIndexOutOfBoundsException( + "begin " + beginIndex + ", length " + length()); } return isLatin1() ? StringLatin1.newString(value, beginIndex, subLen) : StringUTF16.newString(value, beginIndex, subLen);