From 6e43d72f25b03cf744cbeb8e4f92fb444f23f3b4 Mon Sep 17 00:00:00 2001 From: David Hebbeker Date: Tue, 22 May 2018 16:28:37 +0200 Subject: [PATCH] Make version string trimming more robust. Non-number characters are replaced in version number partitions. Empty version number partitions are replaced with 0. In case the resulting version string is invalid a checked exception is thrown. This exception is catched in UtilsLibrary.java. --- .../javiersantos/appupdater/UtilsLibrary.java | 19 +++++++++++-------- .../appupdater/objects/Version.java | 17 ++++++++--------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/library/src/main/java/com/github/javiersantos/appupdater/UtilsLibrary.java b/library/src/main/java/com/github/javiersantos/appupdater/UtilsLibrary.java index da404740..cc5be631 100644 --- a/library/src/main/java/com/github/javiersantos/appupdater/UtilsLibrary.java +++ b/library/src/main/java/com/github/javiersantos/appupdater/UtilsLibrary.java @@ -64,19 +64,22 @@ static Integer getAppInstalledVersionCode(Context context) { } static Boolean isUpdateAvailable(Update installedVersion, Update latestVersion) { - Boolean res = false; - if (latestVersion.getLatestVersionCode() != null && latestVersion.getLatestVersionCode() > 0) { return latestVersion.getLatestVersionCode() > installedVersion.getLatestVersionCode(); } else { if (!TextUtils.equals(installedVersion.getLatestVersion(), "0.0.0.0") && !TextUtils.equals(latestVersion.getLatestVersion(), "0.0.0.0")) { - Version installed = new Version(installedVersion.getLatestVersion()); - Version latest = new Version(latestVersion.getLatestVersion()); - res = installed.compareTo(latest) < 0; - } + try + { + final Version installed = new Version(installedVersion.getLatestVersion()); + final Version latest = new Version(latestVersion.getLatestVersion()); + return installed.compareTo(latest) < 0; + } catch (Exception e) + { + e.printStackTrace(); + return false; + } + } else return false; } - - return res; } static Boolean isStringAVersion(String version) { diff --git a/library/src/main/java/com/github/javiersantos/appupdater/objects/Version.java b/library/src/main/java/com/github/javiersantos/appupdater/objects/Version.java index 15e0ccc0..cb10ed5d 100644 --- a/library/src/main/java/com/github/javiersantos/appupdater/objects/Version.java +++ b/library/src/main/java/com/github/javiersantos/appupdater/objects/Version.java @@ -1,7 +1,6 @@ package com.github.javiersantos.appupdater.objects; import android.support.annotation.NonNull; -import android.util.Log; public class Version implements Comparable { private String version; @@ -10,14 +9,14 @@ public final String get() { return this.version; } - public Version(String version) { - final String TAG = "AppUpdater"; - if (version == null) - Log.e(TAG, "Version can not be null"); - version = version.replaceAll("[^0-9?!\\.]", ""); - if (!version.matches("[0-9]+(\\.[0-9]+)*")) - Log.e(TAG, "Invalid version format"); - this.version = version; + public Version(@NonNull final String version) throws Exception + { + String trimmedVersion = version.replaceAll("[^0-9?!\\.]", ""); + // replace all empty version number-parts with zeros + trimmedVersion = trimmedVersion.replaceAll("\\.(\\.|$)", "\\.0$1"); + if (!trimmedVersion.matches("[0-9]+(\\.[0-9]+)*")) + throw new Exception("Invalid version format. Original: `" + version + "` trimmed: `" + trimmedVersion + "`"); + this.version = trimmedVersion; } @Override