diff --git a/vendor/magento/module-catalog-widget/Block/Product/ProductsList.php b/vendor/magento/module-catalog-widget/Block/Product/ProductsList.php
index 7e6693ce68ef..375945acedcd 100644
--- a/vendor/magento/module-catalog-widget/Block/Product/ProductsList.php
+++ b/vendor/magento/module-catalog-widget/Block/Product/ProductsList.php
@@ -399,8 +399,8 @@ protected function getConditions()
             ? $this->getData('conditions_encoded')
             : $this->getData('conditions');

-        if ($conditions) {
-            $conditions = $this->conditionsHelper->decode($conditions);
+        if (is_string($conditions)) {
+            $conditions = $this->decodeConditions($conditions);
         }

         foreach ($conditions as $key => $condition) {
@@ -580,4 +580,16 @@ private function getWidgetPagerBlockName()

         return $pagerBlockName . '.' . $pageName;
     }
+
+    /**
+     * Decode encoded special characters and unserialize conditions into array
+     *
+     * @param string $encodedConditions
+     * @return array
+     * @see \Magento\Widget\Model\Widget::getDirectiveParam
+     */
+    private function decodeConditions(string $encodedConditions): array
+    {
+        return $this->conditionsHelper->decode(htmlspecialchars_decode($encodedConditions));
+    }
 }
