PluginProbe
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More / 6.18
Formidable Forms – WordPress Form Builder for Contact Forms, Calculators, Quizzes & More v6.18
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 +77 -42 6.36.18 View file →
@@ -47,66 +47,101 @@
47 47 /**
48 48 * This is the recursive parser.
49 49 *
50 50 * @param FrmStringReaderHelper $string
51 - * @return mixed
51 + * @return array|bool|float|int|string|null
52 52 */
53 53 private function do_parse( $string ) {
54 - $val = null;
55 -
56 54 // May be : or ; as a terminator, depending on what the data type is.
57 - $type = substr( $string->read( 2 ), 0, 1 );
55 + $type = $string->read( 1 );
56 + $string->skip_next_character();
58 57
59 58 switch ( $type ) {
60 59 case 'a':
61 - // Associative array: a:length:{[index][value]...}
62 - $count = (int) $string->read_until( ':' );
60 + return $this->parse_array( $string );
63 61
64 - // Eat the opening "{" of the array.
65 - $string->read( 1 );
62 + case 's':
63 + return $this->parse_string( $string );
66 64
67 - $val = array();
68 - for ( $i = 0; $i < $count; $i++ ) {
69 - $array_key = $this->do_parse( $string );
70 - $array_value = $this->do_parse( $string );
65 + case 'i':
66 + return $this->parse_int( $string );
71 67
72 - if ( ! is_array( $array_key ) ) {
73 - $val[ $array_key ] = $array_value;
74 - }
75 - }
68 + case 'd':
69 + return $this->parse_float( $string );
76 70
77 - // Eat "}" terminating the array.
78 - $string->read( 1 );
79 - break;
71 + case 'b':
72 + return $this->parse_bool( $string );
73 + }
80 74
81 - case 's':
82 - $len = (int) $string->read_until( ':' );
83 - $val = $string->read( $len + 2 );
75 + // Includes case 'N' and case 'O'.
76 + // Treat a serialized object or anything unexpected as Null.
77 + return null;
78 + }
84 79
85 - // Eat the separator.
86 - $string->read( 1 );
87 - break;
80 + /**
81 + * @param FrmStringReaderHelper $string
82 + * @return array
83 + */
84 + private function parse_array( $string ) {
85 + // Associative array: a:length:{[index][value]...}
86 + $count = (int) $string->read_until( ':' );
88 87
89 - case 'i':
90 - $val = (int) $string->read_until( ';' );
91 - break;
88 + // Eat the opening "{" of the array.
89 + $string->skip_next_character();
92 90
93 - case 'd':
94 - $val = (float) $string->read_until( ';' );
95 - break;
91 + $val = array();
92 + for ( $i = 0; $i < $count; $i++ ) {
93 + $array_key = $this->do_parse( $string );
94 + $array_value = $this->do_parse( $string );
96 95
97 - case 'b':
98 - // Boolean is 0 or 1.
99 - $bool = $string->read( 2 );
100 - $val = substr( $bool, 0, 1 ) == '1';
101 - break;
96 + if ( ! is_array( $array_key ) ) {
97 + $val[ $array_key ] = $array_value;
98 + }
99 + }
102 100
103 - default:
104 - // Includes case 'N' and case 'O'.
105 - // Treat a serialized object or anything unexpected as Null.
106 - $val = null;
107 - break;
108 - }
101 + // Eat "}" terminating the array.
102 + $string->skip_next_character();
109 103
104 + return $val;
105 + }
106 +
107 + /**
108 + * @param FrmStringReaderHelper $string
109 + * @return string
110 + */
111 + private function parse_string( $string ) {
112 + $len = (int) $string->read_until( ':' );
113 + $val = $string->read( $len + 2 );
114 +
115 + // Eat the separator.
116 + $string->skip_next_character();
117 +
118 + return $val;
119 + }
120 +
121 + /**
122 + * @param FrmStringReaderHelper $string
123 + * @return int
124 + */
125 + private function parse_int( $string ) {
126 + return (int) $string->read_until( ';' );
127 + }
128 +
129 + /**
130 + * @param FrmStringReaderHelper $string
131 + * @return float
132 + */
133 + private function parse_float( $string ) {
134 + return (float) $string->read_until( ';' );
135 + }
136 +
137 + /**
138 + * @param FrmStringReaderHelper $string
139 + * @return bool
140 + */
141 + private function parse_bool( $string ) {
142 + // Boolean is 0 or 1.
143 + $val = $string->read( 1 ) === '1';
144 + $string->skip_next_character();
110 145 return $val;
111 146 }
112 147 }