Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2d791055 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 6820 into donut

* changes:
  Fixed NPE bugs in Uri. Fixes internal issue #1724719. Modified getQueryParameter() to use the encoded query string. Fixes internal issue #1749094.
parents 7cd43797 5621f0d9
Loading
Loading
Loading
Loading
+13 −16
Original line number Diff line number Diff line
@@ -1083,7 +1083,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
        /** Used in parcelling. */
        static final int TYPE_ID = 3;

        private final String scheme;
        private final String scheme; // can be null
        private final Part authority;
        private final PathPart path;
        private final Part query;
@@ -1092,10 +1092,10 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
        private HierarchicalUri(String scheme, Part authority, PathPart path,
                Part query, Part fragment) {
            this.scheme = scheme;
            this.authority = authority;
            this.path = path;
            this.query = query;
            this.fragment = fragment;
            this.authority = Part.nonNull(authority);
            this.path = path == null ? PathPart.NULL : path;
            this.query = Part.nonNull(query);
            this.fragment = Part.nonNull(fragment);
        }

        static Uri readFrom(Parcel parcel) {
@@ -1158,21 +1158,18 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
        }

        private void appendSspTo(StringBuilder builder) {
            if (authority != null) {
            String encodedAuthority = authority.getEncoded();
            if (encodedAuthority != null) {
                // Even if the authority is "", we still want to append "//".
                builder.append("//").append(encodedAuthority);
            }
            }

            // path is never null.
            String encodedPath = path.getEncoded();
            if (encodedPath != null) {
                builder.append(encodedPath);
            }

            if (query != null && !query.isEmpty()) {
            if (!query.isEmpty()) {
                builder.append('?').append(query.getEncoded());
            }
        }
@@ -1232,7 +1229,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {

            appendSspTo(builder);

            if (fragment != null && !fragment.isEmpty()) {
            if (!fragment.isEmpty()) {
                builder.append('#').append(fragment.getEncoded());
            }

@@ -1506,7 +1503,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
            throw new UnsupportedOperationException(NOT_HIERARCHICAL);
        }

        String query = getQuery();
        String query = getEncodedQuery();
        if (query == null) {
            return Collections.emptyList();
        }
@@ -1569,7 +1566,7 @@ public abstract class Uri implements Parcelable, Comparable<Uri> {
            throw new UnsupportedOperationException(NOT_HIERARCHICAL);
        }

        String query = getQuery();
        String query = getEncodedQuery();

        if (query == null) {
            return null;
+33 −0
Original line number Diff line number Diff line
@@ -503,4 +503,37 @@ public class UriTest extends TestCase {
    public void testEmptyToStringNotNull() {
        assertNotNull(Uri.EMPTY.toString());
    }

    @SmallTest
    public void testParcellingWithoutFragment() {
        parcelAndUnparcel(Uri.parse("foo:bob%20lee"));
        parcelAndUnparcel(Uri.fromParts("foo", "bob lee", "fragment"));
        parcelAndUnparcel(new Uri.Builder()
            .scheme("http")
            .authority("crazybob.org")
            .path("/rss/")
            .encodedQuery("a=b")
            .build());
    }

    public void testGetQueryParameter() {
        String nestedUrl = "http://crazybob.org/?a=1&b=2";
        Uri uri = Uri.parse("http://test/").buildUpon()
                .appendQueryParameter("foo", "bar")
                .appendQueryParameter("nested", nestedUrl).build();
        assertEquals(nestedUrl, uri.getQueryParameter("nested"));
        assertEquals(nestedUrl, uri.getQueryParameters("nested").get(0));
    }

    public void testGetQueryParameterWorkaround() {
        // This was a workaround for a bug where getQueryParameter called
        // getQuery() instead of getEncodedQuery().
        String nestedUrl = "http://crazybob.org/?a=1&b=2";
        Uri uri = Uri.parse("http://test/").buildUpon()
                .appendQueryParameter("foo", "bar")
                .appendQueryParameter("nested", Uri.encode(nestedUrl)).build();
        assertEquals(nestedUrl, Uri.decode(uri.getQueryParameter("nested")));
        assertEquals(nestedUrl,
                Uri.decode(uri.getQueryParameters("nested").get(0)));
    }
}