docmodel/source/color/ComplexColorJSON.cxx    |   52 +++++++++++++-------------
 editeng/source/items/textitem.cxx             |    9 ++--
 svx/source/theme/ThemeColorPaletteManager.cxx |    2 -
 3 files changed, 33 insertions(+), 30 deletions(-)

New commits:
commit 81ae86d5f9e6d06300a2d6cf160de004c881ade5
Author:     Tomaž Vajngerl <tomaz.vajng...@collabora.co.uk>
AuthorDate: Fri Jun 9 16:06:37 2023 +0900
Commit:     Miklos Vajna <vmik...@collabora.com>
CommitDate: Wed Jun 14 08:33:12 2023 +0200

    fix wrong transform type, error handling when JSON parsing
    
    Change-Id: Id5435d59cd51352efc4a4a8e333ec1ff45847a6f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/152781
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Miklos Vajna <vmik...@collabora.com>

diff --git a/docmodel/source/color/ComplexColorJSON.cxx 
b/docmodel/source/color/ComplexColorJSON.cxx
index 409ecd27277b..f4d6fdf0af1b 100644
--- a/docmodel/source/color/ComplexColorJSON.cxx
+++ b/docmodel/source/color/ComplexColorJSON.cxx
@@ -18,40 +18,42 @@ namespace model::color
 bool convertFromJSON(OString const& rJsonString, model::ComplexColor& 
rComplexColor)
 {
     model::ComplexColor aComplexColor;
-    std::stringstream aStream((std::string(rJsonString)));
-    boost::property_tree::ptree aRootTree;
+
     try
     {
+        std::stringstream aStream((std::string(rJsonString)));
+        boost::property_tree::ptree aRootTree;
         boost::property_tree::read_json(aStream, aRootTree);
+
+        sal_Int32 nThemeType = aRootTree.get<sal_Int32>("ThemeIndex", -1);
+        
aComplexColor.setSchemeColor(model::convertToThemeColorType(nThemeType));
+        boost::property_tree::ptree aTransformTree = 
aRootTree.get_child("Transformations");
+        for (const auto& rEachTransformationNode :
+             boost::make_iterator_range(aTransformTree.equal_range("")))
+        {
+            auto const& rTransformationTree = rEachTransformationNode.second;
+            std::string sType = rTransformationTree.get<std::string>("Type", 
"");
+            sal_Int16 nValue = rTransformationTree.get<sal_Int16>("Value", 0);
+
+            auto eType = model::TransformationType::Undefined;
+            if (sType == "LumOff")
+                eType = model::TransformationType::LumOff;
+            else if (sType == "LumMod")
+                eType = model::TransformationType::LumMod;
+            else if (sType == "Tint")
+                eType = model::TransformationType::Tint;
+            else if (sType == "Shade")
+                eType = model::TransformationType::Shade;
+
+            if (eType != model::TransformationType::Undefined)
+                aComplexColor.addTransformation({ eType, nValue });
+        }
     }
     catch (const boost::property_tree::json_parser_error& /*exception*/)
     {
         return false;
     }
 
-    sal_Int32 nThemeType = aRootTree.get<sal_Int32>("ThemeIndex", -1);
-    aComplexColor.setSchemeColor(model::convertToThemeColorType(nThemeType));
-    boost::property_tree::ptree aTransformTree = 
aRootTree.get_child("Transformations");
-    for (const auto& rEachTransformationNode :
-         boost::make_iterator_range(aTransformTree.equal_range("")))
-    {
-        auto const& rTransformationTree = rEachTransformationNode.second;
-        std::string sType = rTransformationTree.get<std::string>("Type", "");
-        sal_Int16 nValue = rTransformationTree.get<sal_Int16>("Value", 0);
-
-        auto eType = model::TransformationType::Undefined;
-        if (sType == "LumOff")
-            eType = model::TransformationType::LumOff;
-        else if (sType == "LumMod")
-            eType = model::TransformationType::LumMod;
-        else if (sType == "Tint")
-            eType = model::TransformationType::Tint;
-        else if (sType == "Shade")
-            eType = model::TransformationType::Shade;
-
-        if (eType != model::TransformationType::Undefined)
-            aComplexColor.addTransformation({ eType, nValue });
-    }
     rComplexColor = aComplexColor;
     return true;
 }
diff --git a/editeng/source/items/textitem.cxx 
b/editeng/source/items/textitem.cxx
index 3e7cc6c6a736..f4194da865a6 100644
--- a/editeng/source/items/textitem.cxx
+++ b/editeng/source/items/textitem.cxx
@@ -1555,11 +1555,11 @@ bool SvxColorItem::PutValue( const uno::Any& rVal, 
sal_uInt8 nMemberId )
                 return false;
 
             if (sComplexColorJson.isEmpty())
-            {
                 return false;
-            }
+
             OString aJSON = OUStringToOString(sComplexColorJson, 
RTL_TEXTENCODING_ASCII_US);
-            model::color::convertFromJSON(aJSON, maComplexColor);
+            if (!model::color::convertFromJSON(aJSON, maComplexColor))
+                return false;
         }
         break;
         case MID_COMPLEX_COLOR:
@@ -1575,7 +1575,8 @@ bool SvxColorItem::PutValue( const uno::Any& rVal, 
sal_uInt8 nMemberId )
         case MID_COLOR_RGB:
         default:
         {
-            return rVal >>= mColor;
+            if (!(rVal >>= mColor))
+                return false;
         }
         break;
     }
diff --git a/svx/source/theme/ThemeColorPaletteManager.cxx 
b/svx/source/theme/ThemeColorPaletteManager.cxx
index c1fcc9fc0aa7..2a81106a8ffb 100644
--- a/svx/source/theme/ThemeColorPaletteManager.cxx
+++ b/svx/source/theme/ThemeColorPaletteManager.cxx
@@ -151,7 +151,7 @@ OString ThemeColorPaletteManager::generateJSON()
             aComplexColor.addTransformation(
                 { model::TransformationType::LumMod, rEffectData.mnLumMod });
             aComplexColor.addTransformation(
-                { model::TransformationType::LumMod, rEffectData.mnLumOff });
+                { model::TransformationType::LumOff, rEffectData.mnLumOff });
             boost::property_tree::ptree aDataTree;
             model::color::convertToJSONTree(aDataTree, aComplexColor);
             aColorTree.add_child("Data", aDataTree);

Reply via email to