Skip to content

Commit 8247d11

Browse files
Escape special characters in StringLiteral (#193)
1 parent 12e7c43 commit 8247d11

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/main/java/pascal/taie/ir/exp/StringLiteral.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424

2525
import pascal.taie.World;
2626
import pascal.taie.language.type.ClassType;
27+
import pascal.taie.util.Strings;
2728

2829
import static pascal.taie.language.classes.ClassNames.STRING;
2930

@@ -75,6 +76,6 @@ public int hashCode() {
7576

7677
@Override
7778
public String toString() {
78-
return "\"" + value + "\"";
79+
return "\"" + Strings.escape(value) + "\"";
7980
}
8081
}

src/main/java/pascal/taie/util/Strings.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,33 @@ public static String capitalize(String str) {
5151
return new String(chars);
5252
}
5353

54+
/**
55+
* Escapes special characters in a given string by replacing them with
56+
* their corresponding escape sequences.
57+
* If the input string is null or empty, the method returns it unchanged.
58+
*
59+
* @param str the input string to be escaped
60+
* @return a string with special characters replaced by their corresponding
61+
* escape sequences, or the original string if it is null or empty
62+
*/
63+
public static String escape(String str) {
64+
if (str == null || str.isEmpty()) {
65+
return str;
66+
}
67+
StringBuilder buffer = new StringBuilder();
68+
for (int i = 0; i < str.length(); i++) {
69+
char c = str.charAt(i);
70+
switch (c) {
71+
case '\\' -> buffer.append("\\\\");
72+
case '\"' -> buffer.append("\\\"");
73+
case '\b' -> buffer.append("\\b");
74+
case '\t' -> buffer.append("\\t");
75+
case '\n' -> buffer.append("\\n");
76+
case '\f' -> buffer.append("\\f");
77+
case '\r' -> buffer.append("\\r");
78+
default -> buffer.append(c);
79+
}
80+
}
81+
return buffer.toString();
82+
}
5483
}

0 commit comments

Comments
 (0)