summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/com/gitblit/utils/StringUtils.java10
-rw-r--r--src/test/java/com/gitblit/tests/StringUtilsTest.java34
2 files changed, 40 insertions, 4 deletions
diff --git a/src/main/java/com/gitblit/utils/StringUtils.java b/src/main/java/com/gitblit/utils/StringUtils.java
index 442acbbf..0e23d637 100644
--- a/src/main/java/com/gitblit/utils/StringUtils.java
+++ b/src/main/java/com/gitblit/utils/StringUtils.java
@@ -105,6 +105,8 @@ public class StringUtils {
public static String escapeForHtml(String inStr, boolean changeSpace, int tabLength) {
StringBuilder retStr = new StringBuilder();
int i = 0;
+ int l = 0;
+
while (i < inStr.length()) {
if (inStr.charAt(i) == '&') {
retStr.append("&amp;");
@@ -117,12 +119,18 @@ public class StringUtils {
} else if (changeSpace && inStr.charAt(i) == ' ') {
retStr.append("&nbsp;");
} else if (changeSpace && inStr.charAt(i) == '\t') {
- for (int j = 0; j < tabLength; j++) {
+ for (int j = 0; j < tabLength - l; j++) {
retStr.append("&nbsp;");
}
+ l = -1;
} else {
retStr.append(inStr.charAt(i));
}
+
+ l = (l + 1) % tabLength;
+ if (inStr.charAt(i) == '\n') {
+ l = 0;
+ }
i++;
}
return retStr.toString();
diff --git a/src/test/java/com/gitblit/tests/StringUtilsTest.java b/src/test/java/com/gitblit/tests/StringUtilsTest.java
index 3dae66f4..cc579888 100644
--- a/src/test/java/com/gitblit/tests/StringUtilsTest.java
+++ b/src/test/java/com/gitblit/tests/StringUtilsTest.java
@@ -61,11 +61,39 @@ public class StringUtilsTest extends GitblitUnitTest {
@Test
public void testEscapeForHtml() throws Exception {
- String input = "& < > \" \t";
- String outputNoChange = "&amp; &lt; &gt; &quot; \t";
- String outputChange = "&amp;&nbsp;&lt;&nbsp;&gt;&nbsp;&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
+ String input = "\t & < > \"";
+ String outputNoChange = "\t &amp; &lt; &gt; &quot;";
+ String outputChange = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&nbsp;&lt;&nbsp;&gt;&nbsp;&quot;";
assertEquals(outputNoChange, StringUtils.escapeForHtml(input, false));
assertEquals(outputChange, StringUtils.escapeForHtml(input, true));
+
+ input = "a\tb";
+ outputNoChange = "a\tb";
+ outputChange = "a&nbsp;&nbsp;&nbsp;b";
+ assertEquals(outputNoChange, StringUtils.escapeForHtml(input, false));
+ assertEquals(outputChange, StringUtils.escapeForHtml(input, true));
+
+ input = "\ta b\t";
+ outputNoChange = "\ta b\t";
+ outputChange = "&nbsp;&nbsp;&nbsp;&nbsp;a&nbsp;b&nbsp;";
+ assertEquals(outputNoChange, StringUtils.escapeForHtml(input, false));
+ assertEquals(outputChange, StringUtils.escapeForHtml(input, true));
+
+ input = "\t <> \t";
+ outputNoChange = "\t &lt;&gt; \t";
+ outputChange = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
+ assertEquals(outputNoChange, StringUtils.escapeForHtml(input, false));
+ assertEquals(outputChange, StringUtils.escapeForHtml(input, true));
+
+ String tabs = "\t";
+ int tabSpaces;
+ int expectedLength;
+ for (int i = 0; i < 50; i++) {
+ tabSpaces = 4 - i % 4;
+ expectedLength = (i + tabSpaces) * 6; // &nbsp; = 6 chars
+ assertEquals(expectedLength, StringUtils.escapeForHtml(tabs, true).length());
+ tabs = " " + tabs;
+ }
}
@Test