From bab355068301018fa16ef26c9e3d08118dcbfd26 Mon Sep 17 00:00:00 2001 From: Liao Xin <93535922+liewstar@users.noreply.github.com> Date: Fri, 26 Jul 2024 02:22:48 +0800 Subject: [PATCH] feat: fix the comma separater bug (#408) * fix:the commoa separated bug * fix:the commoa separated bug * fix:modify word spelling --- .../java/org/casbin/jcasbin/util/Util.java | 19 ++++++++++++++++++- .../org/casbin/jcasbin/main/UtilTest.java | 5 ++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/casbin/jcasbin/util/Util.java b/src/main/java/org/casbin/jcasbin/util/Util.java index d27923b5..64838226 100644 --- a/src/main/java/org/casbin/jcasbin/util/Util.java +++ b/src/main/java/org/casbin/jcasbin/util/Util.java @@ -35,12 +35,16 @@ public class Util { public static boolean enableLog = true; private static Pattern evalReg = Pattern.compile("\\beval\\(([^),]*)\\)"); + private static Pattern BracketsReg = Pattern.compile("\\{[^}]*\\}"); + private static Pattern escapeAssertionRegex = Pattern.compile("\\b(r|p)[0-9]*\\."); private static Logger LOGGER = LoggerFactory.getLogger("org.casbin.jcasbin"); private static final String md5AlgorithmName = "MD5"; + private static final String MEDIAN = "||"; + /** * logPrint prints the log. * @@ -270,12 +274,13 @@ public static String[] splitCommaDelimited(String s) { String[] records = null; if (s != null) { try { + s = replaceCommaInBrackets(s); CSVFormat csvFormat = CSVFormat.Builder.create().setIgnoreSurroundingSpaces(true).build(); CSVParser csvParser = csvFormat.parse(new StringReader(s)); List csvRecords = csvParser.getRecords(); records = new String[csvRecords.get(0).size()]; for (int i = 0; i < csvRecords.get(0).size(); i++) { - records[i] = csvRecords.get(0).get(i).trim(); + records[i] = csvRecords.get(0).get(i).replace(MEDIAN, ",").trim(); } } catch (IOException e) { Util.logPrintfError("CSV parser failed to parse this line: " + s, e); @@ -313,6 +318,18 @@ public static boolean setEquals(List a, List b) { return true; } + public static String replaceCommaInBrackets(String s){ + Matcher matcher = BracketsReg.matcher(s); + StringBuffer sb = new StringBuffer(); + while (matcher.find()) { + String match = matcher.group(); + String replaced = match.replaceAll(",", MEDIAN); + matcher.appendReplacement(sb, replaced); + } + matcher.appendTail(sb); + return sb.length() > 0 ? sb.toString() : s; + } + public static boolean hasEval(String exp) { return evalReg.matcher(exp).matches(); } diff --git a/src/test/java/org/casbin/jcasbin/main/UtilTest.java b/src/test/java/org/casbin/jcasbin/main/UtilTest.java index 545bc373..1a89c976 100644 --- a/src/test/java/org/casbin/jcasbin/main/UtilTest.java +++ b/src/test/java/org/casbin/jcasbin/main/UtilTest.java @@ -111,9 +111,12 @@ public void should_logged_when_splitCommaDelimited_given_ioException() { MockedConstruction stringReaderMocked = BDDMockito.mockConstruction(CSVFormat.class, (mock, context) -> { BDDMockito.given(mock.parse(any(StringReader.class))).willThrow(ioEx); })) { + + String csv = "\n"; + // given + utilMocked.when(() -> Util.replaceCommaInBrackets(anyString())).thenReturn(csv); utilMocked.when(() -> Util.splitCommaDelimited(anyString())).thenCallRealMethod(); - String csv = "\n"; // when Util.splitCommaDelimited(csv);