Skip to content

Commit 01dbee8

Browse files
committed
ext/tidy: tidyOptGetType returns an enum that is fully checked
1 parent aadd724 commit 01dbee8

File tree

1 file changed

+25
-58
lines changed

1 file changed

+25
-58
lines changed

ext/tidy/tidy.c

Lines changed: 25 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,6 @@ static zend_result php_tidy_apply_config(TidyDoc doc, const zend_string *str_str
219219
static zend_result _php_tidy_set_tidy_opt(TidyDoc doc, const char *optname, zval *value, uint32_t arg)
220220
{
221221
TidyOption opt = tidyGetOptionByName(doc, optname);
222-
zend_string *str, *tmp_str;
223222
zend_long lval;
224223

225224
if (!opt) {
@@ -236,36 +235,21 @@ static zend_result _php_tidy_set_tidy_opt(TidyDoc doc, const char *optname, zval
236235
return FAILURE;
237236
}
238237

239-
switch(tidyOptGetType(opt)) {
240-
case TidyString:
241-
str = zval_get_tmp_string(value, &tmp_str);
242-
if (tidyOptSetValue(doc, tidyOptGetId(opt), ZSTR_VAL(str))) {
243-
zend_tmp_string_release(tmp_str);
244-
return SUCCESS;
245-
}
246-
zend_tmp_string_release(tmp_str);
247-
break;
248-
249-
case TidyInteger:
250-
lval = zval_get_long(value);
251-
if (tidyOptSetInt(doc, tidyOptGetId(opt), lval)) {
252-
return SUCCESS;
253-
}
254-
break;
255-
256-
case TidyBoolean:
257-
lval = zval_get_long(value);
258-
if (tidyOptSetBool(doc, tidyOptGetId(opt), lval)) {
259-
return SUCCESS;
260-
}
261-
break;
262-
263-
default:
264-
php_error_docref(NULL, E_WARNING, "Unable to determine type of configuration option");
265-
break;
238+
TidyOptionType type = tidyOptGetType(opt);
239+
if (type == TidyString) {
240+
zend_string *tmp_str;
241+
const zend_string *str = zval_get_tmp_string(value, &tmp_str);
242+
const bool result = tidyOptSetValue(doc, tidyOptGetId(opt), ZSTR_VAL(str));
243+
zend_tmp_string_release(tmp_str);
244+
return result ? SUCCESS : FAILURE;
245+
} else if (type == TidyInteger) {
246+
lval = zval_get_long(value);
247+
return tidyOptSetInt(doc, tidyOptGetId(opt), lval) ? SUCCESS : FAILURE;
248+
} else {
249+
ZEND_ASSERT(type == TidyBoolean);
250+
lval = zval_get_long(value);
251+
return tidyOptSetBool(doc, tidyOptGetId(opt), lval) ? SUCCESS : FAILURE;
266252
}
267-
268-
return FAILURE;
269253
}
270254

271255
static void tidy_create_node_object(zval *zv, PHPTidyDoc *ptdoc, TidyNode node)
@@ -720,28 +704,19 @@ static void *php_tidy_get_opt_val(const PHPTidyDoc *ptdoc, TidyOption opt, TidyO
720704
{
721705
*type = tidyOptGetType(opt);
722706

723-
switch (*type) {
724-
case TidyString: {
725-
const char *val = tidyOptGetValue(ptdoc->doc, tidyOptGetId(opt));
726-
if (val) {
727-
return (void *) zend_string_init(val, strlen(val), 0);
728-
} else {
729-
return (void *) ZSTR_EMPTY_ALLOC();
730-
}
707+
if (*type == TidyString) {
708+
const char *val = tidyOptGetValue(ptdoc->doc, tidyOptGetId(opt));
709+
if (val) {
710+
return (void *) zend_string_init(val, strlen(val), 0);
711+
} else {
712+
return (void *) ZSTR_EMPTY_ALLOC();
731713
}
732-
break;
733-
734-
case TidyInteger:
735-
return (void *) (uintptr_t) tidyOptGetInt(ptdoc->doc, tidyOptGetId(opt));
736-
break;
737-
738-
case TidyBoolean:
739-
return (void *) tidyOptGetBool(ptdoc->doc, tidyOptGetId(opt));
740-
break;
714+
} else if (*type == TidyInteger) {
715+
return (void *) (uintptr_t) tidyOptGetInt(ptdoc->doc, tidyOptGetId(opt));
716+
} else {
717+
ZEND_ASSERT(*type == TidyBoolean);
718+
return (void *) tidyOptGetBool(ptdoc->doc, tidyOptGetId(opt));
741719
}
742-
743-
/* should not happen */
744-
return NULL;
745720
}
746721

747722
static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetypes node_type)
@@ -1322,18 +1297,10 @@ PHP_FUNCTION(tidy_getopt)
13221297

13231298
case TidyInteger:
13241299
RETURN_LONG((zend_long)optval);
1325-
break;
13261300

13271301
case TidyBoolean:
13281302
RETURN_BOOL(optval);
1329-
break;
1330-
1331-
default:
1332-
php_error_docref(NULL, E_WARNING, "Unable to determine type of configuration option");
1333-
break;
13341303
}
1335-
1336-
RETURN_FALSE;
13371304
}
13381305
/* }}} */
13391306

0 commit comments

Comments
 (0)