@@ -161,6 +161,7 @@ static void *php_tidy_get_opt_val(TidyOption opt, TidyOptionType *type TSRMLS_DC
161
161
static int _php_tidy_set_tidy_opt (char * optname , zval * value TSRMLS_DC )
162
162
{
163
163
TidyOption opt ;
164
+ zval conv = * value ;
164
165
165
166
if (!(opt = tidyGetOptionByName (TG (tdoc )-> doc , optname ))) {
166
167
php_error_docref (NULL TSRMLS_CC , E_NOTICE , "Unknown Tidy Configuration Option '%s'" , optname );
@@ -174,22 +175,37 @@ static int _php_tidy_set_tidy_opt(char *optname, zval *value TSRMLS_DC)
174
175
175
176
switch (tidyOptGetType (opt )) {
176
177
case TidyString :
177
- convert_to_string_ex (& value );
178
- if (tidyOptSetValue (TG (tdoc )-> doc , tidyOptGetId (opt ), Z_STRVAL_P (value ))) {
179
- return SUCCESS ;
180
- }
178
+ if (Z_TYPE (conv ) != IS_STRING ) {
179
+ zval_copy_ctor (& conv );
180
+ convert_to_string (& conv );
181
+ }
182
+ if (tidyOptSetValue (TG (tdoc )-> doc , tidyOptGetId (opt ), Z_STRVAL (conv ))) {
183
+ if (Z_TYPE (conv ) != Z_TYPE_P (value )) {
184
+ zval_dtor (& conv );
185
+ }
186
+ return SUCCESS ;
187
+ }
188
+ if (Z_TYPE (conv ) != Z_TYPE_P (value )) {
189
+ zval_dtor (& conv );
190
+ }
181
191
break ;
182
192
183
193
case TidyInteger :
184
- convert_to_long_ex (& value );
185
- if (tidyOptSetInt (TG (tdoc )-> doc , tidyOptGetId (opt ), Z_LVAL_P (value ))) {
194
+ if (Z_TYPE (conv ) != IS_LONG ) {
195
+ zval_copy_ctor (& conv );
196
+ convert_to_long (& conv );
197
+ }
198
+ if (tidyOptSetInt (TG (tdoc )-> doc , tidyOptGetId (opt ), Z_LVAL (conv ))) {
186
199
return SUCCESS ;
187
200
}
188
201
break ;
189
202
190
203
case TidyBoolean :
191
- convert_to_long_ex (& value );
192
- if (tidyOptSetBool (TG (tdoc )-> doc , tidyOptGetId (opt ), Z_LVAL_P (value ))) {
204
+ if (Z_TYPE (conv ) != IS_LONG ) {
205
+ zval_copy_ctor (& conv );
206
+ convert_to_long (& conv );
207
+ }
208
+ if (tidyOptSetBool (TG (tdoc )-> doc , tidyOptGetId (opt ), Z_LVAL (conv ))) {
193
209
return SUCCESS ;
194
210
}
195
211
break ;
@@ -198,7 +214,7 @@ static int _php_tidy_set_tidy_opt(char *optname, zval *value TSRMLS_DC)
198
214
php_error_docref (NULL TSRMLS_CC , E_WARNING , "Unable to determine type of configuration option" );
199
215
break ;
200
216
}
201
-
217
+
202
218
return FAILURE ;
203
219
}
204
220
0 commit comments