From d56f2a1bc1eaf8b2ae1fa91c2d8d734b92ceb484 Mon Sep 17 00:00:00 2001 From: 0xboobface <0xboobface@gmail.com> Date: Fri, 19 Jul 2019 19:15:38 +0200 Subject: [PATCH] Handle BOM properly in config file --- common/src/main/java/ctbrec/Config.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/common/src/main/java/ctbrec/Config.java b/common/src/main/java/ctbrec/Config.java index 5b537c3a..7f015c83 100644 --- a/common/src/main/java/ctbrec/Config.java +++ b/common/src/main/java/ctbrec/Config.java @@ -3,7 +3,6 @@ package ctbrec; import static java.nio.file.StandardOpenOption.*; import java.io.File; -import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.file.Files; @@ -21,8 +20,6 @@ import com.squareup.moshi.Moshi; import ctbrec.io.ModelJsonAdapter; import ctbrec.sites.Site; -import okio.Buffer; -import okio.BufferedSource; public class Config { @@ -54,13 +51,21 @@ public class Config { Moshi moshi = new Moshi.Builder() .add(Model.class, new ModelJsonAdapter(sites)) .build(); - JsonAdapter adapter = moshi.adapter(Settings.class); + JsonAdapter adapter = moshi.adapter(Settings.class).lenient(); File configFile = new File(configDir, filename); LOG.debug("Loading config from {}", configFile.getAbsolutePath()); if(configFile.exists()) { - try(FileInputStream fin = new FileInputStream(configFile); Buffer buffer = new Buffer()) { - BufferedSource source = buffer.readFrom(fin); - settings = adapter.fromJson(source); + try { + byte[] fileContent = Files.readAllBytes(configFile.toPath()); + if (fileContent[0] == -17 && fileContent[1] == -69 && fileContent[2] == -65) { + // found BOM (byte order mark) + LOG.debug("Removing BOM from config file"); + fileContent[0] = ' '; + fileContent[1] = ' '; + fileContent[2] = ' '; + } + String json = new String(fileContent, "UTF-8").trim(); + settings = adapter.fromJson(json); settings.httpTimeout = Math.max(settings.httpTimeout, 10_000); if (settings.recordingsDir.endsWith("/")) { settings.recordingsDir = settings.recordingsDir.substring(0, settings.recordingsDir.length() - 1);