]> granicus.if.org Git - php/commitdiff
Add Spoofchecker::setRestrictionLevel() and corresponding constans
authorAnatol Belski <ab@php.net>
Sat, 21 Oct 2017 15:12:21 +0000 (17:12 +0200)
committerAnatol Belski <ab@php.net>
Sat, 21 Oct 2017 15:12:21 +0000 (17:12 +0200)
ext/intl/spoofchecker/spoofchecker.c
ext/intl/spoofchecker/spoofchecker_class.c
ext/intl/spoofchecker/spoofchecker_main.c
ext/intl/spoofchecker/spoofchecker_main.h
ext/intl/tests/spoofchecker_007.phpt [new file with mode: 0644]

index d61aea2e130a07652621f12aa610c1b28455be51..2db28612d4e829bd089044fa88250fe94510203c 100644 (file)
@@ -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
 }
index 3edb41e5fb378b6b5189b6c44f6fa7bdd45a111b..2b6929029502032e75c63e076080280fd2056a9c 100644 (file)
@@ -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
 };
 /* }}} */
index 5e1d75ddad718bb928d6a2facd4a2e943da0f630..7777c0a10d35b5ff89e6dcfd5223cfb651763369 100644 (file)
@@ -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
index 44c99ec856d7e32f9d786a199263d2ba3a20aac7..ca26c706a7007db95dced9a575fad41d2820d501 100644 (file)
@@ -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 (file)
index 0000000..405094d
--- /dev/null
@@ -0,0 +1,21 @@
+--TEST--
+spoofchecker with restriction level
+--SKIPIF--
+<?php if(!extension_loaded('intl') || !class_exists("Spoofchecker")) print 'skip'; ?>
+--FILE--
+<?php
+
+$x = new Spoofchecker();
+$x->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)