diff options
Diffstat (limited to 'ext/intl/spoofchecker')
-rw-r--r-- | ext/intl/spoofchecker/spoofchecker.c | 60 | ||||
-rw-r--r-- | ext/intl/spoofchecker/spoofchecker.h | 24 | ||||
-rw-r--r-- | ext/intl/spoofchecker/spoofchecker_class.c | 210 | ||||
-rw-r--r-- | ext/intl/spoofchecker/spoofchecker_class.h | 76 | ||||
-rw-r--r-- | ext/intl/spoofchecker/spoofchecker_create.c | 59 | ||||
-rw-r--r-- | ext/intl/spoofchecker/spoofchecker_create.h | 24 | ||||
-rw-r--r-- | ext/intl/spoofchecker/spoofchecker_main.c | 142 | ||||
-rw-r--r-- | ext/intl/spoofchecker/spoofchecker_main.h | 27 |
8 files changed, 622 insertions, 0 deletions
diff --git a/ext/intl/spoofchecker/spoofchecker.c b/ext/intl/spoofchecker/spoofchecker.c new file mode 100644 index 0000000..42a014a --- /dev/null +++ b/ext/intl/spoofchecker/spoofchecker.c @@ -0,0 +1,60 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Scott MacVicar <scottmac@php.net> | + +----------------------------------------------------------------------+ + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "spoofchecker_class.h" +#include "spoofchecker.h" + +#include <unicode/uspoof.h> + + +/* {{{ spoofchecker_register_constants + * Register constants + */ +void spoofchecker_register_constants(INIT_FUNC_ARGS) +{ + if (!Spoofchecker_ce_ptr) + { + zend_error(E_ERROR, "Spoofchecker class not defined"); + return; + } + + #define SPOOFCHECKER_EXPOSE_CLASS_CONST(x) zend_declare_class_constant_long(Spoofchecker_ce_ptr, ZEND_STRS( #x ) - 1, USPOOF_##x TSRMLS_CC); + + SPOOFCHECKER_EXPOSE_CLASS_CONST(SINGLE_SCRIPT_CONFUSABLE) + SPOOFCHECKER_EXPOSE_CLASS_CONST(MIXED_SCRIPT_CONFUSABLE) + SPOOFCHECKER_EXPOSE_CLASS_CONST(WHOLE_SCRIPT_CONFUSABLE) + SPOOFCHECKER_EXPOSE_CLASS_CONST(ANY_CASE) + SPOOFCHECKER_EXPOSE_CLASS_CONST(SINGLE_SCRIPT) + SPOOFCHECKER_EXPOSE_CLASS_CONST(INVISIBLE) + SPOOFCHECKER_EXPOSE_CLASS_CONST(CHAR_LIMIT) + + + #undef SPOOFCHECKER_EXPOSE_CLASS_CONST +} +/* }}} */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ diff --git a/ext/intl/spoofchecker/spoofchecker.h b/ext/intl/spoofchecker/spoofchecker.h new file mode 100644 index 0000000..f976d63 --- /dev/null +++ b/ext/intl/spoofchecker/spoofchecker.h @@ -0,0 +1,24 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Scott MacVicar <scottmac@php.net> | + +----------------------------------------------------------------------+ + */ + +#ifndef SPOOFCHECKER_SPOOFCHECKER_H +#define SPOOFCHECKER_SPOOFCHECKER_H + +#include <php.h> + +void spoofchecker_register_constants(INIT_FUNC_ARGS); + +#endif // SPOOFCHECKER_SPOOFCHECKER_H diff --git a/ext/intl/spoofchecker/spoofchecker_class.c b/ext/intl/spoofchecker/spoofchecker_class.c new file mode 100644 index 0000000..6c2b790 --- /dev/null +++ b/ext/intl/spoofchecker/spoofchecker_class.c @@ -0,0 +1,210 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Scott MacVicar <scottmac@php.net> | + +----------------------------------------------------------------------+ + */ + +#include "spoofchecker_class.h" +#include "spoofchecker_main.h" +#include "spoofchecker_create.h" +#include "php_intl.h" +#include "intl_error.h" + +#include <unicode/uspoof.h> + +zend_class_entry *Spoofchecker_ce_ptr = NULL; +static zend_object_handlers Spoofchecker_handlers; + +/* + * Auxiliary functions needed by objects of 'Spoofchecker' class + */ + +/* {{{ Spoofchecker_objects_dtor */ +static void Spoofchecker_objects_dtor( + void *object, + zend_object_handle handle TSRMLS_DC) +{ + zend_objects_destroy_object(object, handle TSRMLS_CC); +} +/* }}} */ + +/* {{{ Spoofchecker_objects_free */ +void Spoofchecker_objects_free(zend_object *object TSRMLS_DC) +{ + Spoofchecker_object* co = (Spoofchecker_object*)object; + + zend_object_std_dtor(&co->zo TSRMLS_CC); + + spoofchecker_object_destroy(co TSRMLS_CC); + + efree(co); +} +/* }}} */ + +/* {{{ Spoofchecker_object_create */ +zend_object_value Spoofchecker_object_create( + zend_class_entry *ce TSRMLS_DC) +{ + zend_object_value retval; + Spoofchecker_object* intern; + + intern = ecalloc(1, sizeof(Spoofchecker_object)); + intl_error_init(SPOOFCHECKER_ERROR_P(intern) TSRMLS_CC); + zend_object_std_init(&intern->zo, ce TSRMLS_CC); + object_properties_init(&intern->zo, ce); + + retval.handle = zend_objects_store_put( + intern, + Spoofchecker_objects_dtor, + (zend_objects_free_object_storage_t)Spoofchecker_objects_free, + NULL TSRMLS_CC); + + retval.handlers = &Spoofchecker_handlers; + + return retval; +} +/* }}} */ + +/* + * 'Spoofchecker' class registration structures & functions + */ + +/* {{{ Spoofchecker methods arguments info */ +ZEND_BEGIN_ARG_INFO_EX(spoofchecker_0_args, 0, 0, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(spoofchecker_set_checks, 0, 0, 1) + ZEND_ARG_INFO(0, checks) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(spoofchecker_set_allowed_locales, 0, 0, 1) + ZEND_ARG_INFO(0, locale_list) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(spoofchecker_is_suspicous, 0, 0, 1) + ZEND_ARG_INFO(0, text) + ZEND_ARG_INFO(1, error) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(spoofchecker_are_confusable, 0, 0, 2) + ZEND_ARG_INFO(0, s1) + ZEND_ARG_INFO(0, s2) + ZEND_ARG_INFO(1, error) +ZEND_END_ARG_INFO() + +/* }}} */ + +/* {{{ Spoofchecker_class_functions + * Every 'Spoofchecker' class method has an entry in this table + */ + +zend_function_entry Spoofchecker_class_functions[] = { + PHP_ME(Spoofchecker, __construct, spoofchecker_0_args, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) + PHP_ME(Spoofchecker, isSuspicious, spoofchecker_is_suspicous, ZEND_ACC_PUBLIC) + 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_FE_END +}; +/* }}} */ + +static zend_object_value spoofchecker_clone_obj(zval *object TSRMLS_DC) /* {{{ */ +{ + zend_object_value new_obj_val; + zend_object_handle handle = Z_OBJ_HANDLE_P(object); + Spoofchecker_object *sfo, *new_sfo; + + sfo = (Spoofchecker_object *) zend_object_store_get_object(object TSRMLS_CC); + intl_error_reset(SPOOFCHECKER_ERROR_P(sfo) TSRMLS_CC); + + new_obj_val = Spoofchecker_ce_ptr->create_object(Z_OBJCE_P(object) TSRMLS_CC); + new_sfo = (Spoofchecker_object *)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC); + /* clone standard parts */ + zend_objects_clone_members(&new_sfo->zo, new_obj_val, &sfo->zo, handle TSRMLS_CC); + /* clone internal object */ + new_sfo->uspoof = uspoof_clone(sfo->uspoof, SPOOFCHECKER_ERROR_CODE_P(new_sfo)); + if(U_FAILURE(SPOOFCHECKER_ERROR_CODE(new_sfo))) { + /* set up error in case error handler is interested */ + intl_error_set( NULL, SPOOFCHECKER_ERROR_CODE(new_sfo), "Failed to clone SpoofChecker object", 0 TSRMLS_CC ); + Spoofchecker_objects_dtor(new_sfo, new_obj_val.handle TSRMLS_CC); /* free new object */ + zend_error(E_ERROR, "Failed to clone SpoofChecker object"); + } + return new_obj_val; +} +/* }}} */ + +/* {{{ spoofchecker_register_Spoofchecker_class + * Initialize 'Spoofchecker' class + */ +void spoofchecker_register_Spoofchecker_class(TSRMLS_D) +{ + zend_class_entry ce; + + /* Create and register 'Spoofchecker' class. */ + INIT_CLASS_ENTRY(ce, "Spoofchecker", Spoofchecker_class_functions); + ce.create_object = Spoofchecker_object_create; + Spoofchecker_ce_ptr = zend_register_internal_class(&ce TSRMLS_CC); + + memcpy(&Spoofchecker_handlers, zend_get_std_object_handlers(), + sizeof Spoofchecker_handlers); + Spoofchecker_handlers.clone_obj = spoofchecker_clone_obj; + + if (!Spoofchecker_ce_ptr) { + zend_error(E_ERROR, + "Spoofchecker: attempt to create properties " + "on a non-registered class."); + return; + } +} +/* }}} */ + +/* {{{ void spoofchecker_object_init( Spoofchecker_object* co ) + * Initialize internals of Spoofchecker_object. + * Must be called before any other call to 'spoofchecker_object_...' functions. + */ +void spoofchecker_object_init(Spoofchecker_object* co TSRMLS_DC) +{ + if (!co) { + return; + } + + intl_error_init(SPOOFCHECKER_ERROR_P(co) TSRMLS_CC); +} +/* }}} */ + +/* {{{ void spoofchecker_object_destroy( Spoofchecker_object* co ) + * Clean up mem allocted by internals of Spoofchecker_object + */ +void spoofchecker_object_destroy(Spoofchecker_object* co TSRMLS_DC) +{ + if (!co) { + return; + } + + if (co->uspoof) { + uspoof_close(co->uspoof); + co->uspoof = NULL; + } + + intl_error_reset(SPOOFCHECKER_ERROR_P(co) TSRMLS_CC); +} +/* }}} */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ diff --git a/ext/intl/spoofchecker/spoofchecker_class.h b/ext/intl/spoofchecker/spoofchecker_class.h new file mode 100644 index 0000000..ec043d9 --- /dev/null +++ b/ext/intl/spoofchecker/spoofchecker_class.h @@ -0,0 +1,76 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Scott MacVicar <scottmac@php.net> | + +----------------------------------------------------------------------+ + */ + +#ifndef SPOOFCHECKER_CLASS_H +#define SPOOFCHECKER_CLASS_H + +#include <php.h> + +#include "intl_common.h" +#include "spoofchecker_create.h" +#include "intl_error.h" +#include "intl_data.h" + +#include <unicode/uspoof.h> + +typedef struct { + zend_object zo; + + // error handling + intl_error err; + + // ICU Spoofchecker + USpoofChecker* uspoof; +} Spoofchecker_object; + +#define SPOOFCHECKER_ERROR(co) (co)->err +#define SPOOFCHECKER_ERROR_P(co) &(SPOOFCHECKER_ERROR(co)) + +#define SPOOFCHECKER_ERROR_CODE(co) INTL_ERROR_CODE(SPOOFCHECKER_ERROR(co)) +#define SPOOFCHECKER_ERROR_CODE_P(co) &(INTL_ERROR_CODE(SPOOFCHECKER_ERROR(co))) + +void spoofchecker_register_Spoofchecker_class(TSRMLS_D); + +void spoofchecker_object_init(Spoofchecker_object* co TSRMLS_DC); +void spoofchecker_object_destroy(Spoofchecker_object* co TSRMLS_DC); + +extern zend_class_entry *Spoofchecker_ce_ptr; + +/* Auxiliary macros */ + +#define SPOOFCHECKER_METHOD_INIT_VARS \ + zval* object = getThis(); \ + Spoofchecker_object* co = NULL; \ + intl_error_reset(NULL TSRMLS_CC); \ + +#define SPOOFCHECKER_METHOD_FETCH_OBJECT_NO_CHECK INTL_METHOD_FETCH_OBJECT(Spoofchecker, co) +#define SPOOFCHECKER_METHOD_FETCH_OBJECT \ + SPOOFCHECKER_METHOD_FETCH_OBJECT_NO_CHECK; \ + if (co->uspoof == NULL) { \ + intl_errors_set(&co->err, U_ILLEGAL_ARGUMENT_ERROR, \ + "Found unconstructed Spoofchecker", 0 TSRMLS_CC); \ + RETURN_FALSE; \ + } + +// Macro to check return value of a ucol_* function call. +#define SPOOFCHECKER_CHECK_STATUS(co, msg) \ + intl_error_set_code(NULL, SPOOFCHECKER_ERROR_CODE(co) TSRMLS_CC); \ + if (U_FAILURE(SPOOFCHECKER_ERROR_CODE(co))) { \ + intl_errors_set_custom_msg(SPOOFCHECKER_ERROR_P(co), msg, 0 TSRMLS_CC); \ + RETURN_FALSE; \ + } \ + +#endif // #ifndef SPOOFCHECKER_CLASS_H diff --git a/ext/intl/spoofchecker/spoofchecker_create.c b/ext/intl/spoofchecker/spoofchecker_create.c new file mode 100644 index 0000000..cf0173f --- /dev/null +++ b/ext/intl/spoofchecker/spoofchecker_create.c @@ -0,0 +1,59 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Scott MacVicar <scottmac@php.net> | + +----------------------------------------------------------------------+ + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php_intl.h" +#include "spoofchecker_class.h" +#include "spoofchecker_create.h" +#include "intl_data.h" + +/* {{{ proto Spoofchecker Spoofchecker::__construct() + * Spoofchecker object constructor. + */ +PHP_METHOD(Spoofchecker, __construct) +{ + int checks; + SPOOFCHECKER_METHOD_INIT_VARS; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + SPOOFCHECKER_METHOD_FETCH_OBJECT_NO_CHECK; + + co->uspoof = uspoof_open(SPOOFCHECKER_ERROR_CODE_P(co)); + INTL_CTOR_CHECK_STATUS(co, "spoofchecker: unable to open ICU Spoof Checker"); + + /* Single-script enforcement is on by default. This fails for languages + like Japanese that legally use multiple scripts within a single word, + so we turn it off. + */ + checks = uspoof_getChecks(co->uspoof, SPOOFCHECKER_ERROR_CODE_P(co)); + uspoof_setChecks(co->uspoof, checks & ~USPOOF_SINGLE_SCRIPT, SPOOFCHECKER_ERROR_CODE_P(co)); +} +/* }}} */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ diff --git a/ext/intl/spoofchecker/spoofchecker_create.h b/ext/intl/spoofchecker/spoofchecker_create.h new file mode 100644 index 0000000..313faab --- /dev/null +++ b/ext/intl/spoofchecker/spoofchecker_create.h @@ -0,0 +1,24 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Scott MacVicar <scottmac@php.net> | + +----------------------------------------------------------------------+ + */ + +#ifndef SPOOFCHECKER_CREATE_H +#define SPOOFCHECKER_CREATE_H + +#include <php.h> + +PHP_METHOD(Spoofchecker, __construct); + +#endif // SPOOFCHECKER_CREATE_H diff --git a/ext/intl/spoofchecker/spoofchecker_main.c b/ext/intl/spoofchecker/spoofchecker_main.c new file mode 100644 index 0000000..c37b918 --- /dev/null +++ b/ext/intl/spoofchecker/spoofchecker_main.c @@ -0,0 +1,142 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Scott MacVicar <scottmac@php.net> | + +----------------------------------------------------------------------+ + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "php_intl.h" +#include "spoofchecker_class.h" + +/* {{{ proto bool Spoofchecker::isSuspicious( string text[, int &error_code ] ) + * Checks if a given text contains any suspicious characters + */ +PHP_METHOD(Spoofchecker, isSuspicious) +{ + int ret; + char *text; + int text_len; + zval *error_code = NULL; + SPOOFCHECKER_METHOD_INIT_VARS; + + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &text, &text_len, &error_code)) { + return; + } + + SPOOFCHECKER_METHOD_FETCH_OBJECT; + + ret = uspoof_checkUTF8(co->uspoof, text, text_len, NULL, SPOOFCHECKER_ERROR_CODE_P(co)); + + if (U_FAILURE(SPOOFCHECKER_ERROR_CODE(co))) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "(%d) %s", SPOOFCHECKER_ERROR_CODE(co), u_errorName(SPOOFCHECKER_ERROR_CODE(co))); + RETURN_TRUE; + } + + if (error_code) { + zval_dtor(error_code); + ZVAL_LONG(error_code, ret); + } + RETVAL_BOOL(ret != 0); +} +/* }}} */ + +/* {{{ proto bool Spoofchecker::areConfusable( string str1, string str2[, int &error_code ] ) + * Checks if a given text contains any confusable characters + */ +PHP_METHOD(Spoofchecker, areConfusable) +{ + int ret; + char *s1, *s2; + int s1_len, s2_len; + zval *error_code = NULL; + SPOOFCHECKER_METHOD_INIT_VARS; + + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|z", &s1, &s1_len, + &s2, &s2_len, &error_code)) { + return; + } + + SPOOFCHECKER_METHOD_FETCH_OBJECT; + + ret = uspoof_areConfusableUTF8(co->uspoof, s1, s1_len, s2, s2_len, SPOOFCHECKER_ERROR_CODE_P(co)); + + if (U_FAILURE(SPOOFCHECKER_ERROR_CODE(co))) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "(%d) %s", SPOOFCHECKER_ERROR_CODE(co), u_errorName(SPOOFCHECKER_ERROR_CODE(co))); + RETURN_TRUE; + } + + if (error_code) { + zval_dtor(error_code); + ZVAL_LONG(error_code, ret); + } + RETVAL_BOOL(ret != 0); +} +/* }}} */ + +/* {{{ proto void Spoofchecker::setAllowedLocales( string locales ) + * Locales to use when running checks + */ +PHP_METHOD(Spoofchecker, setAllowedLocales) +{ + char *locales; + int locales_len; + SPOOFCHECKER_METHOD_INIT_VARS; + + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &locales, &locales_len)) { + return; + } + + SPOOFCHECKER_METHOD_FETCH_OBJECT; + + uspoof_setAllowedLocales(co->uspoof, locales, SPOOFCHECKER_ERROR_CODE_P(co)); + + if (U_FAILURE(SPOOFCHECKER_ERROR_CODE(co))) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "(%d) %s", SPOOFCHECKER_ERROR_CODE(co), u_errorName(SPOOFCHECKER_ERROR_CODE(co))); + return; + } +} +/* }}} */ + +/* {{{ proto void Spoofchecker::setChecks( int checks ) + * Set the checks to run + */ +PHP_METHOD(Spoofchecker, setChecks) +{ + long checks; + SPOOFCHECKER_METHOD_INIT_VARS; + + if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &checks)) { + return; + } + + SPOOFCHECKER_METHOD_FETCH_OBJECT; + + uspoof_setChecks(co->uspoof, checks, SPOOFCHECKER_ERROR_CODE_P(co)); + + if (U_FAILURE(SPOOFCHECKER_ERROR_CODE(co))) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "(%d) %s", SPOOFCHECKER_ERROR_CODE(co), u_errorName(SPOOFCHECKER_ERROR_CODE(co))); + } +} +/* }}} */ + +/* + * Local variables: + * tab-width: 4 + * c-basic-offset: 4 + * End: + * vim600: noet sw=4 ts=4 fdm=marker + * vim<600: noet sw=4 ts=4 + */ diff --git a/ext/intl/spoofchecker/spoofchecker_main.h b/ext/intl/spoofchecker/spoofchecker_main.h new file mode 100644 index 0000000..fb920d7 --- /dev/null +++ b/ext/intl/spoofchecker/spoofchecker_main.h @@ -0,0 +1,27 @@ +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Scott MacVicar <scottmac@php.net> | + +----------------------------------------------------------------------+ + */ + +#ifndef SPOOFCHECKER_MAIN_H +#define SPOOFCHECKER_MAIN_H + +#include <php.h> + +PHP_METHOD(Spoofchecker, isSuspicious); +PHP_METHOD(Spoofchecker, areConfusable); +PHP_METHOD(Spoofchecker, setAllowedLocales); +PHP_METHOD(Spoofchecker, setChecks); + +#endif // SPOOFCHECKER_MAIN_H |