mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
ext/tidy: tidyOptGetType returns an enum that is fully checked
This commit is contained in:
parent
aadd724362
commit
01dbee83e1
1 changed files with 25 additions and 58 deletions
|
@ -219,7 +219,6 @@ static zend_result php_tidy_apply_config(TidyDoc doc, const zend_string *str_str
|
||||||
static zend_result _php_tidy_set_tidy_opt(TidyDoc doc, const char *optname, zval *value, uint32_t arg)
|
static zend_result _php_tidy_set_tidy_opt(TidyDoc doc, const char *optname, zval *value, uint32_t arg)
|
||||||
{
|
{
|
||||||
TidyOption opt = tidyGetOptionByName(doc, optname);
|
TidyOption opt = tidyGetOptionByName(doc, optname);
|
||||||
zend_string *str, *tmp_str;
|
|
||||||
zend_long lval;
|
zend_long lval;
|
||||||
|
|
||||||
if (!opt) {
|
if (!opt) {
|
||||||
|
@ -236,36 +235,21 @@ static zend_result _php_tidy_set_tidy_opt(TidyDoc doc, const char *optname, zval
|
||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(tidyOptGetType(opt)) {
|
TidyOptionType type = tidyOptGetType(opt);
|
||||||
case TidyString:
|
if (type == TidyString) {
|
||||||
str = zval_get_tmp_string(value, &tmp_str);
|
zend_string *tmp_str;
|
||||||
if (tidyOptSetValue(doc, tidyOptGetId(opt), ZSTR_VAL(str))) {
|
const zend_string *str = zval_get_tmp_string(value, &tmp_str);
|
||||||
zend_tmp_string_release(tmp_str);
|
const bool result = tidyOptSetValue(doc, tidyOptGetId(opt), ZSTR_VAL(str));
|
||||||
return SUCCESS;
|
zend_tmp_string_release(tmp_str);
|
||||||
}
|
return result ? SUCCESS : FAILURE;
|
||||||
zend_tmp_string_release(tmp_str);
|
} else if (type == TidyInteger) {
|
||||||
break;
|
lval = zval_get_long(value);
|
||||||
|
return tidyOptSetInt(doc, tidyOptGetId(opt), lval) ? SUCCESS : FAILURE;
|
||||||
case TidyInteger:
|
} else {
|
||||||
lval = zval_get_long(value);
|
ZEND_ASSERT(type == TidyBoolean);
|
||||||
if (tidyOptSetInt(doc, tidyOptGetId(opt), lval)) {
|
lval = zval_get_long(value);
|
||||||
return SUCCESS;
|
return tidyOptSetBool(doc, tidyOptGetId(opt), lval) ? SUCCESS : FAILURE;
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TidyBoolean:
|
|
||||||
lval = zval_get_long(value);
|
|
||||||
if (tidyOptSetBool(doc, tidyOptGetId(opt), lval)) {
|
|
||||||
return SUCCESS;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
php_error_docref(NULL, E_WARNING, "Unable to determine type of configuration option");
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return FAILURE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tidy_create_node_object(zval *zv, PHPTidyDoc *ptdoc, TidyNode node)
|
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
|
||||||
{
|
{
|
||||||
*type = tidyOptGetType(opt);
|
*type = tidyOptGetType(opt);
|
||||||
|
|
||||||
switch (*type) {
|
if (*type == TidyString) {
|
||||||
case TidyString: {
|
const char *val = tidyOptGetValue(ptdoc->doc, tidyOptGetId(opt));
|
||||||
const char *val = tidyOptGetValue(ptdoc->doc, tidyOptGetId(opt));
|
if (val) {
|
||||||
if (val) {
|
return (void *) zend_string_init(val, strlen(val), 0);
|
||||||
return (void *) zend_string_init(val, strlen(val), 0);
|
} else {
|
||||||
} else {
|
return (void *) ZSTR_EMPTY_ALLOC();
|
||||||
return (void *) ZSTR_EMPTY_ALLOC();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
} else if (*type == TidyInteger) {
|
||||||
|
return (void *) (uintptr_t) tidyOptGetInt(ptdoc->doc, tidyOptGetId(opt));
|
||||||
case TidyInteger:
|
} else {
|
||||||
return (void *) (uintptr_t) tidyOptGetInt(ptdoc->doc, tidyOptGetId(opt));
|
ZEND_ASSERT(*type == TidyBoolean);
|
||||||
break;
|
return (void *) tidyOptGetBool(ptdoc->doc, tidyOptGetId(opt));
|
||||||
|
|
||||||
case TidyBoolean:
|
|
||||||
return (void *) tidyOptGetBool(ptdoc->doc, tidyOptGetId(opt));
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* should not happen */
|
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetypes node_type)
|
static void php_tidy_create_node(INTERNAL_FUNCTION_PARAMETERS, tidy_base_nodetypes node_type)
|
||||||
|
@ -1322,18 +1297,10 @@ PHP_FUNCTION(tidy_getopt)
|
||||||
|
|
||||||
case TidyInteger:
|
case TidyInteger:
|
||||||
RETURN_LONG((zend_long)optval);
|
RETURN_LONG((zend_long)optval);
|
||||||
break;
|
|
||||||
|
|
||||||
case TidyBoolean:
|
case TidyBoolean:
|
||||||
RETURN_BOOL(optval);
|
RETURN_BOOL(optval);
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
php_error_docref(NULL, E_WARNING, "Unable to determine type of configuration option");
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RETURN_FALSE;
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue