# HG changeset patch # User jlaskey # Date 1539972920 10800 # Fri Oct 19 15:15:20 2018 -0300 # Node ID 26ac53e46d81455770e34f03fd1f3d27f67e1bb2 # Parent cb94f3a51aed502ab84b57c4a5a9dc1258722fa6 8212694: Using Raw String Literals with align() and Integer.MIN_VALUE causes out of memory error Reviewed-by: smarks 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 @@ -2968,7 +2968,9 @@ .mapToInt(String::indexOfNonWhitespace) .min() .orElse(0); - return indent(n - outdent, true); + // overflow-conscious code + int indent = n - outdent; + return indent(indent > n ? Integer.MIN_VALUE : indent, true); } /** diff --git a/test/jdk/java/lang/String/AlignIndent.java b/test/jdk/java/lang/String/AlignIndent.java --- a/test/jdk/java/lang/String/AlignIndent.java +++ b/test/jdk/java/lang/String/AlignIndent.java @@ -53,6 +53,7 @@ test1(); test2(); test3(); + test4(); } /* @@ -154,6 +155,18 @@ } } + /* + * JDK-8212694: Using Raw String Literals with align() and Integer.MIN_VALUE causes out of memory error + */ + static void test4() { + try { + String str = "\n A\n".align(Integer.MIN_VALUE); + } catch (OutOfMemoryError ex) { + System.err.println("align(Integer.MIN_VALUE) not clipping indentation"); + throw new RuntimeException(); + } + } + public static int indexOfNonWhitespace(String s) { int left = 0; while (left < s.length()) {