Merge "WebView downgrade prevention logic" into nyc-dev am: e12d62b

am: b5829cd

* commit 'b5829cdf118c5f82d9ed1ce469cbda95ff8e5207':
  WebView downgrade prevention logic

Change-Id: I51bda60f42dd6f6210e846e6dfe88e17fc0a4c05
This commit is contained in:
TreeHugger Robot
2016-04-26 09:38:37 +00:00
committed by android-build-merger
2 changed files with 27 additions and 6 deletions

View File

@@ -216,7 +216,7 @@ public final class WebViewFactory {
}
if (chosen.versionCode > toUse.versionCode) {
throw new MissingWebViewPackageException("Failed to verify WebView provider, "
+ "version code mismatch, expected: " + chosen.versionCode
+ "version code is lower than expected: " + chosen.versionCode
+ " actual: " + toUse.versionCode);
}
if (getWebViewLibrary(toUse.applicationInfo) == null) {

View File

@@ -535,17 +535,38 @@ public class WebViewUpdateServiceImpl {
}
}
/**
* Both versionCodes should be from a WebView provider package implemented by Chromium.
* VersionCodes from other kinds of packages won't make any sense in this method.
*
* An introduction to Chromium versionCode scheme:
* "BBBBPPPAX"
* BBBB: 4 digit branch number. It monotonically increases over time.
* PPP: patch number in the branch. It is padded with zeroes to the left. These three digits may
* change their meaning in the future.
* A: architecture digit.
* X: A digit to differentiate APKs for other reasons.
*
* This method takes the "BBBB" of versionCodes and compare them.
*
* @return true if versionCode1 is higher than or equal to versionCode2.
*/
private static boolean versionCodeGE(int versionCode1, int versionCode2) {
int v1 = versionCode1 / 100000;
int v2 = versionCode2 / 100000;
return v1 >= v2;
}
/**
* Returns whether this provider is valid for use as a WebView provider.
*/
public boolean isValidProvider(WebViewProviderInfo configInfo,
PackageInfo packageInfo) {
if ((packageInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) == 0
&& packageInfo.versionCode < getMinimumVersionCode()
if (!versionCodeGE(packageInfo.versionCode, getMinimumVersionCode())
&& !mSystemInterface.systemIsDebuggable()) {
// Non-system package webview providers may be downgraded arbitrarily low, prevent
// that by enforcing minimum version code. This check is only enforced for user
// builds.
// Webview providers may be downgraded arbitrarily low, prevent that by enforcing
// minimum version code. This check is only enforced for user builds.
return false;
}
if (providerHasValidSignature(configInfo, packageInfo, mSystemInterface) &&