From 5a7e36dbde00bda4f13d65252d5447f2bc882407 Mon Sep 17 00:00:00 2001 From: Patrick Brady Date: Tue, 21 May 2019 10:29:49 -0700 Subject: Fix escapeInternalJson method The method incorrectly handled cases where the json string contained json objects internally. These cases should be handled correctly now. Change-Id: I43b40414526bcb6577242ab737097dfb9119e618 Signed-off-by: Patrick Brady Issue-ID: APPC-1576 (cherry picked from commit fc2018739d072a0287b84ff78c94572bce5aba7c) --- .../onap/sdnc/config/generator/tool/JSONTool.java | 31 ++++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) (limited to 'appc-config/appc-config-generator/provider/src') diff --git a/appc-config/appc-config-generator/provider/src/main/java/org/onap/sdnc/config/generator/tool/JSONTool.java b/appc-config/appc-config-generator/provider/src/main/java/org/onap/sdnc/config/generator/tool/JSONTool.java index 3c49ec6a9..e38f8b37a 100644 --- a/appc-config/appc-config-generator/provider/src/main/java/org/onap/sdnc/config/generator/tool/JSONTool.java +++ b/appc-config/appc-config-generator/provider/src/main/java/org/onap/sdnc/config/generator/tool/JSONTool.java @@ -94,19 +94,34 @@ public class JSONTool { char lastChar = 0; boolean inJson = false; for(char c : jsonString.toCharArray()) { + //If we see a { directly after a quote, it would mean that this string will contain json data + //as a string. if(c == '{' && lastChar == '"') { inJson = true; } - if(inJson) { - if(c == '"' && lastChar != '\\') { - sb.append("\\\""); - } else { - sb.append(c); - } - if(c == '}' && lastChar == '"') { + //Checks if we are currently in a json block and if the character we are looking at is + //a quote. The quote is what needs to be escaped. + if(inJson && c == '"') { + //If a } precedes a quote, then this would signal the end of a string containing json + if(lastChar == '}') { inJson = false; + //since this quote we are looking at is outside the json string block, we should not escape it + sb.append("\""); + } else { + //Else block for the case where the quote was preceded by anything other than a } + //We know we are still in the json string block + //If the last character was not a backslash, we know that the quote we are looking at has + //not been escaped. + if(lastChar != '\\') { + //un-escaped quote should be escaped + sb.append("\\\""); + } else { + //quote is already escaped, we can add it as it is + sb.append(c); + } } } else { + //If we are not in a json block, or if the character is not a quote, it can be added as is sb.append(c); } if(!Character.isWhitespace(c)) { @@ -119,7 +134,7 @@ public class JSONTool { throw new JSONException("End of json data reached, but end of internal" + "json string never reached."); } - return sb.toString(); + return sb.toString(); } private static void tryAddBlockKeys(List blockKeys, Map mm, String key, Object o) { -- cgit 1.2.3-korg