summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Ito <kito@google.com>2010-05-11 10:19:06 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-05-11 10:19:06 -0700
commita8d8cb12b3dbe5e196a3ff2549f8594a704ecde4 (patch)
treeacf22cac60be1b6f55e10d14e4bbaa790a56e534
parent373b4913ab5398736551ab718eb8c39d6f76e5d0 (diff)
parentbe65399baf23855094596e27c25763ff92e9e027 (diff)
downloadframeworks_base-a8d8cb12b3dbe5e196a3ff2549f8594a704ecde4.zip
frameworks_base-a8d8cb12b3dbe5e196a3ff2549f8594a704ecde4.tar.gz
frameworks_base-a8d8cb12b3dbe5e196a3ff2549f8594a704ecde4.tar.bz2
am be65399b: Merge "Fix for bug 2672749: StringIndexOutOfBoundsException in Uri.getQueryParameter" into froyo
Merge commit 'be65399baf23855094596e27c25763ff92e9e027' into froyo-plus-aosp * commit 'be65399baf23855094596e27c25763ff92e9e027': Fix for bug 2672749: StringIndexOutOfBoundsException in Uri.getQueryParameter
-rw-r--r--core/java/android/net/Uri.java3
-rw-r--r--core/tests/coretests/src/android/net/UriTest.java20
2 files changed, 23 insertions, 0 deletions
diff --git a/core/java/android/net/Uri.java b/core/java/android/net/Uri.java
index eca4569..47faaba 100644
--- a/core/java/android/net/Uri.java
+++ b/core/java/android/net/Uri.java
@@ -1588,6 +1588,9 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
break;
}
final int equalsIndex = keyIndex + encodedKeyLength;
+ if (equalsIndex >= query.length()) {
+ break;
+ }
if (query.charAt(equalsIndex) != '=') {
encodedKeySearchIndex = equalsIndex + 1;
continue;
diff --git a/core/tests/coretests/src/android/net/UriTest.java b/core/tests/coretests/src/android/net/UriTest.java
index 095ee13..a5fda20 100644
--- a/core/tests/coretests/src/android/net/UriTest.java
+++ b/core/tests/coretests/src/android/net/UriTest.java
@@ -582,5 +582,25 @@ public class UriTest extends TestCase {
.appendQueryParameter("bkey", "e f")
.build();
assertNull(uri.getQueryParameter("key"));
+
+ // key is a prefix or suffix of the query
+ uri = Uri.parse("http://test/?qq=foo");
+ assertNull(uri.getQueryParameter("q"));
+ assertNull(uri.getQueryParameter("oo"));
+
+ // escaped keys
+ uri = Uri.parse("http://www.google.com/?a%20b=foo&c%20d=");
+ assertEquals("foo", uri.getQueryParameter("a b"));
+ assertEquals("", uri.getQueryParameter("c d"));
+ assertNull(uri.getQueryParameter("e f"));
+ assertNull(uri.getQueryParameter("b"));
+ assertNull(uri.getQueryParameter("c"));
+ assertNull(uri.getQueryParameter(" d"));
+
+ // empty values
+ uri = Uri.parse("http://www.google.com/?a=&b=&&c=");
+ assertEquals("", uri.getQueryParameter("a"));
+ assertEquals("", uri.getQueryParameter("b"));
+ assertEquals("", uri.getQueryParameter("c"));
}
}