summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/com/gitblit/StoredUserConfig.java45
1 files changed, 42 insertions, 3 deletions
diff --git a/src/main/java/com/gitblit/StoredUserConfig.java b/src/main/java/com/gitblit/StoredUserConfig.java
index 63e1015c..c8f93b20 100644
--- a/src/main/java/com/gitblit/StoredUserConfig.java
+++ b/src/main/java/com/gitblit/StoredUserConfig.java
@@ -89,9 +89,48 @@ public class StoredUserConfig {
}
private static String escape(String value) {
- String fixedValue = '#' == value.charAt(0) ? "\"" + value + "\"" : value;
- fixedValue = fixedValue.replace("\\", "\\\\");
- return fixedValue;
+ boolean quoteIt = false;
+ StringBuilder fixedValue = new StringBuilder(value.length() + 20);
+
+ for (char c : value.toCharArray()) {
+ switch (c) {
+ case '\n':
+ fixedValue.append("\\n");
+ break;
+
+ case '\t':
+ fixedValue.append("\\t");
+ break;
+
+ case '\b':
+ fixedValue.append("\\b");
+ break;
+
+ case '\\':
+ fixedValue.append("\\\\");
+ break;
+
+ case '"':
+ fixedValue.append("\\\"");
+ break;
+
+ case ';':
+ case '#':
+ quoteIt = true;
+ fixedValue.append(c);
+ break;
+
+ default:
+ fixedValue.append(c);
+ break;
+ }
+ }
+
+ if (quoteIt) {
+ fixedValue.insert(0,"\"");
+ fixedValue.append("\"");
+ }
+ return fixedValue.toString();
}
private static String generateKey(String key, String subKey) {