Commit:    6186b676000f74af92b979382f605ed104b6a4bc
Author:    Martin Jansen <mar...@divbyzero.net>         Sat, 5 Jan 2013 
22:46:14 +0100
Parents:   0661d03ebaab6cf1eff156a4dd203299d0385ae9
Branches:  PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=6186b676000f74af92b979382f605ed104b6a4bc

Log:
Add option to specific the expected separator character.

Changed paths:
  M  ext/filter/logical_filters.c
  M  ext/filter/tests/055.phpt


Diff:
diff --git a/ext/filter/logical_filters.c b/ext/filter/logical_filters.c
index fededcf..9b436a7 100644
--- a/ext/filter/logical_filters.c
+++ b/ext/filter/logical_filters.c
@@ -788,9 +788,18 @@ void php_filter_validate_mac(PHP_INPUT_FILTER_PARAM_DECL) 
/* {{{ */
 {
        char *input = Z_STRVAL_P(value);
        int input_len = Z_STRLEN_P(value);
-       int tokens, length, i, offset;
+       int tokens, length, i, offset, exp_separator_set, exp_separator_len;
        char separator;
+       char *exp_separator;
        long ret = 0;
+       zval **option_val;
+
+       FETCH_STRING_OPTION(exp_separator, "separator");
+
+       if (exp_separator_set && exp_separator_len != 1) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Separator must be 
exactly one character long");
+               RETURN_VALIDATION_FAILED;
+       }
 
        if (14 == input_len) {
                /* EUI-64 format: Four hexadecimal digits separated by dots. 
Less
@@ -813,6 +822,10 @@ void php_filter_validate_mac(PHP_INPUT_FILTER_PARAM_DECL) 
/* {{{ */
                RETURN_VALIDATION_FAILED;
        }
 
+       if (exp_separator_set && separator != exp_separator[0]) {
+               RETURN_VALIDATION_FAILED;
+       }
+
        /* Essentially what we now have is a set of tokens each consisting of
         * a hexadecimal number followed by a separator character. (With the
         * exception of the last token which does not have the separator.)
diff --git a/ext/filter/tests/055.phpt b/ext/filter/tests/055.phpt
index bf94f35..688dbb2 100644
--- a/ext/filter/tests/055.phpt
+++ b/ext/filter/tests/055.phpt
@@ -5,24 +5,32 @@ filter_var() and FILTER_VALIDATE_MAC
 --FILE--
 <?php
 $values = Array(
-       "01-23-45-67-89-ab",
-       "01-23-45-67-89-AB",
-       "01-23-45-67-89-aB",
-       "01:23:45:67:89:ab",
-       "01:23:45:67:89:AB",
-       "01:23:45:67:89:aB",
-       "01:23:45-67:89:aB",
-       "xx:23:45:67:89:aB",
-       "0123.4567.89ab",
+       array("01-23-45-67-89-ab", null),
+       array("01-23-45-67-89-ab", array("options" => array("separator" => 
"-"))),
+       array("01-23-45-67-89-ab", array("options" => array("separator" => 
"."))),
+       array("01-23-45-67-89-ab", array("options" => array("separator" => 
":"))),
+       array("01-23-45-67-89-AB", null),
+       array("01-23-45-67-89-aB", null),
+       array("01:23:45:67:89:ab", null),
+       array("01:23:45:67:89:AB", null),
+       array("01:23:45:67:89:aB", null),
+       array("01:23:45-67:89:aB", null),
+       array("xx:23:45:67:89:aB", null),
+       array("0123.4567.89ab", null),
+       array("01-23-45-67-89-ab", array("options" => array("separator" => 
"--"))),
+       array("01-23-45-67-89-ab", array("options" => array("separator" => 
""))),
 );
 foreach ($values as $value) {
-       var_dump(filter_var($value, FILTER_VALIDATE_MAC));
+       var_dump(filter_var($value[0], FILTER_VALIDATE_MAC, $value[1]));
 }
 
 echo "Done\n";
 ?>
---EXPECT--     
+--EXPECTF--    
 string(17) "01-23-45-67-89-ab"
+string(17) "01-23-45-67-89-ab"
+bool(false)
+bool(false)
 string(17) "01-23-45-67-89-AB"
 string(17) "01-23-45-67-89-aB"
 string(17) "01:23:45:67:89:ab"
@@ -31,4 +39,10 @@ string(17) "01:23:45:67:89:aB"
 bool(false)
 bool(false)
 string(14) "0123.4567.89ab"
+
+Warning: filter_var(): Separator must be exactly one character long in 
%s055.php on line %d
+bool(false)
+
+Warning: filter_var(): Separator must be exactly one character long in 
%s055.php on line %d
+bool(false)
 Done


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to