From bc17486fdbeece70de2934d06b36b8a5219142fd Mon Sep 17 00:00:00 2001 From: Rsl1122 Date: Sun, 28 Jan 2018 15:35:11 +0200 Subject: [PATCH] Fix bugs & vulns reported by Sonar --- .../database/databases/sql/SQLiteDB.java | 19 +++++++++++-------- .../importing/importers/Importer.java | 1 + .../processors/player/RegisterProcessor.java | 2 ++ .../utilities/analysis/AnalysisUtils.java | 8 ++++---- .../utilities/file/export/HtmlExport.java | 6 +++--- .../system/database/databases/SQLiteTest.java | 10 ++++++++++ 6 files changed, 31 insertions(+), 15 deletions(-) diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLiteDB.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLiteDB.java index e9a1f1fd1..3e15ef4b3 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLiteDB.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/SQLiteDB.java @@ -57,19 +57,21 @@ public class SQLiteDB extends SQLDB { } String dbFilePath = new File(PlanPlugin.getInstance().getDataFolder(), dbName + ".db").getAbsolutePath(); - Connection connection; - try { - connection = DriverManager.getConnection("jdbc:sqlite:" + dbFilePath + "?journal_mode=WAL"); - } catch (SQLException ignored) { - connection = DriverManager.getConnection("jdbc:sqlite:" + dbFilePath); - Log.info("SQLite WAL mode not supported on this server version, using default. This may or may not affect performance."); - } + Connection connection = getConnectionFor(dbFilePath); connection.setAutoCommit(false); - return connection; } + private Connection getConnectionFor(String dbFilePath) throws SQLException { + try { + return DriverManager.getConnection("jdbc:sqlite:" + dbFilePath + "?journal_mode=WAL"); + } catch (SQLException ignored) { + Log.info("SQLite WAL mode not supported on this server version, using default. This may or may not affect performance."); + return DriverManager.getConnection("jdbc:sqlite:" + dbFilePath); + } + } + private void startConnectionPingTask() { stopConnectionPingTask(); try { @@ -84,6 +86,7 @@ public class SQLiteDB extends SQLDB { statement.execute("/* ping */ SELECT 1"); } } catch (SQLException e) { + Log.debug("Something went wrong during Ping task."); try { connection = getNewConnection(dbName); } catch (SQLException e1) { diff --git a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/importers/Importer.java b/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/importers/Importer.java index 40d3cc3e4..72e0e5b2b 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/importers/Importer.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/processing/importing/importers/Importer.java @@ -73,6 +73,7 @@ public abstract class Importer { service.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } catch (InterruptedException e) { Log.toLog(this.getClass().getName(), e); + Thread.currentThread().interrupt(); } Benchmark.stop(benchmarkName); diff --git a/Plan/src/main/java/com/djrapitops/plan/system/processing/processors/player/RegisterProcessor.java b/Plan/src/main/java/com/djrapitops/plan/system/processing/processors/player/RegisterProcessor.java index f3613f532..e8c689e4d 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/processing/processors/player/RegisterProcessor.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/processing/processors/player/RegisterProcessor.java @@ -11,6 +11,7 @@ import com.djrapitops.plan.system.cache.SessionCache; import com.djrapitops.plan.system.database.databases.Database; import com.djrapitops.plan.system.processing.Processor; import com.djrapitops.plan.system.processing.processors.ObjectProcessor; +import com.djrapitops.plan.utilities.NullCheck; import com.djrapitops.plugin.api.utility.log.Log; import java.util.UUID; @@ -41,6 +42,7 @@ public class RegisterProcessor extends PlayerProcessor { public void process() { UUID uuid = getUUID(); Database db = Database.getActive(); + NullCheck.check(uuid, new IllegalStateException("UUID was null")); try { if (!db.check().isPlayerRegistered(uuid)) { db.save().registerNewUser(uuid, registered, name); diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java index c406dd5b1..dbb9aa7a1 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/analysis/AnalysisUtils.java @@ -123,7 +123,7 @@ public class AnalysisUtils { } public static double getAveragePerDay(long after, long before, long total) { - return total / getNumberOfDaysBetween(after, before); + return (double) total / getNumberOfDaysBetween(after, before); } public static long getNumberOfDaysBetween(long start, long end) { @@ -134,7 +134,7 @@ public class AnalysisUtils { test += day; value++; } - return value; + return value == 0 ? 1 : value; } public static void addMissingWorlds(WorldTimes worldTimes) { @@ -196,7 +196,7 @@ public class AnalysisUtils { stickM++; } } - probability *= (stickM / similarM.size()); + probability *= ((double) stickM / similarM.size()); } if (!similarW.isEmpty()) { @@ -207,7 +207,7 @@ public class AnalysisUtils { } } - probability *= (stickW / similarW.size()); + probability *= ((double) stickW / similarW.size()); } return probability; diff --git a/Plan/src/main/java/com/djrapitops/plan/utilities/file/export/HtmlExport.java b/Plan/src/main/java/com/djrapitops/plan/utilities/file/export/HtmlExport.java index c249d37a4..c8e51412e 100644 --- a/Plan/src/main/java/com/djrapitops/plan/utilities/file/export/HtmlExport.java +++ b/Plan/src/main/java/com/djrapitops/plan/utilities/file/export/HtmlExport.java @@ -167,7 +167,6 @@ public class HtmlExport extends SpecificExport { copyFromJar(resources, true); } - private void copyFromJar(String[] resources, boolean overwrite) { for (String resource : resources) { try { @@ -185,8 +184,9 @@ public class HtmlExport extends SpecificExport { File to = new File(outputFolder, outputFile); to.getParentFile().mkdirs(); if (to.exists()) { - to.delete(); - to.createNewFile(); + if (!to.delete() || !to.createNewFile()) { + return; + } } export(to, lines); } diff --git a/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java b/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java index 7daed5f3f..908e6e828 100644 --- a/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java +++ b/Plan/src/test/java/com/djrapitops/plan/system/database/databases/SQLiteTest.java @@ -855,6 +855,16 @@ public class SQLiteTest { assertTrue(db.getUserInfoTable().isRegistered(playerUUID)); } + @Test + public void testRegister() throws DBException { + assertFalse(db.check().isPlayerRegistered(playerUUID)); + assertFalse(db.check().isPlayerRegisteredOnThisServer(playerUUID)); + db.save().registerNewUser(playerUUID, 1000L, "name"); + db.save().registerNewUserOnThisServer(playerUUID, 500L); + assertTrue(db.check().isPlayerRegistered(playerUUID)); + assertTrue(db.check().isPlayerRegisteredOnThisServer(playerUUID)); + } + @Test public void testWorldTableGetWorldNamesNoException() throws SQLException { Set worldNames = db.getWorldTable().getWorldNames();