From 23774983ab4002268103c96d9791c4377b899a5a Mon Sep 17 00:00:00 2001 From: Tad Date: Sun, 17 Dec 2017 07:37:34 -0500 Subject: [PATCH] Fix issue with no databases on service start --- app/build.gradle | 4 +- .../us/spotco/malwarescanner/Database.java | 45 +++++++++++-------- .../spotco/malwarescanner/MainActivity.java | 2 +- .../spotco/malwarescanner/MalwareScanner.java | 2 +- 4 files changed, 30 insertions(+), 23 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 98283da..d7d1edc 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "us.spotco.malwarescanner" minSdkVersion 21 targetSdkVersion 26 - versionCode 17 - versionName "1.8" + versionCode 18 + versionName "1.9" } buildTypes { debug { diff --git a/app/src/main/java/us/spotco/malwarescanner/Database.java b/app/src/main/java/us/spotco/malwarescanner/Database.java index 785327b..84cf498 100644 --- a/app/src/main/java/us/spotco/malwarescanner/Database.java +++ b/app/src/main/java/us/spotco/malwarescanner/Database.java @@ -26,9 +26,33 @@ class Database { public Database(Context context, TextView log) { Database.log = log; + initDatabase(context); + } + + public static boolean areDatabasesAvailable() { + return databasePath != null && databasePath.listFiles().length > 0; + } + + public static boolean isDatabaseLoaded() { + return signaturesMD5.size() > 0 && signaturesSHA1.size() > 0 && signaturesSHA256.size() > 0; + } + + public static int getSignatureCount() { + return signaturesMD5.size() + signaturesSHA1.size() + signaturesSHA256.size(); + } + + public static void updateDatabase(ArrayList signatureDatabases) { + for (SignatureDatabase signatureDatabase : signatureDatabases) { + new Downloader().execute(signatureDatabase.getUrl(), databasePath + "/" + signatureDatabase.getName()); + } + } + + public static void initDatabase(Context context) { databasePath = new File(context.getFilesDir() + "/signatures/"); databasePath.mkdir(); + signatureDatabases.clear(); + signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/bofhland_malware_attach.hdb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/crdfam.clamav.hdb")); signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/doppelstern.hdb")); @@ -48,26 +72,9 @@ class Database { signatureDatabases.add(new SignatureDatabase("https://spotco.us/Theia/winnow_malware.hdb")); } - public static boolean areDatabasesAvailable() { - return databasePath.listFiles().length > 0; - } - - public static boolean isDatabaseLoaded() { - return signaturesMD5.size() > 0 && signaturesSHA1.size() > 0 && signaturesSHA256.size() > 0; - } - - public static int getSignatureCount() { - return signaturesMD5.size() + signaturesSHA1.size() + signaturesSHA256.size(); - } - - public static void updateDatabase(ArrayList signatureDatabases) { - for (SignatureDatabase signatureDatabase : signatureDatabases) { - new Downloader().execute(signatureDatabase.getUrl(), databasePath + "/" + signatureDatabase.getName()); - } - } - - public static void loadDatabase(boolean ignoreifLoaded, ArrayList signatureDatabases) { + public static void loadDatabase(Context context, boolean ignoreifLoaded, ArrayList signatureDatabases) { if (!isDatabaseLoaded() || !ignoreifLoaded && isDatabaseLoaded()) { + initDatabase(context); signaturesMD5.clear(); signaturesSHA1.clear(); signaturesSHA256.clear(); diff --git a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java index 9962201..3a0c9fe 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MainActivity.java +++ b/app/src/main/java/us/spotco/malwarescanner/MainActivity.java @@ -112,7 +112,7 @@ public class MainActivity extends AppCompatActivity { case R.id.mnuUpdateDatabase: Database.updateDatabase(Database.signatureDatabases); if (Database.isDatabaseLoaded()) { - Database.loadDatabase(false, Database.signatureDatabases); + Database.loadDatabase(getApplicationContext(), false, Database.signatureDatabases); } break; case R.id.toggleRealtime: diff --git a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java index 8abab5a..9a26982 100644 --- a/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java +++ b/app/src/main/java/us/spotco/malwarescanner/MalwareScanner.java @@ -74,7 +74,7 @@ class MalwareScanner extends AsyncTask, Object, String> { publishProgress(filesToScan[0].size() + " files pending scan\n", true); - Database.loadDatabase(true, Database.signatureDatabases); + Database.loadDatabase(context, true, Database.signatureDatabases); publishProgress("Loaded database with " + Database.getSignatureCount() + " signatures\n", true); //Get file hashes