You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ab...@apache.org on 2021/02/08 16:30:15 UTC

[nifi-minifi-cpp] 01/02: MINIFICPP-1477 - fix StringUtils::trim

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 <sz...@gmail.com>
AuthorDate: Thu Feb 4 17:04:20 2021 +0100

    MINIFICPP-1477 - fix StringUtils::trim
    
    Signed-off-by: Arpad Boda <ab...@apache.org>
    
    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;
     }
   }