From a770f8d4bd583e9a719af6ce314838db12003b33 Mon Sep 17 00:00:00 2001 From: Selim Gurun Date: Wed, 13 Jun 2012 14:51:23 -0700 Subject: Encode characters that java.net.URI rejects Bug: 5952386 Our java.net.URI implementation conforms to an old obsolete RFC and it is very restrictive. Since in our download path, we use download manager and so java.net.URI, this causes an odd bug (i.e. URIs that are fetched fine by chromium http stack fails when download manager is used). Also there is a second bug that when URI parsing fails and an exception is thrown, we fail to catch it and crash. This CL fixes both. Change-Id: I62ac289566efae97dd2161b8041b06a0a87211cb --- src/com/android/browser/DownloadHandler.java | 4 ++-- src/com/android/browser/FetchUrlMimeType.java | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 5 deletions(-) (limited to 'src/com/android') diff --git a/src/com/android/browser/DownloadHandler.java b/src/com/android/browser/DownloadHandler.java index 6e2c786d3..219114e11 100644 --- a/src/com/android/browser/DownloadHandler.java +++ b/src/com/android/browser/DownloadHandler.java @@ -107,7 +107,7 @@ public class DownloadHandler { boolean needed = false; for (char c : chars) { - if (c == '[' || c == ']') { + if (c == '[' || c == ']' || c == '|') { needed = true; break; } @@ -118,7 +118,7 @@ public class DownloadHandler { StringBuilder sb = new StringBuilder(""); for (char c : chars) { - if (c == '[' || c == ']') { + if (c == '[' || c == ']' || c == '|') { sb.append('%'); sb.append(Integer.toHexString(c)); } else { diff --git a/src/com/android/browser/FetchUrlMimeType.java b/src/com/android/browser/FetchUrlMimeType.java index 845bcc72d..07c9b936b 100644 --- a/src/com/android/browser/FetchUrlMimeType.java +++ b/src/com/android/browser/FetchUrlMimeType.java @@ -27,6 +27,7 @@ import android.content.Context; import android.net.Proxy; import android.net.http.AndroidHttpClient; import android.os.Environment; +import android.util.Log; import android.webkit.MimeTypeMap; import android.webkit.URLUtil; @@ -44,6 +45,8 @@ import java.io.IOException; */ class FetchUrlMimeType extends Thread { + private final static String LOGTAG = "FetchUrlMimeType"; + private Context mContext; private DownloadManager.Request mRequest; private String mUri; @@ -64,9 +67,16 @@ class FetchUrlMimeType extends Thread { // User agent is likely to be null, though the AndroidHttpClient // seems ok with that. AndroidHttpClient client = AndroidHttpClient.newInstance(mUserAgent); - HttpHost httpHost = Proxy.getPreferredHttpHost(mContext, mUri); - if (httpHost != null) { - ConnRouteParams.setDefaultProxy(client.getParams(), httpHost); + HttpHost httpHost; + try { + httpHost = Proxy.getPreferredHttpHost(mContext, mUri); + if (httpHost != null) { + ConnRouteParams.setDefaultProxy(client.getParams(), httpHost); + } + } catch (IllegalArgumentException ex) { + Log.e(LOGTAG,"Download failed: " + ex); + client.close(); + return; } HttpHead request = new HttpHead(mUri); -- cgit v1.2.3