From 41b6cfab0bdca444d80bbfe0e66382f3ae3bbf7e Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Sun, 28 Jan 2024 15:10:09 +0100 Subject: [PATCH] Java: fix SIOOBE in "Escape trailing whitespace characters" GitOrigin-RevId: 1f975c570b0192a94b651e219b517f742b3b0ba0 --- .../TrailingWhitespacesInTextBlockInspection.java | 4 ++-- .../trailingWhitespacesInTextBlock/EmptyLine.after.java | 9 +++++++++ .../trailingWhitespacesInTextBlock/EmptyLine.java | 9 +++++++++ .../WithBlankLines.after.java | 6 +++--- .../WithEndQuotes.after.java | 5 +++++ .../trailingWhitespacesInTextBlock/WithEndQuotes.java | 5 +++++ .../TrailingWhitespacesInTextBlockInspectionTest.java | 1 + 7 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/EmptyLine.after.java create mode 100644 java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/EmptyLine.java diff --git a/java/java-impl-inspections/src/com/intellij/codeInspection/TrailingWhitespacesInTextBlockInspection.java b/java/java-impl-inspections/src/com/intellij/codeInspection/TrailingWhitespacesInTextBlockInspection.java index 58b2363955cc..1aa5448a39de 100644 --- a/java/java-impl-inspections/src/com/intellij/codeInspection/TrailingWhitespacesInTextBlockInspection.java +++ b/java/java-impl-inspections/src/com/intellij/codeInspection/TrailingWhitespacesInTextBlockInspection.java @@ -200,13 +200,13 @@ public final class TrailingWhitespacesInTextBlockInspection extends AbstractBase if (suffix.equals("\\{")) return result.append(line).toString(); line = line.substring(0, line.length() - suffix.length()); } - String transformed = lineTransformation.apply(line); + String transformed = line.isEmpty() ? line : lineTransformation.apply(line); if (transformed == null) return null; if (last && hasUnescapedLastQuote(transformed)) { result.append(transformed, 0, transformed.length() - 1).append("\\\""); } else if (transformed.isEmpty()) { - result.append((line.length() < indent) ? line : " ".repeat(indent)); + result.append((line.length() < indent) ? line : line.substring(0, indent)); } else { result.append(transformed); } diff --git a/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/EmptyLine.after.java b/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/EmptyLine.after.java new file mode 100644 index 000000000000..85757f6b40b1 --- /dev/null +++ b/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/EmptyLine.after.java @@ -0,0 +1,9 @@ +class EmptyLine { + + void x(int a) { + System.out.println(STR.""" + a\na "\{a} + + \s"""); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/EmptyLine.java b/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/EmptyLine.java new file mode 100644 index 000000000000..850628fbad3f --- /dev/null +++ b/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/EmptyLine.java @@ -0,0 +1,9 @@ +class EmptyLine { + + void x(int a) { + System.out.println(STR.""" + a\na "\{a} + + """); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithBlankLines.after.java b/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithBlankLines.after.java index c329434fb51c..a6774e3302aa 100644 --- a/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithBlankLines.after.java +++ b/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithBlankLines.after.java @@ -1,12 +1,12 @@ class Foo { void test() { String colors = """ - + red - - + + green diff --git a/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithEndQuotes.after.java b/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithEndQuotes.after.java index 96863469e5ec..8bd4ce7e13aa 100644 --- a/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithEndQuotes.after.java +++ b/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithEndQuotes.after.java @@ -28,5 +28,10 @@ class Foo { \u005C \""""; String text14 = """ \u005C\u005C\u005C\u005C\""""; + String text15 = STR.""" + "scary"\{} + "scary"\{} + "scary" \{} + """; } } diff --git a/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithEndQuotes.java b/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithEndQuotes.java index 99a9b7ec1693..2ab5820fbfb6 100644 --- a/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithEndQuotes.java +++ b/java/java-tests/testData/inspection/trailingWhitespacesInTextBlock/WithEndQuotes.java @@ -28,5 +28,10 @@ class Foo { \u005C " """; String text14 = """ \u005C\u005C\u005C\u005C" """; + String text15 = STR.""" + "scary"\{} + "scary"\{} + "scary" \{} + """; } } diff --git a/java/java-tests/testSrc/com/intellij/java/codeInspection/TrailingWhitespacesInTextBlockInspectionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInspection/TrailingWhitespacesInTextBlockInspectionTest.java index 261f0f2c114a..aab26b0bbc7c 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInspection/TrailingWhitespacesInTextBlockInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInspection/TrailingWhitespacesInTextBlockInspectionTest.java @@ -12,6 +12,7 @@ public class TrailingWhitespacesInTextBlockInspectionTest extends LightJavaInspe public void testBadTextBlock() { doTest(); } public void testBlankLine() { doTestAll(); } + public void testEmptyLine() { doTestEscape(); } public void testEmptyLastLine() { doTestAll(); } public void testOneLineBlock() { doTestAll(); } public void testReplaceAtTheEnd() { doTestEscape(); }