From a4b1eac7b9d9fc913375469bf7a0edb5a7ad1dbc Mon Sep 17 00:00:00 2001 From: Roly Rudy Gutierrez Pinto Date: Thu, 3 Jan 2019 14:22:58 -0400 Subject: [PATCH] PMC-196 --- gulliver/system/class.g.php | 21 +++++++++++++++++++ workflow/engine/classes/PmDynaform.php | 2 ++ .../ProcessMaker/BusinessModel/DynaForm.php | 7 ++++--- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/gulliver/system/class.g.php b/gulliver/system/class.g.php index 1ed4a8568..b56294227 100644 --- a/gulliver/system/class.g.php +++ b/gulliver/system/class.g.php @@ -5893,4 +5893,25 @@ class G $class = isset(self::$adapters[$key]) ? self::$adapters[$key] : $name; return class_exists($class); } + + /** + * Fix string corrupted related to PMC-336. + * To do, this method should be removed. Related to PMC-336. + * + * @param string $string + * @return string + */ + public static function fixStringCorrupted($string) + { + $string = preg_replace_callback("/iconv\\(\\'UCS\\-4LE\\',\\'UTF\\-8\\',pack\\(\\'V\\', hexdec\\(\\'U[a-f0-9]{4}\\'\\)\\)\\)/", function($result) { + //This looks for the following pattern: + //iconv('UCS-4LE','UTF-8',pack('V', hexdec('U062f')))iconv('UCS-4LE','UTF-8',pack('V', hexdec('U0631'))) + //So making this replacement is safe. + $portion = $result[0]; + $portion = str_replace("iconv('UCS-4LE','UTF-8',pack('V', hexdec('U", "\u", $portion); + $portion = str_replace("')))", "", $portion); + return $portion; + }, $string); + return $string; + } } diff --git a/workflow/engine/classes/PmDynaform.php b/workflow/engine/classes/PmDynaform.php index eae7215a9..0a2d5801d 100644 --- a/workflow/engine/classes/PmDynaform.php +++ b/workflow/engine/classes/PmDynaform.php @@ -65,6 +65,8 @@ class PmDynaform } $this->record["DYN_CONTENT"] = G::json_encode($json); } + //to do, this line should be removed. Related to PMC-196. + $this->record['DYN_CONTENT'] = G::fixStringCorrupted($this->record['DYN_CONTENT']); } public function getDynaformTitle($idDynaform) diff --git a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php index d2c1bb2a9..2c5f74e19 100644 --- a/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php +++ b/workflow/engine/src/ProcessMaker/BusinessModel/DynaForm.php @@ -966,9 +966,10 @@ class DynaForm if ($record['DYN_VERSION'] === 0) { $record['DYN_VERSION'] = 1; } - + //to do, this line should be removed. Related to PMC-196. + $record['DYN_CONTENT'] = G::fixStringCorrupted($record['DYN_CONTENT']); $record['DYN_CONTENT'] = preg_replace_callback("/\\\\u([a-f0-9]{4})/", function ($m) { - return "iconv('UCS-4LE','UTF-8',pack('V', hexdec('U$m[1]')))"; + return iconv('UCS-4LE', 'UTF-8', pack('V', hexdec('U' . $m[1]))); }, $record['DYN_CONTENT']); return array( @@ -977,7 +978,7 @@ class DynaForm $this->getFieldNameByFormatFieldName('DYN_DESCRIPTION') => $record['DYN_DESCRIPTION'] . '', $this->getFieldNameByFormatFieldName('DYN_TYPE') => $record['DYN_TYPE'] . '', $this->getFieldNameByFormatFieldName('DYN_CONTENT') => $record['DYN_CONTENT'] . '', - $this->getFieldNameByFormatFieldName('DYN_VERSION') => (int)$record['DYN_VERSION'], + $this->getFieldNameByFormatFieldName('DYN_VERSION') => (int) $record['DYN_VERSION'], $this->getFieldNameByFormatFieldName('DYN_UPDATE_DATE') => $record['DYN_UPDATE_DATE'] ); } catch (\Exception $e) {