From: Anatol Belski Date: Sat, 21 Oct 2017 15:12:21 +0000 (+0200) Subject: Add Spoofchecker::setRestrictionLevel() and corresponding constans X-Git-Tag: php-7.3.0alpha1~1217 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f56ceb7f5b603768e6801a0f7471f430075015ac;p=php Add Spoofchecker::setRestrictionLevel() and corresponding constans --- diff --git a/ext/intl/spoofchecker/spoofchecker.c b/ext/intl/spoofchecker/spoofchecker.c index d61aea2e13..2db28612d4 100644 --- a/ext/intl/spoofchecker/spoofchecker.c +++ b/ext/intl/spoofchecker/spoofchecker.c @@ -45,6 +45,16 @@ void spoofchecker_register_constants(INIT_FUNC_ARGS) SPOOFCHECKER_EXPOSE_CLASS_CONST(INVISIBLE) SPOOFCHECKER_EXPOSE_CLASS_CONST(CHAR_LIMIT) +#if U_ICU_VERSION_MAJOR_NUM >= 51 + SPOOFCHECKER_EXPOSE_CLASS_CONST(ASCII) + SPOOFCHECKER_EXPOSE_CLASS_CONST(HIGHLY_RESTRICTIVE) + SPOOFCHECKER_EXPOSE_CLASS_CONST(MODERATELY_RESTRICTIVE) + SPOOFCHECKER_EXPOSE_CLASS_CONST(MINIMALLY_RESTRICTIVE) + SPOOFCHECKER_EXPOSE_CLASS_CONST(UNRESTRICTIVE) +#endif +#if U_ICU_VERSION_MAJOR_NUM >= 53 + SPOOFCHECKER_EXPOSE_CLASS_CONST(SINGLE_SCRIPT_RESTRICTIVE) +#endif #undef SPOOFCHECKER_EXPOSE_CLASS_CONST } diff --git a/ext/intl/spoofchecker/spoofchecker_class.c b/ext/intl/spoofchecker/spoofchecker_class.c index 3edb41e5fb..2b69290295 100644 --- a/ext/intl/spoofchecker/spoofchecker_class.c +++ b/ext/intl/spoofchecker/spoofchecker_class.c @@ -84,6 +84,10 @@ ZEND_BEGIN_ARG_INFO_EX(spoofchecker_are_confusable, 0, 0, 2) ZEND_ARG_INFO(1, error) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(spoofchecker_set_restriction_level, 0, 0, 1) + ZEND_ARG_INFO(0, checks) +ZEND_END_ARG_INFO() + /* }}} */ /* {{{ Spoofchecker_class_functions @@ -96,6 +100,7 @@ zend_function_entry Spoofchecker_class_functions[] = { PHP_ME(Spoofchecker, areConfusable, spoofchecker_are_confusable, ZEND_ACC_PUBLIC) PHP_ME(Spoofchecker, setAllowedLocales, spoofchecker_set_allowed_locales, ZEND_ACC_PUBLIC) PHP_ME(Spoofchecker, setChecks, spoofchecker_set_checks, ZEND_ACC_PUBLIC) + PHP_ME(Spoofchecker, setRestrictionLevel, spoofchecker_set_restriction_level, ZEND_ACC_PUBLIC) PHP_FE_END }; /* }}} */ diff --git a/ext/intl/spoofchecker/spoofchecker_main.c b/ext/intl/spoofchecker/spoofchecker_main.c index 5e1d75ddad..7777c0a10d 100644 --- a/ext/intl/spoofchecker/spoofchecker_main.c +++ b/ext/intl/spoofchecker/spoofchecker_main.c @@ -134,6 +134,34 @@ PHP_METHOD(Spoofchecker, setChecks) } /* }}} */ +/* {{{ proto void Spoofchecker::setRestrictionLevel( int $restriction_level ) + * Set the loosest restriction level allowed for strings. + */ +PHP_METHOD(Spoofchecker, setRestrictionLevel) +{ + zend_long level; + SPOOFCHECKER_METHOD_INIT_VARS; + + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS(), "l", &level)) { + return; + } + + SPOOFCHECKER_METHOD_FETCH_OBJECT; + + if (USPOOF_ASCII != level && + USPOOF_SINGLE_SCRIPT_RESTRICTIVE != level && + USPOOF_HIGHLY_RESTRICTIVE != level && + USPOOF_MODERATELY_RESTRICTIVE != level && + USPOOF_MINIMALLY_RESTRICTIVE != level && + USPOOF_UNRESTRICTIVE != level) { + php_error_docref(NULL, E_WARNING, "Invalid restriction level value"); + return; + } + + uspoof_setRestrictionLevel(co->uspoof, (URestrictionLevel)level); +} +/* }}} */ + /* * Local variables: * tab-width: 4 diff --git a/ext/intl/spoofchecker/spoofchecker_main.h b/ext/intl/spoofchecker/spoofchecker_main.h index 44c99ec856..ca26c706a7 100644 --- a/ext/intl/spoofchecker/spoofchecker_main.h +++ b/ext/intl/spoofchecker/spoofchecker_main.h @@ -23,5 +23,6 @@ PHP_METHOD(Spoofchecker, isSuspicious); PHP_METHOD(Spoofchecker, areConfusable); PHP_METHOD(Spoofchecker, setAllowedLocales); PHP_METHOD(Spoofchecker, setChecks); +PHP_METHOD(Spoofchecker, setRestrictionLevel); #endif // SPOOFCHECKER_MAIN_H diff --git a/ext/intl/tests/spoofchecker_007.phpt b/ext/intl/tests/spoofchecker_007.phpt new file mode 100644 index 0000000000..405094dfcc --- /dev/null +++ b/ext/intl/tests/spoofchecker_007.phpt @@ -0,0 +1,21 @@ +--TEST-- +spoofchecker with restriction level +--SKIPIF-- + +--FILE-- +setRestrictionLevel(Spoofchecker::HIGHLY_RESTRICTIVE); + +$mixed = "\u{91CE}\u{7403}\u{30FC}"; +var_dump($x->isSuspicious($mixed)); + +$x->setRestrictionLevel(Spoofchecker::SINGLE_SCRIPT_RESTRICTIVE); + +$mixed = "\u{91CE}\u{7403}\u{30FC} abc"; +var_dump($x->isSuspicious($mixed)); +?> +--EXPECT-- +bool(false) +bool(true)