From a2c86616360fe51e8d766796bed80e73444823d5 Mon Sep 17 00:00:00 2001
From: Andrey Kleshchev <andreykproductengine@lindenlab.com>
Date: Tue, 29 Oct 2024 23:02:46 +0200
Subject: viewer#2972 Fix viewer stripping quotes off folder names

---
 indra/llxml/llxmlnode.cpp | 23 ++++++++++++++++++++++-
 indra/llxml/llxmlnode.h   |  1 +
 2 files changed, 23 insertions(+), 1 deletion(-)

(limited to 'indra/llxml')

diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp
index e695035461..92bcb1a2ae 100644
--- a/indra/llxml/llxmlnode.cpp
+++ b/indra/llxml/llxmlnode.cpp
@@ -3256,6 +3256,27 @@ std::string LLXMLNode::getTextContents() const
     return msg;
 }
 
+std::string LLXMLNode::getXMLRPCTextContents() const
+{
+    std::string msg;
+    std::string::size_type start = mValue.find_first_not_of(" \t\n");
+    if (start != mValue.npos)
+    {
+        std::string::size_type end = mValue.find_last_not_of(" \t\n");
+        if (end != mValue.npos)
+        {
+            msg = mValue.substr(start, end + 1 - start);
+        }
+        else
+        {
+            msg = mValue.substr(start);
+        }
+    }
+    // Convert any internal CR to LF
+    msg = utf8str_removeCRLF(msg);
+    return msg;
+}
+
 void LLXMLNode::setLineNumber(S32 line_number)
 {
     mLineNumber = line_number;
@@ -3365,7 +3386,7 @@ bool LLXMLNode::fromXMLRPCValue(LLSD& target)
 
     if (childp->hasName("string"))
     {
-        target.assign(LLStringFn::xml_decode(childp->getTextContents()));
+        target.assign(LLStringFn::xml_decode(childp->getXMLRPCTextContents()));
         return true;
     }
 
diff --git a/indra/llxml/llxmlnode.h b/indra/llxml/llxmlnode.h
index 3769ec8293..09c7c4fdad 100644
--- a/indra/llxml/llxmlnode.h
+++ b/indra/llxml/llxmlnode.h
@@ -295,6 +295,7 @@ protected:
     bool removeChild(LLXMLNode* child);
     bool isFullyDefault();
 
+    std::string getXMLRPCTextContents() const;
     bool parseXmlRpcArrayValue(LLSD& target);
     bool parseXmlRpcStructValue(LLSD& target);
 
-- 
cgit v1.2.3