This is an automated email from the ASF dual-hosted git repository. aboda pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git
commit 1e4c820481cec72d6543fe26f40a5085184d91de Author: Marton Szasz <[email protected]> AuthorDate: Thu Feb 4 17:04:20 2021 +0100 MINIFICPP-1477 - fix StringUtils::trim Signed-off-by: Arpad Boda <[email protected]> This closes #990 --- extensions/expression-language/Expression.cpp | 5 +---- libminifi/include/utils/StringUtils.h | 4 ++-- libminifi/include/utils/ValueParser.h | 2 +- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/extensions/expression-language/Expression.cpp b/extensions/expression-language/Expression.cpp index 545983f..5ce6f4d 100644 --- a/extensions/expression-language/Expression.cpp +++ b/extensions/expression-language/Expression.cpp @@ -840,10 +840,7 @@ Value expr_find(const std::vector<Value> &args) { #endif // EXPRESSION_LANGUAGE_USE_REGEX Value expr_trim(const std::vector<Value> &args) { - std::string result = args[0].asString(); - auto ws_front = std::find_if_not(result.begin(), result.end(), [](int c) {return std::isspace(c);}); - auto ws_back = std::find_if_not(result.rbegin(), result.rend(), [](int c) {return std::isspace(c);}).base(); - return (ws_back <= ws_front ? Value(std::string()) : Value(std::string(ws_front, ws_back))); + return Value{utils::StringUtils::trim(args[0].asString())}; } Value expr_append(const std::vector<Value> &args) { diff --git a/libminifi/include/utils/StringUtils.h b/libminifi/include/utils/StringUtils.h index 7dcfc49..54bab6c 100644 --- a/libminifi/include/utils/StringUtils.h +++ b/libminifi/include/utils/StringUtils.h @@ -99,7 +99,7 @@ class StringUtils { * @returns modified string */ static inline std::string trimLeft(std::string s) { - s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](char c) -> bool { return !isspace(c); })); + s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](unsigned char c) -> bool { return !isspace(c); })); return s; } @@ -110,7 +110,7 @@ class StringUtils { */ static inline std::string trimRight(std::string s) { - s.erase(std::find_if(s.rbegin(), s.rend(), [](char c) -> bool { return !isspace(c); }).base(), s.end()); + s.erase(std::find_if(s.rbegin(), s.rend(), [](unsigned char c) -> bool { return !isspace(c); }).base(), s.end()); return s; } diff --git a/libminifi/include/utils/ValueParser.h b/libminifi/include/utils/ValueParser.h index f7b11ba..ce4f0cc 100644 --- a/libminifi/include/utils/ValueParser.h +++ b/libminifi/include/utils/ValueParser.h @@ -148,7 +148,7 @@ class ValueParser { } void skipWhitespace() { - while (offset < str.length() && std::isspace(str[offset])) { + while (offset < str.length() && std::isspace(static_cast<unsigned char>(str[offset]))) { ++offset; } }
