From 55c98ef880a900085cc6c0cb9cd59833af3720c9 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Fri, 1 Nov 2024 22:07:48 +0100 Subject: [PATCH] Fix: skip BOM in JSON files (pin_mapping and config) based on #2387 --- include/Utils.h | 2 ++ src/Configuration.cpp | 1 + src/PinMapping.cpp | 3 +++ src/Utils.cpp | 12 ++++++++++++ 4 files changed, 18 insertions(+) diff --git a/include/Utils.h b/include/Utils.h index 759402b1..39994f32 100644 --- a/include/Utils.h +++ b/include/Utils.h @@ -2,6 +2,7 @@ #pragma once #include +#include #include class Utils { @@ -12,4 +13,5 @@ public: static bool checkJsonAlloc(const JsonDocument& doc, const char* function, const uint16_t line); static void removeAllFiles(); static String generateMd5FromFile(String file); + static void skipBom(File& f); }; diff --git a/src/Configuration.cpp b/src/Configuration.cpp index 04bcfa65..10fd92fd 100644 --- a/src/Configuration.cpp +++ b/src/Configuration.cpp @@ -159,6 +159,7 @@ bool ConfigurationClass::write() bool ConfigurationClass::read() { File f = LittleFS.open(CONFIG_FILENAME, "r", false); + Utils::skipBom(f); JsonDocument doc; diff --git a/src/PinMapping.cpp b/src/PinMapping.cpp index bd5ea995..1a721e04 100644 --- a/src/PinMapping.cpp +++ b/src/PinMapping.cpp @@ -4,6 +4,7 @@ */ #include "PinMapping.h" #include "MessageOutput.h" +#include "Utils.h" #include #include #include @@ -199,6 +200,8 @@ bool PinMappingClass::init(const String& deviceMapping) return false; } + Utils::skipBom(f); + JsonDocument doc; // Deserialize the JSON document DeserializationError error = deserializeJson(doc, f); diff --git a/src/Utils.cpp b/src/Utils.cpp index e5746079..c567ec11 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -111,3 +111,15 @@ String Utils::generateMd5FromFile(String file) return md5.toString(); } + +void Utils::skipBom(File& f) +{ + // skip Byte Order Mask (BOM). valid JSON docs always start with '{' or '['. + while (f.available() > 0) { + int c = f.peek(); + if (c == '{' || c == '[') { + break; + } + f.read(); + } +}