diff --git a/Helper/Data.php b/Helper/Data.php index 1ffac69..fde2a88 100644 --- a/Helper/Data.php +++ b/Helper/Data.php @@ -71,6 +71,8 @@ class Data extends AbstractHelper */ protected $_escaper; + protected $_serializer; + public function __construct( \Magento\Framework\App\Helper\Context $context, \Magento\Store\Model\StoreManagerInterface $storeManager, @@ -80,8 +82,8 @@ public function __construct( Encryptor $encryptor, \Magento\Framework\Escaper $_escaper, ProductFactory $productFactory, - CategoryFactory $categoryFactory - + CategoryFactory $categoryFactory, + \GhoSter\AutoInstagramPost\Model\Serialize\Serializer $serializer ) { $this->_storeManager = $storeManager; @@ -92,6 +94,7 @@ public function __construct( $this->productFactory = $productFactory; $this->categoryFactory = $categoryFactory; $this->_escaper = $_escaper; + $this->_serializer = $serializer; parent::__construct($context); } @@ -307,7 +310,7 @@ public function getCustomHashHashtags($store = null) ); if ($hashTagConfig && $this->isEnableHashtag() && $this->isEnableCustomHashtag()) { - $hashTags = unserialize($hashTagConfig); + $hashTags = $this->_serializer->unserialize($hashTagConfig); if (is_array($hashTags)) { foreach ($hashTags as $key => $hashTag) { diff --git a/Model/Serialize/Serializer.php b/Model/Serialize/Serializer.php new file mode 100644 index 0000000..051b9f3 --- /dev/null +++ b/Model/Serialize/Serializer.php @@ -0,0 +1,86 @@ +is_serialized($string)) { + $string = $this->serialize($string); + } + $result = json_decode($string, true); + if (json_last_error() !== JSON_ERROR_NONE) { + throw new \InvalidArgumentException('Unable to unserialize value.'); + + } + return $result; + } + + + function is_serialized($value, &$result = null) + { + // Bit of a give away this one + if (!is_string($value)) { + return false; + } + // Serialized false, return true. unserialize() returns false on an + // invalid string or it could return false if the string is serialized + // false, eliminate that possibility. + if ($value === 'b:0;') { + $result = false; + return true; + } + $length = strlen($value); + $end = ''; + switch ($value[0]) { + case 's': + if ($value[$length - 2] !== '"') { + return false; + } + case 'b': + case 'i': + case 'd': + // This looks odd but it is quicker than isset()ing + $end .= ';'; + case 'a': + case 'O': + $end .= '}'; + if ($value[1] !== ':') { + return false; + } + switch ($value[2]) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + break; + default: + return false; + } + case 'N': + $end .= ';'; + if ($value[$length - 1] !== $end[0]) { + return false; + } + break; + default: + return false; + } + if (($result = @unserialize($value)) === false) { + $result = null; + return false; + } + return true; + } +} \ No newline at end of file