You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/01/08 14:36:05 UTC
svn commit: r732703 - in /jackrabbit/trunk/jackrabbit-jcr-commons/src:
main/java/org/apache/jackrabbit/util/Text.java
test/java/org/apache/jackrabbit/util/TextTest.java
Author: jukka
Date: Thu Jan 8 05:36:05 2009
New Revision: 732703
URL: http://svn.apache.org/viewvc?rev=732703&view=rev
Log:
JCR-1926: Text.unescape("%") throws a StringIndexOutOfBoundsException
Now throws IllegalArgumentException. Also added a relevant test case.
Modified:
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java?rev=732703&r1=732702&r2=732703&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java Thu Jan 8 05:36:05 2009
@@ -402,15 +402,19 @@
ByteArrayOutputStream out = new ByteArrayOutputStream(string.length());
for (int i = 0; i < string.length(); i++) {
char c = string.charAt(i);
- if (c == escape) {
+ if (c != escape) {
+ out.write(c);
+ } else if (i + 2 < string.length()) {
try {
out.write(Integer.parseInt(string.substring(i + 1, i + 3), 16));
} catch (NumberFormatException e) {
- throw new IllegalArgumentException();
+ throw new IllegalArgumentException(
+ "Escape sequence is not hexadecimal: " + string);
}
i += 2;
} else {
- out.write(c);
+ throw new IllegalArgumentException(
+ "Escape sequence is too short: " + string);
}
}
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java?rev=732703&r1=732702&r2=732703&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java Thu Jan 8 05:36:05 2009
@@ -143,4 +143,23 @@
assertEquals(strs[1], Text.getName(strs[0], '='));
}
}
+
+ /**
+ * @see <a href="https://issues.apache.org/jira/browse/JCR-1926">JCR-1926</a>
+ */
+ public void testUnescapeWithInvalidInput() {
+ assertInvalidUnescape("%"); // too short
+ assertInvalidUnescape("%%"); // too short
+ assertInvalidUnescape("%%%"); // not a number
+ }
+
+ private void assertInvalidUnescape(String string) {
+ try {
+ Text.unescape(string);
+ } catch (IllegalArgumentException expected) {
+ } catch (RuntimeException unexpected) {
+ fail("Text.unescape(" + string + "): " + unexpected.getMessage());
+ }
+ }
+
}