pajoye Thu Jul 20 13:03:02 2006 UTC Modified files: /php-src/ext/filter logical_filters.c /php-src/ext/filter/tests 034.phpt Log: - MFB: - make boolean logical filter works like int/float and php itself - add more tests for boolean input http://cvs.php.net/viewvc.cgi/php-src/ext/filter/logical_filters.c?r1=1.2&r2=1.3&diff_format=u Index: php-src/ext/filter/logical_filters.c diff -u php-src/ext/filter/logical_filters.c:1.2 php-src/ext/filter/logical_filters.c:1.3 --- php-src/ext/filter/logical_filters.c:1.2 Wed Jul 19 06:56:28 2006 +++ php-src/ext/filter/logical_filters.c Thu Jul 20 13:03:02 2006 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: logical_filters.c,v 1.2 2006/07/19 06:56:28 tony2001 Exp $ */ +/* $Id: logical_filters.c,v 1.3 2006/07/20 13:03:02 pajoye Exp $ */ #include "php_filter.h" #include "filter_private.h" @@ -217,20 +217,29 @@ void php_filter_boolean(PHP_INPUT_FILTER_PARAM_DECL) /* {{{ */ { + char *str = Z_STRVAL_P(value); + + if (str) { + /* fast(er) trim */ + while (*str == ' ') { + str++; + } + } + /* returns true for "1", "true", "on" and "yes" * returns false for "0", "false", "off", "no", and "" * null otherwise. */ - if ((strncasecmp(Z_STRVAL_P(value), "true", sizeof("true")) == 0) || - (strncasecmp(Z_STRVAL_P(value), "yes", sizeof("yes")) == 0) || - (strncasecmp(Z_STRVAL_P(value), "on", sizeof("on")) == 0) || - (strncmp(Z_STRVAL_P(value), "1", sizeof("1")) == 0)) + if ((strncasecmp(str, "true", sizeof("true")) == 0) || + (strncasecmp(str, "yes", sizeof("yes")) == 0) || + (strncasecmp(str, "on", sizeof("on")) == 0) || + (strncmp(str, "1", sizeof("1")) == 0)) { zval_dtor(value); ZVAL_BOOL(value, 1); - } else if ((strncasecmp(Z_STRVAL_P(value), "false", sizeof("false")) == 0) || - (strncasecmp(Z_STRVAL_P(value), "off", sizeof("off")) == 0) || - (strncasecmp(Z_STRVAL_P(value), "no", sizeof("no")) == 0) || - (strncmp(Z_STRVAL_P(value), "0", sizeof("0")) == 0) || + } else if ((strncasecmp(str, "false", sizeof("false")) == 0) || + (strncasecmp(str, "off", sizeof("off")) == 0) || + (strncasecmp(str, "no", sizeof("no")) == 0) || + (strncmp(str, "0", sizeof("0")) == 0) || Z_STRLEN_P(value) == 0) { zval_dtor(value); http://cvs.php.net/viewvc.cgi/php-src/ext/filter/tests/034.phpt?r1=1.1&r2=1.2&diff_format=u Index: php-src/ext/filter/tests/034.phpt diff -u /dev/null php-src/ext/filter/tests/034.phpt:1.2 --- /dev/null Thu Jul 20 13:03:02 2006 +++ php-src/ext/filter/tests/034.phpt Thu Jul 20 13:03:02 2006 @@ -0,0 +1,30 @@ +--TEST-- +Logical filter: boolean +--FILE-- +<?php +$booleans = array( +'1' => true, +'On' => true, +'Off' => true, +'True' => true, +'TrUe' => true, +'oN' => true, + +'0' => false, +'Off' => false, +'False' => false, +'faLsE' => false, +'oFf' => false, +'' => false +); + +foreach($booleans as $val=>$exp) { + $res =filter_data($val, FILTER_VALIDATE_BOOLEAN); + if ($res !== $exp) { + echo "$val failed,'$exp' expect, '$res' received.\n"; + } +} +echo "Ok."; +?> +--EXPECTF-- +Ok.
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php