Prevent browser becoming unresponsive when surfing to a URL with many %-escaped characters.

Surfing to a webpage with many %-characters in the URL will hang the browser for several minutes.
To reproduce:
String url =
"http://zh.wikipedia.org/wiki/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5
%8E%BF%E7%BA%A7%E4%BB%A5%E4%B8%8A%E8%A1%8C%E6%94%BF%E5%8C%BA%E5%88%97%E8%A1%A8?%E4%B8%AD%E5%8D%8E
%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%8E%BF%E7%BA%A7%E4%BB%A5%E4%B8%8A%E8%A1%8C%E6%94
%BF%E5%8C%BA%E5%88%97%E8%A1%A8%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5
%8E%BF%E7%BA%A7%E4%BB%A5%E4%B8%8A%E8%A1%8C%E6%94%BF%E5%8C%BA%E5%88%97%E8%A1%A8%E4%B8%AD%E5%8D%8E
%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%8E%BF%E7%BA%A7%E4%BB%A5%E4%B8%8A%E8%A1%8C%E6%94
%BF%E5%8C%BA%E5%88%97%E8%A1%A8%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5
%8E%BF%E7%BA%A7%E4%BB%A5%E4%B8%8A%E8%A1%8C%E6%94%BF%E5%8C%BA%E5%88%97%E8%A1%A8%E4%B8%AD%E5%8D%8E
%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5%8E%BF%E7%BA%A7%E4%BB%A5%E4%B8%8A%E8%A1%8C%E6%94
%BF%E5%8C%BA%E5%88%97%E8%A1%A8%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E5
%8E%BF%E7%BA%A7%E4%BB%A5%E4%B8%8A%E8%A1%8C%E6%94%BF%E5%8C%BA%E5%88%97%E8%A1%A8";
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
intent.addCategory(Intent.CATEGORY_BROWSABLE);
startActivity(intent);

The raw URL is used to match previously visited URLs in the history database with the SQL LIKE operator.
The LIKE operator does however treat %-signs as wildcards and an exhaustive and unnecessary search is made.
The fix uses the ESCAPE functionality of LIKE to treat the %-signs in the URL as non-wildcards.
As underscore is treated as also treated as a wildcard, it is escaped as well.

Change-Id: I20d182bc76b339c49ad23acc1c4d735414310b04
1 file changed