From d6977f69eae6e0496f6b1f5116b3e9d0938801b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Pupier?= Date: Wed, 25 Sep 2019 16:14:40 +0200 Subject: [PATCH] Fix potential NPE #296 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - reported by Sonar - created test for this piece of code and discovered that the case of backslash is not handled. Created #301 to handle it Signed-off-by: Aurélien Pupier --- .../internal/parser/CamelKYamlDSLParser.java | 7 ++- .../parser/CamelKYamlDSLParserTest.java | 51 +++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/test/java/com/github/cameltooling/lsp/internal/parser/CamelKYamlDSLParserTest.java diff --git a/src/main/java/com/github/cameltooling/lsp/internal/parser/CamelKYamlDSLParser.java b/src/main/java/com/github/cameltooling/lsp/internal/parser/CamelKYamlDSLParser.java index f34117369..1e2d20421 100644 --- a/src/main/java/com/github/cameltooling/lsp/internal/parser/CamelKYamlDSLParser.java +++ b/src/main/java/com/github/cameltooling/lsp/internal/parser/CamelKYamlDSLParser.java @@ -96,10 +96,13 @@ private String getStringEncloser(String line) { return null; } - private String repairLostEscapeChars(String stringEncloser, String line) { - if (stringEncloser == null || line == null) { + String repairLostEscapeChars(String stringEncloser, String line) { + if (stringEncloser == null) { return line; } + if(line == null) { + return ""; + } String[] parts = line.split(stringEncloser); StringBuilder res = new StringBuilder(); for (int i = 0; i < parts.length; i++) { diff --git a/src/test/java/com/github/cameltooling/lsp/internal/parser/CamelKYamlDSLParserTest.java b/src/test/java/com/github/cameltooling/lsp/internal/parser/CamelKYamlDSLParserTest.java new file mode 100644 index 000000000..e6af16b6f --- /dev/null +++ b/src/test/java/com/github/cameltooling/lsp/internal/parser/CamelKYamlDSLParserTest.java @@ -0,0 +1,51 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.github.cameltooling.lsp.internal.parser; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +public class CamelKYamlDSLParserTest { + + @Test + void testRepairEscapeCharacterWithNullLine() throws Exception { + assertThat(new CamelKYamlDSLParser().repairLostEscapeChars("\"", null)).isEmpty(); + } + + @Test + void testRepairEscapeCharacterWithNoStringEncloser() throws Exception { + assertThat(new CamelKYamlDSLParser().repairLostEscapeChars(null, "myLine")).isEqualTo("myLine"); + } + + @Test + void testRepairEscapeCharacterWithQuote() throws Exception { + assertThat(new CamelKYamlDSLParser().repairLostEscapeChars("'", "a value with ' quote inside")).isEqualTo("a value with '' quote inside"); + } + + @Test + void testRepairEscapeCharacterWithDoubleQuote() throws Exception { + assertThat(new CamelKYamlDSLParser().repairLostEscapeChars("\"", "a value with double-quote \" inside")).isEqualTo("a value with double-quote \\\" inside"); + } + + @Test + @Disabled("see https://github.com/camel-tooling/camel-language-server/issues/301") + void testRepairEscapeCharacterWithDoubleQuoteAndSlash() throws Exception { + assertThat(new CamelKYamlDSLParser().repairLostEscapeChars("\"", "a value with backslash \\ inside")).isEqualTo("a value with double-quote \\\\ inside"); + } +}