PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.2
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.2
6.35 6.34 6.33.1 6.33 6.32.1 6.32 6.31 6.25 6.25.1 6.26 6.26.1 6.27 6.28 6.29 6.3 6.3.1 6.3.2 6.30 6.4 6.4.1 6.4.2 6.5 6.5.1 6.5.2 6.5.3 All 141 releases
← All changes | classes/helpers/FrmSerializedStringParserHelper.php +40 -117 6.256.2 View file →
@@ -40,147 +40,70 @@
40 40 * @param string $string
41 41 * @return mixed
42 42 */
43 43 public function parse( $string ) {
44 - $unserialized_data = $this->do_parse( new FrmStringReaderHelper( $string ) );
45 -
46 - if ( is_array( $unserialized_data ) && $this->serialized_string_is_invalid( $string ) ) {
47 - return array_filter( $unserialized_data, array( $this, 'serialized_value_is_valid' ) );
48 - }
49 -
50 - return $unserialized_data;
44 + return $this->do_parse( new FrmStringReaderHelper( $string ) );
51 45 }
52 46
53 47 /**
54 - * Check if an unserialized value is valid.
55 - *
56 - * @since 6.20
57 - *
58 - * @param mixed $value
59 - * @return bool
60 - */
61 - private function serialized_value_is_valid( $value ) {
62 - return ! is_string( $value ) || strpos( $value, ';s:' ) === false;
63 - }
64 -
65 - /**
66 - * @since 6.20
67 - *
68 - * @param string $string
69 - * @return bool
70 - */
71 - private function serialized_string_is_invalid( $string ) {
72 - $invalid_substrings = array(
73 - ';s:10:\"a"',
74 - ';s:";',
75 - );
76 -
77 - foreach ( $invalid_substrings as $invalid ) {
78 - if ( strpos( $string, $invalid ) !== false ) {
79 - return true;
80 - }
81 - }
82 -
83 - return false;
84 - }
85 -
86 - /**
87 48 * This is the recursive parser.
88 49 *
89 50 * @param FrmStringReaderHelper $string
90 - * @return array|bool|float|int|string|null
51 + * @return mixed
91 52 */
92 53 private function do_parse( $string ) {
54 + $val = null;
55 +
93 56 // May be : or ; as a terminator, depending on what the data type is.
94 - $type = $string->read( 1 );
95 - $string->skip_next_character();
57 + $type = substr( $string->read( 2 ), 0, 1 );
96 58
97 59 switch ( $type ) {
98 60 case 'a':
99 - return $this->parse_array( $string );
61 + // Associative array: a:length:{[index][value]...}
62 + $count = (int) $string->read_until( ':' );
100 63
64 + // Eat the opening "{" of the array.
65 + $string->read( 1 );
66 +
67 + $val = array();
68 + for ( $i = 0; $i < $count; $i++ ) {
69 + $array_key = $this->do_parse( $string );
70 + $array_value = $this->do_parse( $string );
71 + $val[ $array_key ] = $array_value;
72 + }
73 +
74 + // Eat "}" terminating the array.
75 + $string->read( 1 );
76 + break;
77 +
101 78 case 's':
102 - return $this->parse_string( $string );
79 + $len = (int) $string->read_until( ':' );
80 + $val = $string->read( $len + 2 );
103 81
82 + // Eat the separator.
83 + $string->read( 1 );
84 + break;
85 +
104 86 case 'i':
105 - return $this->parse_int( $string );
87 + $val = (int) $string->read_until( ';' );
88 + break;
106 89
107 90 case 'd':
108 - return $this->parse_float( $string );
91 + $val = (float) $string->read_until( ';' );
92 + break;
109 93
110 94 case 'b':
111 - return $this->parse_bool( $string );
112 - }
95 + // Boolean is 0 or 1.
96 + $bool = $string->read( 2 );
97 + $val = substr( $bool, 0, 1 ) == '1';
98 + break;
113 99
114 - // Includes case 'N' and case 'O'.
115 - // Treat a serialized object or anything unexpected as Null.
116 - return null;
117 - }
118 -
119 - /**
120 - * @param FrmStringReaderHelper $string
121 - * @return array
122 - */
123 - private function parse_array( $string ) {
124 - // Associative array: a:length:{[index][value]...}
125 - $count = (int) $string->read_until( ':' );
126 -
127 - // Eat the opening "{" of the array.
128 - $string->skip_next_character();
129 -
130 - $val = array();
131 - for ( $i = 0; $i < $count; $i++ ) {
132 - $array_key = $this->do_parse( $string );
133 - $array_value = $this->do_parse( $string );
134 -
135 - if ( ! is_array( $array_key ) ) {
136 - $val[ $array_key ] = $array_value;
137 - }
100 + default:
101 + // Includes case 'N' and case 'O'.
102 + // Treat a serialized object or anything unexpected as Null.
103 + $val = null;
104 + break;
138 105 }
139 106
140 - // Eat "}" terminating the array.
141 - $string->skip_next_character();
142 -
143 - return $val;
144 - }
145 -
146 - /**
147 - * @param FrmStringReaderHelper $string
148 - * @return string
149 - */
150 - private function parse_string( $string ) {
151 - $len = (int) $string->read_until( ':' );
152 - $val = $string->read( $len + 2 );
153 -
154 - // Eat the separator.
155 - $string->skip_next_character();
156 -
157 - return $val;
158 - }
159 -
160 - /**
161 - * @param FrmStringReaderHelper $string
162 - * @return int
163 - */
164 - private function parse_int( $string ) {
165 - return (int) $string->read_until( ';' );
166 - }
167 -
168 - /**
169 - * @param FrmStringReaderHelper $string
170 - * @return float
171 - */
172 - private function parse_float( $string ) {
173 - return (float) $string->read_until( ';' );
174 - }
175 -
176 - /**
177 - * @param FrmStringReaderHelper $string
178 - * @return bool
179 - */
180 - private function parse_bool( $string ) {
181 - // Boolean is 0 or 1.
182 - $val = $string->read( 1 ) === '1';
183 - $string->skip_next_character();
184 107 return $val;
185 108 }
186 109 }