Skip to content

Commit

Permalink
feat: fix the comma separater bug (#408)
Browse files Browse the repository at this point in the history
* fix:the commoa separated bug

* fix:the commoa separated bug

* fix:modify word spelling
  • Loading branch information
liewstar committed Jul 25, 2024
1 parent 4ab6346 commit bab3550
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 2 deletions.
19 changes: 18 additions & 1 deletion src/main/java/org/casbin/jcasbin/util/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -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.
*
Expand Down Expand Up @@ -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<CSVRecord> 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);
Expand Down Expand Up @@ -313,6 +318,18 @@ public static boolean setEquals(List<String> a, List<String> 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();
}
Expand Down
5 changes: 4 additions & 1 deletion src/test/java/org/casbin/jcasbin/main/UtilTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,12 @@ public void should_logged_when_splitCommaDelimited_given_ioException() {
MockedConstruction<CSVFormat> 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);
Expand Down

0 comments on commit bab3550

Please sign in to comment.