From db4af7121586f5dbe41d3f5375c141108503248b Mon Sep 17 00:00:00 2001 From: EoD <293499+EoD@users.noreply.github.com> Date: Thu, 10 Jul 2025 21:14:50 +0000 Subject: [PATCH 1/3] fix string to map generation with base64 encoding The new base64 encoding uses "=" characters as part of its encoding. The previous code split those and trimmed them afterwards, making the base64 not consistent with the rest of the code that assumed "=" are still present, like "B64:e30=". (cherry picked from commit de324a23be1e1dd06595763a295d2577daea0cb1) --- .../fubuki/playersync/util/LocalJsonUtil.java | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java b/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java index f82748d..e3423e4 100644 --- a/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java +++ b/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java @@ -11,8 +11,15 @@ public class LocalJsonUtil { String[] split = s2.split(","); for (int i = split.length - 1; i >= 0; i--) { String trim = split[i].trim(); - String[] split1 = trim.split("="); - map.put(split1[0],split1[1]); + + // only check for the first "=" as the values also contain additional "=" + int equalIndex = trim.indexOf('='); + if (equalIndex < 0) + continue; + + String key = trim.substring(0, equalIndex); + String value = trim.substring(equalIndex + 1); + map.put(key, value); } return map; } @@ -24,8 +31,15 @@ public class LocalJsonUtil { String[] split = s2.split(","); for (int i = split.length - 1; i >= 0; i--) { String trim = split[i].trim(); - String[] split1 = trim.split("="); - map.put(Integer.parseInt(split1[0]),split1[1]); + + // only check for the first "=" as the values also contain additional "=" + int equalIndex = trim.indexOf('='); + if (equalIndex < 0) + continue; + + String key = trim.substring(0, equalIndex); + String value = trim.substring(equalIndex + 1); + map.put(Integer.parseInt(key), value); } return map; } From 85f953a2200585d3206c2c571d8abf149f259598 Mon Sep 17 00:00:00 2001 From: EoD <293499+EoD@users.noreply.github.com> Date: Thu, 10 Jul 2025 21:46:34 +0000 Subject: [PATCH 2/3] unify both stringToMap functions (cherry picked from commit 228b835c2aa6812bcdb486168d630bf4ffe19454) --- .../fubuki/playersync/util/LocalJsonUtil.java | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java b/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java index e3423e4..f583270 100644 --- a/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java +++ b/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java @@ -2,10 +2,11 @@ package vip.fubuki.playersync.util; import java.util.HashMap; import java.util.Map; +import java.util.function.Function; public class LocalJsonUtil { - public static Map StringToMap(String param) { - Map map = new HashMap<>(); + private static Map stringToGenericMap(String param, Function keyParser) { + Map map = new HashMap<>(); String s1 = param.substring(1,param.length()-1); String s2 = s1.trim(); String[] split = s2.split(","); @@ -19,28 +20,16 @@ public class LocalJsonUtil { String key = trim.substring(0, equalIndex); String value = trim.substring(equalIndex + 1); - map.put(key, value); + map.put(keyParser.apply(key), value); } return map; } - public static Map StringToEntryMap(String param) { - Map map = new HashMap<>(); - String s1 = param.substring(1,param.length()-1); - String s2 = s1.trim(); - String[] split = s2.split(","); - for (int i = split.length - 1; i >= 0; i--) { - String trim = split[i].trim(); + public static Map StringToMap(String param) { + return stringToGenericMap(param, Function.identity()); + } - // only check for the first "=" as the values also contain additional "=" - int equalIndex = trim.indexOf('='); - if (equalIndex < 0) - continue; - - String key = trim.substring(0, equalIndex); - String value = trim.substring(equalIndex + 1); - map.put(Integer.parseInt(key), value); - } - return map; + public static Map StringToEntryMap(String param) { + return stringToGenericMap(param, Integer::parseInt); } } From 9b7ebebf98ae0a7d906608b3cf665bc7191a3b33 Mon Sep 17 00:00:00 2001 From: EoD <293499+EoD@users.noreply.github.com> Date: Thu, 10 Jul 2025 22:04:05 +0000 Subject: [PATCH 3/3] simplify and exit early in stringToGenericMap (cherry picked from commit 53bdfe23097fc9b34ff4c43ea9b11100d90bbd09) --- .../fubuki/playersync/util/LocalJsonUtil.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java b/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java index f583270..44c2249 100644 --- a/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java +++ b/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java @@ -7,11 +7,21 @@ import java.util.function.Function; public class LocalJsonUtil { private static Map stringToGenericMap(String param, Function keyParser) { Map map = new HashMap<>(); - String s1 = param.substring(1,param.length()-1); - String s2 = s1.trim(); - String[] split = s2.split(","); - for (int i = split.length - 1; i >= 0; i--) { - String trim = split[i].trim(); + + // check if string is at least minimal json + if (param == null || param.length() < 2 || param.equals("{}")) { + return map; + } + + // extract string within outermost json brackets {} + String s1 = param.substring(param.indexOf('{')+1, param.lastIndexOf('}')).trim(); + if (s1.isEmpty()) { + return map; + } + + // split all json elements + for (String split : s1.split(",")) { + String trim = split.trim(); // only check for the first "=" as the values also contain additional "=" int equalIndex = trim.indexOf('=');