diff --git a/common/src/main/java/bisq/common/config/Config.java b/common/src/main/java/bisq/common/config/Config.java index a4f5dcd2369..a9fc517a215 100644 --- a/common/src/main/java/bisq/common/config/Config.java +++ b/common/src/main/java/bisq/common/config/Config.java @@ -612,6 +612,12 @@ public Config(String defaultAppName, File defaultUserDataDir, String... args) { OptionSet cliOpts = parser.parse(args); options.addOptionSet(cliOpts); + // Option parsing is strict at the command line, but we relax it now for any + // subsequent config file processing. This is for compatibility with pre-1.2.6 + // versions that allowed unrecognized options in the bisq.properties config + // file and because it follows suit with Bitcoin Core's config file behavior. + parser.allowsUnrecognizedOptions(); + // Parse config file specified at the command line only if it was specified as // an absolute path. Otherwise, the config file will be processed later below. File configFile = null; diff --git a/common/src/test/java/bisq/common/config/ConfigTests.java b/common/src/test/java/bisq/common/config/ConfigTests.java index 017fe6c9bd1..de9593917be 100644 --- a/common/src/test/java/bisq/common/config/ConfigTests.java +++ b/common/src/test/java/bisq/common/config/ConfigTests.java @@ -113,6 +113,17 @@ public void whenUnrecognizedOptionIsSet_thenConfigExceptionIsThrown() { configWithOpts(opt("bogus")); } + @Test + public void whenUnrecognizedOptionIsSetInConfigFile_thenNoExceptionIsThrown() throws IOException { + File configFile = File.createTempFile("bisq", "properties"); + try (PrintWriter writer = new PrintWriter(configFile)) { + writer.println(new ConfigFileOption("bogusOption", "bogusValue")); + writer.println(new ConfigFileOption(APP_NAME, "BisqTest")); + } + Config config = configWithOpts(opt(CONFIG_FILE, configFile.getAbsolutePath())); + assertThat(config.appName, equalTo("BisqTest")); + } + @Test public void whenOptionFileArgumentDoesNotExist_thenConfigExceptionIsThrown() { String filepath = "/does/not/exist";