From 7ce91066f543cf09c262783f46e932bbc320d5fa Mon Sep 17 00:00:00 2001 From: akwizgran Date: Tue, 23 Oct 2018 15:16:29 +0100 Subject: [PATCH] Check that createLogHandler() isn't called more than once. This would result in multiple log files encrypted with the same key. --- .../briarproject/briar/api/logging/PersistentLogManager.java | 2 ++ .../briarproject/briar/logging/PersistentLogManagerImpl.java | 3 +++ 2 files changed, 5 insertions(+) diff --git a/briar-api/src/main/java/org/briarproject/briar/api/logging/PersistentLogManager.java b/briar-api/src/main/java/org/briarproject/briar/api/logging/PersistentLogManager.java index a0e44375f..1cefa451e 100644 --- a/briar-api/src/main/java/org/briarproject/briar/api/logging/PersistentLogManager.java +++ b/briar-api/src/main/java/org/briarproject/briar/api/logging/PersistentLogManager.java @@ -24,6 +24,8 @@ public interface PersistentLogManager { /** * Creates and returns a persistent log handler that stores its logs in * the given directory. + *

+ * This method should only be called once. */ Handler createLogHandler(File dir) throws IOException; diff --git a/briar-core/src/main/java/org/briarproject/briar/logging/PersistentLogManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/logging/PersistentLogManagerImpl.java index d2b41780e..1d31255aa 100644 --- a/briar-core/src/main/java/org/briarproject/briar/logging/PersistentLogManagerImpl.java +++ b/briar-core/src/main/java/org/briarproject/briar/logging/PersistentLogManagerImpl.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Scanner; import java.util.concurrent.Executor; import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Logger; @@ -63,6 +64,7 @@ class PersistentLogManagerImpl implements PersistentLogManager, private final StreamWriterFactory streamWriterFactory; private final Formatter formatter; private final SecretKey logKey; + private final AtomicBoolean handlerCreated = new AtomicBoolean(false); @Nullable private volatile SecretKey oldLogKey = null; @@ -103,6 +105,7 @@ class PersistentLogManagerImpl implements PersistentLogManager, @Override public Handler createLogHandler(File dir) throws IOException { + if (handlerCreated.getAndSet(true)) throw new IllegalStateException(); File logFile = new File(dir, LOG_FILE); File oldLogFile = new File(dir, OLD_LOG_FILE); if (oldLogFile.exists() && !oldLogFile.delete())