From bb811b8a99fcb4d07bf6fcc0d4b583b4c0ed56d7 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Mon, 7 Mar 2022 14:50:58 +0900 Subject: [PATCH 1/3] [compat] Ignore spaces in Properties. --- src/lib/coil/common/coil/Properties.cpp | 36 ++++++++++++++++++++++--- src/lib/coil/common/coil/stringutil.cpp | 4 +++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/lib/coil/common/coil/Properties.cpp b/src/lib/coil/common/coil/Properties.cpp index 561cbe966..58c6888fd 100644 --- a/src/lib/coil/common/coil/Properties.cpp +++ b/src/lib/coil/common/coil/Properties.cpp @@ -170,6 +170,10 @@ namespace coil */ const std::string& Properties::getProperty(const std::string& key) const { + if (coil::eraseBothEndsBlank(key).empty()) + { + return m_empty; + } std::vector keys; split(key, '.', keys); Properties* node(nullptr); @@ -190,6 +194,10 @@ namespace coil const std::string& Properties::getProperty(const std::string& key, const std::string& def) const { + if (coil::eraseBothEndsBlank(key).empty()) + { + return m_empty; + } const std::string& invalue((*this)[key]); return invalue.empty() ? def : invalue; @@ -232,6 +240,12 @@ namespace coil const std::string& Properties::getDefault(const std::string& key) const { std::vector keys; + + if (coil::eraseBothEndsBlank(key).empty()) + { + return m_empty; + } + split(key, '.', keys); Properties* node(nullptr); if ((node = _getNode(keys, 0, this)) != nullptr) @@ -252,6 +266,12 @@ namespace coil const std::string& invalue) { std::vector keys; + + if (coil::eraseBothEndsBlank(key).empty()) + { + return m_empty; + } + split(key, '.', keys); Properties* curr(this); @@ -282,6 +302,10 @@ namespace coil std::string Properties::setDefault(const std::string& key, const std::string& invalue) { + if (coil::eraseBothEndsBlank(key).empty()) + { + return m_empty; + } std::vector keys; split(key, '.', keys); @@ -345,7 +369,7 @@ namespace coil while (!inStream.eof()) { - std::string tmp{coil::eraseHeadBlank(coil::getlinePortable(inStream))}; + std::string tmp{coil::eraseBothEndsBlank(coil::getlinePortable(inStream))}; // Skip comments or empty lines if (tmp.empty()) @@ -448,7 +472,7 @@ namespace coil */ Properties* Properties::findNode(const std::string& key) const { - if (key.empty()) + if (coil::eraseBothEndsBlank(key).empty()) { return nullptr; } @@ -466,7 +490,7 @@ namespace coil */ Properties& Properties::getNode(const std::string& key) { - if (key.empty()) + if (coil::eraseBothEndsBlank(key).empty()) { return *this; } @@ -488,7 +512,7 @@ namespace coil */ bool Properties::createNode(const std::string& key) { - if (key.empty()) + if (coil::eraseBothEndsBlank(key).empty()) { return false; } @@ -534,6 +558,10 @@ namespace coil */ Properties* Properties::hasKey(const char* key) const { + if (coil::eraseBothEndsBlank(key).empty()) + { + return nullptr; + } for (auto prop : leaf) { if (prop->name == key) diff --git a/src/lib/coil/common/coil/stringutil.cpp b/src/lib/coil/common/coil/stringutil.cpp index 45493bf08..ea9e806a9 100644 --- a/src/lib/coil/common/coil/stringutil.cpp +++ b/src/lib/coil/common/coil/stringutil.cpp @@ -613,6 +613,10 @@ namespace coil std::map retmap; for (auto & param : params) { + if (coil::eraseBothEndsBlank(param).empty()) + { + continue; + } std::string::size_type pos = param.find('='); if (pos != std::string::npos) { From 0a2517aabf5f23e07c91d03865f81f1a064bb812 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Mon, 7 Mar 2022 15:16:56 +0900 Subject: [PATCH 2/3] [compat] fixed bugs. --- src/lib/coil/common/coil/stringutil.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/lib/coil/common/coil/stringutil.cpp b/src/lib/coil/common/coil/stringutil.cpp index ea9e806a9..fc950139d 100644 --- a/src/lib/coil/common/coil/stringutil.cpp +++ b/src/lib/coil/common/coil/stringutil.cpp @@ -620,7 +620,11 @@ namespace coil std::string::size_type pos = param.find('='); if (pos != std::string::npos) { - retmap[param.substr(0, pos)] = param.substr(pos + 1); + const std::string key{param.substr(0, pos)}; + if (!coil::eraseBothEndsBlank(key).empty()) + { + retmap[key] = param.substr(pos + 1); + } } else { From 3f275c96b53f3975f94acd94b5daed3d737a54e1 Mon Sep 17 00:00:00 2001 From: Nobuhiko Miyamoto Date: Thu, 26 Mar 2026 13:09:03 +0900 Subject: [PATCH 3/3] Update Properties.cpp --- src/lib/coil/common/coil/Properties.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/lib/coil/common/coil/Properties.cpp b/src/lib/coil/common/coil/Properties.cpp index 919b575a2..21438b82a 100644 --- a/src/lib/coil/common/coil/Properties.cpp +++ b/src/lib/coil/common/coil/Properties.cpp @@ -367,7 +367,7 @@ namespace coil while (!inStream.eof()) { - std::string tmp{coil::eraseBothEndsBlank(coil::getlinePortable(inStream))}; + std::string tmp{coil::eraseHeadBlank(coil::getlinePortable(inStream))}; // Skip comments or empty lines if (tmp.empty()) @@ -395,6 +395,15 @@ namespace coil continue; } + size_t end = tmp.find_last_not_of(" \t"); + if (end != std::string::npos && + tmp[end] == '\\' && + !coil::isEscaped(tmp, end)) + { + std::cerr << "Warning: Trailing whitespace after '\\' prevents line continuation: " << tmp << std::endl; + } + + std::string key, invalue; splitKeyValue(pline, key, invalue); setProperty(eraseBothEndsBlank(coil::unescape(std::move(key))),