summaryrefslogtreecommitdiff
path: root/ext/filter/tests
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@baserock.org>2013-03-14 05:42:27 +0000
committer <>2013-04-03 16:25:08 +0000
commitc4dd7a1a684490673e25aaf4fabec5df138854c4 (patch)
tree4d57c44caae4480efff02b90b9be86f44bf25409 /ext/filter/tests
downloadphp2-master.tar.gz
Imported from /home/lorry/working-area/delta_php2/php-5.4.13.tar.bz2.HEADphp-5.4.13master
Diffstat (limited to 'ext/filter/tests')
-rw-r--r--ext/filter/tests/001.phpt8
-rw-r--r--ext/filter/tests/002.phpt11
-rw-r--r--ext/filter/tests/003.phpt22
-rw-r--r--ext/filter/tests/004.phpt26
-rw-r--r--ext/filter/tests/005.phpt23
-rw-r--r--ext/filter/tests/006.phpt12
-rw-r--r--ext/filter/tests/007.phpt64
-rw-r--r--ext/filter/tests/008.phpt57
-rw-r--r--ext/filter/tests/009.phpt32
-rw-r--r--ext/filter/tests/010.phpt64
-rw-r--r--ext/filter/tests/011.phpt54
-rw-r--r--ext/filter/tests/012.phpt18
-rw-r--r--ext/filter/tests/013.phpt74
-rw-r--r--ext/filter/tests/014.phpt70
-rw-r--r--ext/filter/tests/015.phpt89
-rw-r--r--ext/filter/tests/016.phpt46
-rw-r--r--ext/filter/tests/017.phpt26
-rw-r--r--ext/filter/tests/018.phpt54
-rw-r--r--ext/filter/tests/019.phpt22
-rw-r--r--ext/filter/tests/020.phpt20
-rw-r--r--ext/filter/tests/021.phpt46
-rw-r--r--ext/filter/tests/022.phpt22
-rw-r--r--ext/filter/tests/023.phpt22
-rw-r--r--ext/filter/tests/024.phpt20
-rw-r--r--ext/filter/tests/025.phpt26
-rw-r--r--ext/filter/tests/026.phpt32
-rw-r--r--ext/filter/tests/027.phpt32
-rw-r--r--ext/filter/tests/028.phpt37
-rw-r--r--ext/filter/tests/029.phpt105
-rw-r--r--ext/filter/tests/030.phpt64
-rw-r--r--ext/filter/tests/031.phpt58
-rw-r--r--ext/filter/tests/032.phpt57
-rw-r--r--ext/filter/tests/033.phpt31
-rw-r--r--ext/filter/tests/033_run.inc40
-rw-r--r--ext/filter/tests/034.phpt33
-rw-r--r--ext/filter/tests/035.phpt38
-rw-r--r--ext/filter/tests/036.phpt39
-rw-r--r--ext/filter/tests/037.phpt41
-rw-r--r--ext/filter/tests/038.phpt58
-rw-r--r--ext/filter/tests/039.phpt117
-rw-r--r--ext/filter/tests/040.phpt45
-rw-r--r--ext/filter/tests/041.phpt34
-rw-r--r--ext/filter/tests/042.phpt19
-rw-r--r--ext/filter/tests/043.phpt269
-rw-r--r--ext/filter/tests/044.phpt25
-rw-r--r--ext/filter/tests/045.phpt30
-rw-r--r--ext/filter/tests/046.phpt49
-rw-r--r--ext/filter/tests/047.phpt37
-rw-r--r--ext/filter/tests/048.phpt41
-rw-r--r--ext/filter/tests/049.phpt34
-rw-r--r--ext/filter/tests/050.phpt29
-rw-r--r--ext/filter/tests/051.phpt11
-rw-r--r--ext/filter/tests/052.phpt73
-rw-r--r--ext/filter/tests/053.phpt17
-rw-r--r--ext/filter/tests/054.phpt26
-rw-r--r--ext/filter/tests/PMOPB45.phpt11
-rw-r--r--ext/filter/tests/bug39846.phpt12
-rw-r--r--ext/filter/tests/bug42718-2.phpt18
-rw-r--r--ext/filter/tests/bug42718.phpt23
-rw-r--r--ext/filter/tests/bug44445.phpt12
-rw-r--r--ext/filter/tests/bug44779.phpt10
-rw-r--r--ext/filter/tests/bug46973.phpt16
-rw-r--r--ext/filter/tests/bug47435.phpt36
-rw-r--r--ext/filter/tests/bug47745.phpt13
-rw-r--r--ext/filter/tests/bug48762.phpt14
-rw-r--r--ext/filter/tests/bug49274.phpt10
-rw-r--r--ext/filter/tests/bug49510.phpt36
-rw-r--r--ext/filter/tests/bug50158.phpt25
-rw-r--r--ext/filter/tests/bug50632.phpt11
-rw-r--r--ext/filter/tests/bug51192.phpt13
-rw-r--r--ext/filter/tests/bug52209.phpt18
-rw-r--r--ext/filter/tests/bug52929.phpt18
-rw-r--r--ext/filter/tests/bug53037.phpt14
-rw-r--r--ext/filter/tests/bug53150.phpt28
-rw-r--r--ext/filter/tests/bug55478.phpt11
-rw-r--r--ext/filter/tests/bug7586.phpt55
-rw-r--r--ext/filter/tests/bug7715.phpt33
-rw-r--r--ext/filter/tests/bug7733.phpt29
-rw-r--r--ext/filter/tests/bug8315.phpt15
-rw-r--r--ext/filter/tests/callback_closure.phpt14
-rw-r--r--ext/filter/tests/callback_non_modified_var.phpt14
-rw-r--r--ext/filter/tests/filter_data.phpt83
82 files changed, 3041 insertions, 0 deletions
diff --git a/ext/filter/tests/001.phpt b/ext/filter/tests/001.phpt
new file mode 100644
index 0000000..2755a57
--- /dev/null
+++ b/ext/filter/tests/001.phpt
@@ -0,0 +1,8 @@
+--TEST--
+Simple GET test
+--GET--
+a=1
+--FILE--
+<?php echo $_GET['a']; ?>
+--EXPECT--
+1
diff --git a/ext/filter/tests/002.phpt b/ext/filter/tests/002.phpt
new file mode 100644
index 0000000..7136b25
--- /dev/null
+++ b/ext/filter/tests/002.phpt
@@ -0,0 +1,11 @@
+--TEST--
+GET test with 2 values and an empty one
+--GET--
+a=1&b=&c=3
+--FILE--
+<?php echo $_GET['a'];
+echo $_GET['b'];
+echo $_GET['c'];
+?>
+--EXPECT--
+13
diff --git a/ext/filter/tests/003.phpt b/ext/filter/tests/003.phpt
new file mode 100644
index 0000000..43e6cd9
--- /dev/null
+++ b/ext/filter/tests/003.phpt
@@ -0,0 +1,22 @@
+--TEST--
+GET/POST/REQUEST Test
+--POST--
+d=4&e=5
+--GET--
+a=1&b=&c=3
+--FILE--
+<?php echo $_GET['a'];
+echo $_GET['b'];
+echo $_GET['c'];
+echo $_POST['d'];
+echo $_POST['e'];
+echo "\n";
+echo $_REQUEST['a'];
+echo $_REQUEST['b'];
+echo $_REQUEST['c'];
+echo $_REQUEST['d'];
+echo $_REQUEST['e'];
+?>
+--EXPECT--
+1345
+1345
diff --git a/ext/filter/tests/004.phpt b/ext/filter/tests/004.phpt
new file mode 100644
index 0000000..b899124
--- /dev/null
+++ b/ext/filter/tests/004.phpt
@@ -0,0 +1,26 @@
+--TEST--
+GET/POST/REQUEST Test with filtered data
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+filter.default=special_chars
+--POST--
+d="quotes"&e=\slash
+--GET--
+a=O'Henry&b=&c=<b>Bold</b>
+--FILE--
+<?php echo $_GET['a'];
+echo $_GET['b'];
+echo $_GET['c'];
+echo $_POST['d'];
+echo $_POST['e'];
+echo "\n";
+echo $_REQUEST['a'];
+echo $_REQUEST['b'];
+echo $_REQUEST['c'];
+echo $_REQUEST['d'];
+echo $_REQUEST['e'];
+?>
+--EXPECT--
+O&#39;Henry&#60;b&#62;Bold&#60;/b&#62;&#34;quotes&#34;\slash
+O&#39;Henry&#60;b&#62;Bold&#60;/b&#62;&#34;quotes&#34;\slash
diff --git a/ext/filter/tests/005.phpt b/ext/filter/tests/005.phpt
new file mode 100644
index 0000000..b3735f5
--- /dev/null
+++ b/ext/filter/tests/005.phpt
@@ -0,0 +1,23 @@
+--TEST--
+GET/REQUEST Test with fifa example data
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+filter.default=stripped
+--GET--
+id=f03_photos&pgurl=http%3A//fifaworldcup.yahoo.com/03/en/photozone/index.html
+--FILE--
+<?php
+echo $_GET['id'];
+echo "\n";
+echo $_GET['pgurl'];
+echo "\n";
+echo $_REQUEST['id'];
+echo "\n";
+echo $_REQUEST['pgurl'];
+?>
+--EXPECT--
+f03_photos
+http://fifaworldcup.yahoo.com/03/en/photozone/index.html
+f03_photos
+http://fifaworldcup.yahoo.com/03/en/photozone/index.html
diff --git a/ext/filter/tests/006.phpt b/ext/filter/tests/006.phpt
new file mode 100644
index 0000000..9439e47
--- /dev/null
+++ b/ext/filter/tests/006.phpt
@@ -0,0 +1,12 @@
+--TEST--
+filter() test
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--POST--
+foo=<b>abc</b>
+--FILE--
+<?php
+echo filter_input(INPUT_POST, 'foo', FILTER_SANITIZE_STRIPPED);
+?>
+--EXPECT--
+abc
diff --git a/ext/filter/tests/007.phpt b/ext/filter/tests/007.phpt
new file mode 100644
index 0000000..96e0b5f
--- /dev/null
+++ b/ext/filter/tests/007.phpt
@@ -0,0 +1,64 @@
+--TEST--
+filter_has_var()
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--GET--
+a=qwe&abc=<a>href</a>
+--POST--
+b=qwe&bbc=<a>href</a>
+--FILE--
+<?php
+
+var_dump(filter_has_var(INPUT_GET, "a"));
+var_dump(filter_has_var(INPUT_GET, "abc"));
+var_dump(filter_has_var(INPUT_GET, "nonex"));
+var_dump(filter_has_var(INPUT_GET, " "));
+var_dump(filter_has_var(INPUT_GET, ""));
+var_dump(filter_has_var(INPUT_GET, array()));
+
+var_dump(filter_has_var(INPUT_POST, "b"));
+var_dump(filter_has_var(INPUT_POST, "bbc"));
+var_dump(filter_has_var(INPUT_POST, "nonex"));
+var_dump(filter_has_var(INPUT_POST, " "));
+var_dump(filter_has_var(INPUT_POST, ""));
+var_dump(filter_has_var(INPUT_POST, array()));
+
+var_dump(filter_has_var(-1, ""));
+var_dump(filter_has_var("", ""));
+var_dump(filter_has_var(array(), array()));
+var_dump(filter_has_var(array(), ""));
+var_dump(filter_has_var("", array()));
+
+echo "Done\n";
+?>
+--EXPECTF--
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+
+Warning: filter_has_var() expects parameter 2 to be string, array given in %s007.php on line %d
+bool(false)
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+
+Warning: filter_has_var() expects parameter 2 to be string, array given in %s007.php on line %d
+bool(false)
+bool(false)
+
+Warning: filter_has_var() expects parameter 1 to be long, string given in %s007.php on line %d
+bool(false)
+
+Warning: filter_has_var() expects parameter 1 to be long, array given in %s007.php on line %d
+bool(false)
+
+Warning: filter_has_var() expects parameter 1 to be long, array given in %s007.php on line %d
+bool(false)
+
+Warning: filter_has_var() expects parameter 1 to be long, string given in %s007.php on line %d
+bool(false)
+Done
diff --git a/ext/filter/tests/008.phpt b/ext/filter/tests/008.phpt
new file mode 100644
index 0000000..8a43405
--- /dev/null
+++ b/ext/filter/tests/008.phpt
@@ -0,0 +1,57 @@
+--TEST--
+filter_list()
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_list());
+var_dump(filter_list(array()));
+
+echo "Done\n";
+?>
+--EXPECTF--
+array(19) {
+ [0]=>
+ string(3) "int"
+ [1]=>
+ string(7) "boolean"
+ [2]=>
+ string(5) "float"
+ [3]=>
+ string(15) "validate_regexp"
+ [4]=>
+ string(12) "validate_url"
+ [5]=>
+ string(14) "validate_email"
+ [6]=>
+ string(11) "validate_ip"
+ [7]=>
+ string(6) "string"
+ [8]=>
+ string(8) "stripped"
+ [9]=>
+ string(7) "encoded"
+ [10]=>
+ string(13) "special_chars"
+ [11]=>
+ string(18) "full_special_chars"
+ [12]=>
+ string(10) "unsafe_raw"
+ [13]=>
+ string(5) "email"
+ [14]=>
+ string(3) "url"
+ [15]=>
+ string(10) "number_int"
+ [16]=>
+ string(12) "number_float"
+ [17]=>
+ string(12) "magic_quotes"
+ [18]=>
+ string(8) "callback"
+}
+
+Warning: filter_list() expects exactly 0 parameters, 1 given in %s on line %d
+NULL
+Done
diff --git a/ext/filter/tests/009.phpt b/ext/filter/tests/009.phpt
new file mode 100644
index 0000000..d09f996
--- /dev/null
+++ b/ext/filter/tests/009.phpt
@@ -0,0 +1,32 @@
+--TEST--
+filter_id()
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_id("stripped"));
+var_dump(filter_id("string"));
+var_dump(filter_id("url"));
+var_dump(filter_id("int"));
+var_dump(filter_id("none"));
+var_dump(filter_id(array()));
+var_dump(filter_id(-1));
+var_dump(filter_id(0,0,0));
+
+echo "Done\n";
+?>
+--EXPECTF--
+int(513)
+int(513)
+int(518)
+int(257)
+bool(false)
+
+Warning: filter_id() expects parameter 1 to be string, array given in %s on line %d
+NULL
+bool(false)
+
+Warning: filter_id() expects exactly 1 parameter, 3 given in %s on line %d
+NULL
+Done
diff --git a/ext/filter/tests/010.phpt b/ext/filter/tests/010.phpt
new file mode 100644
index 0000000..e868c10
--- /dev/null
+++ b/ext/filter/tests/010.phpt
@@ -0,0 +1,64 @@
+--TEST--
+filter_var()
+--INI--
+precision=14
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var(array(1,"1","", "-23234", "text", "asdf234asdfgs", array()), FILTER_VALIDATE_INT, FILTER_REQUIRE_ARRAY));
+var_dump(filter_var(array(1.2,"1.7","", "-23234.123", "text", "asdf234.2asdfgs", array()), FILTER_VALIDATE_FLOAT, FILTER_REQUIRE_ARRAY));
+var_dump(filter_var(1, array()));
+var_dump(filter_var(1, FILTER_SANITIZE_STRING, 1));
+var_dump(filter_var(1, FILTER_SANITIZE_STRING, 0));
+var_dump(filter_var(1, FILTER_SANITIZE_STRING, array()));
+var_dump(filter_var(1, -1, array(123)));
+var_dump(filter_var(1, 0, array()));
+
+echo "Done\n";
+?>
+--EXPECTF--
+array(7) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(1)
+ [2]=>
+ bool(false)
+ [3]=>
+ int(-23234)
+ [4]=>
+ bool(false)
+ [5]=>
+ bool(false)
+ [6]=>
+ array(0) {
+ }
+}
+array(7) {
+ [0]=>
+ float(1.2)
+ [1]=>
+ float(1.7)
+ [2]=>
+ bool(false)
+ [3]=>
+ float(-23234.123)
+ [4]=>
+ bool(false)
+ [5]=>
+ bool(false)
+ [6]=>
+ array(0) {
+ }
+}
+
+Warning: filter_var() expects parameter 2 to be long, array given in %s on line %d
+NULL
+string(1) "1"
+string(1) "1"
+string(1) "1"
+bool(false)
+bool(false)
+Done
diff --git a/ext/filter/tests/011.phpt b/ext/filter/tests/011.phpt
new file mode 100644
index 0000000..6a9bf1f
--- /dev/null
+++ b/ext/filter/tests/011.phpt
@@ -0,0 +1,54 @@
+--TEST--
+input_get()
+--INI--
+precision=14
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--GET--
+a=<b>test</b>&b=http://example.com
+--POST--
+c=<p>string</p>&d=12345.7
+--FILE--
+<?php
+ini_set('html_errors', false);
+var_dump(filter_input(INPUT_GET, "a", FILTER_SANITIZE_STRIPPED));
+var_dump(filter_input(INPUT_GET, "b", FILTER_SANITIZE_URL));
+var_dump(filter_input(INPUT_GET, "a", FILTER_SANITIZE_SPECIAL_CHARS, array(1,2,3,4,5)));
+var_dump(filter_input(INPUT_GET, "b", FILTER_VALIDATE_FLOAT, new stdClass));
+var_dump(filter_input(INPUT_POST, "c", FILTER_SANITIZE_STRIPPED, array(5,6,7,8)));
+var_dump(filter_input(INPUT_POST, "d", FILTER_VALIDATE_FLOAT));
+var_dump(filter_input(INPUT_POST, "c", FILTER_SANITIZE_SPECIAL_CHARS));
+var_dump(filter_input(INPUT_POST, "d", FILTER_VALIDATE_INT));
+
+var_dump(filter_var(new stdClass, "d"));
+
+var_dump(filter_input(INPUT_POST, "c", "", ""));
+var_dump(filter_var("", "", "", "", ""));
+var_dump(filter_var(0, 0, 0, 0, 0));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(4) "test"
+string(18) "http://example.com"
+string(27) "&#60;b&#62;test&#60;/b&#62;"
+
+Notice: Object of class stdClass could not be converted to int in %s011.php on line %d
+bool(false)
+string(6) "string"
+float(12345.7)
+string(29) "&#60;p&#62;string&#60;/p&#62;"
+bool(false)
+
+Warning: filter_var() expects parameter 2 to be long, string given in %s011.php on line %d
+NULL
+
+Warning: filter_input() expects parameter 3 to be long, string given in %s011.php on line %d
+NULL
+
+Warning: filter_var() expects at most 3 parameters, 5 given in %s011.php on line %d
+NULL
+
+Warning: filter_var() expects at most 3 parameters, 5 given in %s011.php on line %d
+NULL
+Done
diff --git a/ext/filter/tests/012.phpt b/ext/filter/tests/012.phpt
new file mode 100644
index 0000000..9a8ead9
--- /dev/null
+++ b/ext/filter/tests/012.phpt
@@ -0,0 +1,18 @@
+--TEST--
+filter_input()
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_input(INPUT_GET, "test"));
+var_dump(filter_input(INPUT_POST, "test"));
+var_dump(filter_input(INPUT_COOKIE, ""));
+
+echo "Done\n";
+?>
+--EXPECT--
+NULL
+NULL
+NULL
+Done
diff --git a/ext/filter/tests/013.phpt b/ext/filter/tests/013.phpt
new file mode 100644
index 0000000..421c5d5
--- /dev/null
+++ b/ext/filter/tests/013.phpt
@@ -0,0 +1,74 @@
+--TEST--
+filter_var() and flags
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var(" 234", FILTER_VALIDATE_INT));
+var_dump(filter_var("234 ", FILTER_VALIDATE_INT));
+var_dump(filter_var(" 234 ", FILTER_VALIDATE_INT));
+var_dump(filter_var("0xff", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_var("0Xff", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_var("0xFF", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_var("0XFF", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_var("07", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL)));
+var_dump(filter_var("0xff0000", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_var("0666", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL)));
+var_dump(filter_var("08", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL)));
+var_dump(filter_var("00", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL)));
+var_dump(filter_var("000", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL)));
+
+var_dump(filter_var("-0xff", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_var("-0Xff", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_var("-0xFF", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_var("-0XFF", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_var("-07", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL)));
+var_dump(filter_var("-0xff0000", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+var_dump(filter_var("-0666", FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL)));
+
+var_dump(filter_var("6", FILTER_VALIDATE_INT, array("options" => array("min_range"=>1, "max_range"=>7))));
+var_dump(filter_var("6", FILTER_VALIDATE_INT, array("options" => array("min_range"=>0, "max_range"=>5))));
+var_dump(filter_var(-1, FILTER_VALIDATE_INT, array("options" => array("min_range"=>1, "max_range"=>7))));
+var_dump(filter_var(-1, FILTER_VALIDATE_INT, array("options" => array("min_range"=>-4, "max_range"=>7))));
+
+var_dump(filter_var("", FILTER_VALIDATE_INT, array("options" => array("min_range"=>-4, "max_range"=>7))));
+var_dump(filter_var("", FILTER_VALIDATE_INT, array("options" => array("min_range"=>2, "max_range"=>7))));
+var_dump(filter_var("", FILTER_VALIDATE_INT, array("options" => array("min_range"=>-5, "max_range"=>-3))));
+var_dump(filter_var(345, FILTER_VALIDATE_INT, array("options" => array("min_range"=>500, "max_range"=>100))));
+var_dump(filter_var("0ff", FILTER_VALIDATE_INT));
+var_dump(filter_var("010", FILTER_VALIDATE_INT));
+
+echo "Done\n";
+?>
+--EXPECT--
+int(234)
+int(234)
+int(234)
+int(255)
+int(255)
+int(255)
+int(255)
+int(7)
+int(16711680)
+int(438)
+bool(false)
+int(0)
+int(0)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+int(6)
+bool(false)
+bool(false)
+int(-1)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+Done
diff --git a/ext/filter/tests/014.phpt b/ext/filter/tests/014.phpt
new file mode 100644
index 0000000..8837457
--- /dev/null
+++ b/ext/filter/tests/014.phpt
@@ -0,0 +1,70 @@
+--TEST--
+filter_var() and FILTER_VALIDATE_BOOLEAN
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+class test {
+
+ function __toString() {
+ return "blah";
+ }
+}
+
+$t = new test;
+
+var_dump(filter_var("no", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var(NULL, FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var($t, FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var(array(1,2,3,0,array("", "123")), FILTER_VALIDATE_BOOLEAN, FILTER_REQUIRE_ARRAY));
+var_dump(filter_var("yes", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var("true", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var("false", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var("off", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var("on", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var("0", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var("1", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var("NONE", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var("", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var(-1, FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var("000000", FILTER_VALIDATE_BOOLEAN));
+var_dump(filter_var("111111", FILTER_VALIDATE_BOOLEAN));
+
+
+echo "Done\n";
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(false)
+array(5) {
+ [0]=>
+ bool(true)
+ [1]=>
+ bool(false)
+ [2]=>
+ bool(false)
+ [3]=>
+ bool(false)
+ [4]=>
+ array(2) {
+ [0]=>
+ bool(false)
+ [1]=>
+ bool(false)
+ }
+}
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+Done
diff --git a/ext/filter/tests/015.phpt b/ext/filter/tests/015.phpt
new file mode 100644
index 0000000..476615a
--- /dev/null
+++ b/ext/filter/tests/015.phpt
@@ -0,0 +1,89 @@
+--TEST--
+filter_var() and FILTER_VALIDATE_URL
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+$values = Array(
+'http://example.com/index.html',
+'http://www.example.com/index.php',
+'http://www.example/img/test.png',
+'http://www.example/img/dir/',
+'http://www.example/img/dir',
+'http//www.example/wrong/url/',
+'http:/www.example',
+'file:///tmp/test.c',
+'ftp://ftp.example.com/tmp/',
+'/tmp/test.c',
+'/',
+'http://',
+'http:/',
+'http:',
+'http',
+'',
+-1,
+array(),
+'mailto:foo@bar.com',
+'news:news.php.net',
+'file://foo/bar',
+"http://\r\n/bar",
+"http://example.com:qq",
+"http://example.com:-2",
+"http://example.com:65536",
+"http://example.com:65537",
+);
+foreach ($values as $value) {
+ var_dump(filter_var($value, FILTER_VALIDATE_URL));
+}
+
+
+var_dump(filter_var("qwe", FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED));
+var_dump(filter_var("http://qwe", FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED));
+var_dump(filter_var("http://", FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
+var_dump(filter_var("/tmp/test", FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
+var_dump(filter_var("http://www.example.com", FILTER_VALIDATE_URL, FILTER_FLAG_HOST_REQUIRED));
+var_dump(filter_var("http://www.example.com", FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));
+var_dump(filter_var("http://www.example.com/path/at/the/server/", FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED));
+var_dump(filter_var("http://www.example.com/index.html", FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED));
+var_dump(filter_var("http://www.example.com/index.php?a=b&c=d", FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(29) "http://example.com/index.html"
+string(32) "http://www.example.com/index.php"
+string(31) "http://www.example/img/test.png"
+string(27) "http://www.example/img/dir/"
+string(26) "http://www.example/img/dir"
+bool(false)
+bool(false)
+string(18) "file:///tmp/test.c"
+string(26) "ftp://ftp.example.com/tmp/"
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+string(18) "mailto:foo@bar.com"
+string(17) "news:news.php.net"
+string(14) "file://foo/bar"
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+string(10) "http://qwe"
+bool(false)
+bool(false)
+string(22) "http://www.example.com"
+bool(false)
+string(42) "http://www.example.com/path/at/the/server/"
+bool(false)
+string(40) "http://www.example.com/index.php?a=b&c=d"
+Done
diff --git a/ext/filter/tests/016.phpt b/ext/filter/tests/016.phpt
new file mode 100644
index 0000000..c678344
--- /dev/null
+++ b/ext/filter/tests/016.phpt
@@ -0,0 +1,46 @@
+--TEST--
+filter_var() and FILTER_VALIDATE_EMAIL
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$values = Array(
+'a@b.c',
+'abuse@example.com',
+'test!.!@#$%^&*@example.com',
+'test@@#$%^&*())).com',
+'test@.com',
+'test@com',
+'@',
+'[]()/@example.com',
+'QWERTYUIOPASDFGHJKLZXCVBNM@QWERTYUIOPASDFGHJKLZXCVBNM.NET',
+'e.x.a.m.p.l.e.@example.com',
+'firstname.lastname@employee.2something.com',
+'-@foo.com',
+'foo@-.com',
+'foo@bar.123',
+'foo@bar.-'
+);
+foreach ($values as $value) {
+ var_dump(filter_var($value, FILTER_VALIDATE_EMAIL));
+}
+
+echo "Done\n";
+?>
+--EXPECT--
+string(5) "a@b.c"
+string(17) "abuse@example.com"
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+string(57) "QWERTYUIOPASDFGHJKLZXCVBNM@QWERTYUIOPASDFGHJKLZXCVBNM.NET"
+bool(false)
+string(42) "firstname.lastname@employee.2something.com"
+string(9) "-@foo.com"
+bool(false)
+bool(false)
+bool(false)
+Done
diff --git a/ext/filter/tests/017.phpt b/ext/filter/tests/017.phpt
new file mode 100644
index 0000000..518ee79
--- /dev/null
+++ b/ext/filter/tests/017.phpt
@@ -0,0 +1,26 @@
+--TEST--
+filter_var() and FILTER_VALIDATE_REGEXP
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("data", FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>'/.*/'))));
+var_dump(filter_var("data", FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>'/^b(.*)/'))));
+var_dump(filter_var("data", FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>'/^d(.*)/'))));
+var_dump(filter_var("data", FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>'/blah/'))));
+var_dump(filter_var("data", FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>'/\[/'))));
+var_dump(filter_var("data", FILTER_VALIDATE_REGEXP));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(4) "data"
+bool(false)
+string(4) "data"
+bool(false)
+bool(false)
+
+Warning: filter_var(): 'regexp' option missing in %s on line %d
+bool(false)
+Done
diff --git a/ext/filter/tests/018.phpt b/ext/filter/tests/018.phpt
new file mode 100644
index 0000000..af52b2e
--- /dev/null
+++ b/ext/filter/tests/018.phpt
@@ -0,0 +1,54 @@
+--TEST--
+filter_var() and FILTER_VALIDATE_IP
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var("192.168.0.1", FILTER_VALIDATE_IP));
+var_dump(filter_var("192.168.0.1.1", FILTER_VALIDATE_IP));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP));
+var_dump(filter_var("fe00::0", FILTER_VALIDATE_IP));
+var_dump(filter_var("::123456", FILTER_VALIDATE_IP));
+var_dump(filter_var("::1::b", FILTER_VALIDATE_IP));
+var_dump(filter_var("127.0.0.1", FILTER_VALIDATE_IP));
+var_dump(filter_var("192.168.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE));
+var_dump(filter_var("192.0.34.166", FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE));
+var_dump(filter_var("127.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("192.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("192.0.34.166", FILTER_VALIDATE_IP));
+var_dump(filter_var("256.1237.123.1", FILTER_VALIDATE_IP));
+var_dump(filter_var("255.255.255.255", FILTER_VALIDATE_IP));
+var_dump(filter_var("255.255.255.255", FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("", FILTER_VALIDATE_IP));
+var_dump(filter_var(-1, FILTER_VALIDATE_IP));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV4));
+var_dump(filter_var("127.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("127.0.0.1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV4));
+echo "Done\n";
+?>
+--EXPECT--
+string(11) "192.168.0.1"
+bool(false)
+string(3) "::1"
+string(7) "fe00::0"
+bool(false)
+bool(false)
+string(9) "127.0.0.1"
+bool(false)
+string(12) "192.0.34.166"
+bool(false)
+string(9) "192.0.0.1"
+string(12) "192.0.34.166"
+bool(false)
+string(15) "255.255.255.255"
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+string(3) "::1"
+bool(false)
+string(9) "127.0.0.1"
+Done
diff --git a/ext/filter/tests/019.phpt b/ext/filter/tests/019.phpt
new file mode 100644
index 0000000..1665181
--- /dev/null
+++ b/ext/filter/tests/019.phpt
@@ -0,0 +1,22 @@
+--TEST--
+filter_var() & FILTER_VALIDATE_IP and weird data
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("....", FILTER_VALIDATE_IP));
+var_dump(filter_var("...", FILTER_VALIDATE_IP));
+var_dump(filter_var("..", FILTER_VALIDATE_IP));
+var_dump(filter_var(".", FILTER_VALIDATE_IP));
+var_dump(filter_var("1.1.1.1", FILTER_VALIDATE_IP));
+
+echo "Done\n";
+?>
+--EXPECT--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+string(7) "1.1.1.1"
+Done
diff --git a/ext/filter/tests/020.phpt b/ext/filter/tests/020.phpt
new file mode 100644
index 0000000..c2ab609
--- /dev/null
+++ b/ext/filter/tests/020.phpt
@@ -0,0 +1,20 @@
+--TEST--
+filter_var() and FILTER_SANITIZE_MAGIC_QUOTES
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("test'asd'asd'' asd\'\"asdfasdf", FILTER_SANITIZE_MAGIC_QUOTES));
+var_dump(filter_var("'", FILTER_SANITIZE_MAGIC_QUOTES));
+var_dump(filter_var("", FILTER_SANITIZE_MAGIC_QUOTES));
+var_dump(filter_var(-1, FILTER_SANITIZE_MAGIC_QUOTES));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(36) "test\'asd\'asd\'\' asd\\\'\"asdfasdf"
+string(2) "\'"
+string(0) ""
+string(2) "-1"
+Done
diff --git a/ext/filter/tests/021.phpt b/ext/filter/tests/021.phpt
new file mode 100644
index 0000000..994dac2
--- /dev/null
+++ b/ext/filter/tests/021.phpt
@@ -0,0 +1,46 @@
+--TEST--
+filter_var() and FILTER_SANITIZE_NUMBER_*
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("qwertyu123456dfghj", FILTER_SANITIZE_NUMBER_INT));
+var_dump(filter_var("asd123123.asd123.23", FILTER_SANITIZE_NUMBER_INT));
+var_dump(filter_var("123,23", FILTER_SANITIZE_NUMBER_INT));
+var_dump(filter_var("", FILTER_SANITIZE_NUMBER_INT));
+var_dump(filter_var("0", FILTER_SANITIZE_NUMBER_INT));
+var_dump(filter_var("asd123.2asd", FILTER_SANITIZE_NUMBER_INT));
+var_dump(filter_var("qwertyuiop", FILTER_SANITIZE_NUMBER_INT));
+var_dump(filter_var("123.4", FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+var_dump(filter_var("123,4", FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+var_dump(filter_var("123.4", FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_THOUSAND));
+var_dump(filter_var("123,4", FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_THOUSAND));
+var_dump(filter_var("123.4e", FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_SCIENTIFIC));
+var_dump(filter_var("123,4E", FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_SCIENTIFIC));
+var_dump(filter_var("qwe123,4qwe", FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+var_dump(filter_var("werty65456.34", FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+var_dump(filter_var("234.56fsfd", FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+var_dump(filter_var("", FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(6) "123456"
+string(11) "12312312323"
+string(5) "12323"
+string(0) ""
+string(1) "0"
+string(4) "1232"
+string(0) ""
+string(5) "123.4"
+string(4) "1234"
+string(4) "1234"
+string(5) "123,4"
+string(5) "1234e"
+string(5) "1234E"
+string(4) "1234"
+string(8) "65456.34"
+string(6) "234.56"
+string(0) ""
+Done
diff --git a/ext/filter/tests/022.phpt b/ext/filter/tests/022.phpt
new file mode 100644
index 0000000..649c6e4
--- /dev/null
+++ b/ext/filter/tests/022.phpt
@@ -0,0 +1,22 @@
+--TEST--
+filter_var() and FILTER_SANITIZE_EMAIL
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("a@b.c", FILTER_SANITIZE_EMAIL));
+var_dump(filter_var("a[!@#$%^&*()@a@#$%^&*(.com@#$%^&*(", FILTER_SANITIZE_EMAIL));
+var_dump(filter_var("white space here \ \ \" som more", FILTER_SANITIZE_EMAIL));
+var_dump(filter_var("", FILTER_SANITIZE_EMAIL));
+var_dump(filter_var("123456789000000", FILTER_SANITIZE_EMAIL));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(5) "a@b.c"
+string(30) "a[!@#$%^&*@a@#$%^&*.com@#$%^&*"
+string(21) "whitespaceheresommore"
+string(0) ""
+string(15) "123456789000000"
+Done
diff --git a/ext/filter/tests/023.phpt b/ext/filter/tests/023.phpt
new file mode 100644
index 0000000..f8d4137
--- /dev/null
+++ b/ext/filter/tests/023.phpt
@@ -0,0 +1,22 @@
+--TEST--
+filter_var() and FILTER_UNSAFE_RAW
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("}\"<p>test para</p>", FILTER_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP));
+var_dump(filter_var("a[!@#<b>$%^&*()@a@#$%^&*(.<br>com@#$%^&*(", FILTER_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP));
+var_dump(filter_var("white space here \ \ \" some more", FILTER_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP));
+var_dump(filter_var("", FILTER_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP));
+var_dump(filter_var(" 123456789000000 <qwertyuiop> ", FILTER_UNSAFE_RAW, FILTER_FLAG_ENCODE_AMP));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(18) "}"<p>test para</p>"
+string(53) "a[!@#<b>$%^&#38;*()@a@#$%^&#38;*(.<br>com@#$%^&#38;*("
+string(32) "white space here \ \ " some more"
+string(0) ""
+string(48) " 123456789000000 <qwertyuiop> "
+Done
diff --git a/ext/filter/tests/024.phpt b/ext/filter/tests/024.phpt
new file mode 100644
index 0000000..7d7349f
--- /dev/null
+++ b/ext/filter/tests/024.phpt
@@ -0,0 +1,20 @@
+--TEST--
+filter_var() and FILTER_SANITIZE_ENCODED
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("\"<br>blah</ph>", FILTER_SANITIZE_ENCODED));
+var_dump(filter_var("", FILTER_SANITIZE_ENCODED));
+var_dump(filter_var(" text here ", FILTER_SANITIZE_ENCODED));
+var_dump(filter_var("!@#$%^&*()QWERTYUIOP{ASDFGHJKL:\"ZXCVBNM<>?", FILTER_SANITIZE_ENCODED));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(26) "%22%3Cbr%3Eblah%3C%2Fph%3E"
+string(0) ""
+string(23) "%20%20text%20here%20%20"
+string(74) "%21%40%23%24%25%5E%26%2A%28%29QWERTYUIOP%7BASDFGHJKL%3A%22ZXCVBNM%3C%3E%3F"
+Done
diff --git a/ext/filter/tests/025.phpt b/ext/filter/tests/025.phpt
new file mode 100644
index 0000000..df8c373
--- /dev/null
+++ b/ext/filter/tests/025.phpt
@@ -0,0 +1,26 @@
+--TEST--
+filter_var() and FILTER_SANITIZE_STRING
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("", FILTER_SANITIZE_STRING));
+var_dump(filter_var("<>", FILTER_SANITIZE_STRING));
+var_dump(filter_var("<>!@#$%^&*()'\"", FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES));
+var_dump(filter_var("<>!@#$%^&*()'\"", FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_AMP));
+var_dump(filter_var("<>`1234567890", FILTER_SANITIZE_STRING));
+var_dump(filter_var("`123`", FILTER_SANITIZE_STRING));
+var_dump(filter_var(".", FILTER_SANITIZE_STRING));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(0) ""
+string(0) ""
+string(12) "!@#$%^&*()'""
+string(24) "!@#$%^&#38;*()&#39;&#34;"
+string(11) "`1234567890"
+string(5) "`123`"
+string(1) "."
+Done
diff --git a/ext/filter/tests/026.phpt b/ext/filter/tests/026.phpt
new file mode 100644
index 0000000..38d15e7
--- /dev/null
+++ b/ext/filter/tests/026.phpt
@@ -0,0 +1,32 @@
+--TEST--
+filter_var() and FILTER_SANITIZE_STRIPPED
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("<p>Let me <font color=\"#000000\">see</font> you <br /><b>Stripped</b> down to the bone</p>", FILTER_SANITIZE_STRIPPED));
+var_dump(filter_var("!@#$%^&*()><<>+_\"'<br><p /><li />", FILTER_SANITIZE_STRIPPED));
+var_dump(filter_var("", FILTER_SANITIZE_STRIPPED));
+
+var_dump(filter_var("<p>Let me <font color=\"#000000\">see</font> you <br /><b>Stripped</b> down to the bone</p>", FILTER_SANITIZE_STRIPPED, FILTER_FLAG_STRIP_LOW));
+var_dump(filter_var("!@#$%^&*()><<>+_\"'<br><p /><li />", FILTER_SANITIZE_STRIPPED, FILTER_FLAG_STRIP_LOW));
+var_dump(filter_var("", FILTER_SANITIZE_STRIPPED, FILTER_FLAG_STRIP_LOW));
+
+var_dump(filter_var("<p>Let me <font color=\"#000000\">see</font> you <br /><b>Stripped</b> down to the bone</p>", FILTER_SANITIZE_STRIPPED, FILTER_FLAG_STRIP_HIGH));
+var_dump(filter_var("!@#$%^&*()><<>+_\"'<br><p /><li />", FILTER_SANITIZE_STRIPPED, FILTER_FLAG_STRIP_HIGH));
+var_dump(filter_var("", FILTER_SANITIZE_STRIPPED, FILTER_FLAG_STRIP_HIGH));
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(40) "Let me see you Stripped down to the bone"
+string(11) "!@#$%^&*()>"
+string(0) ""
+string(40) "Let me see you Stripped down to the bone"
+string(11) "!@#$%^&*()>"
+string(0) ""
+string(40) "Let me see you Stripped down to the bone"
+string(11) "!@#$%^&*()>"
+string(0) ""
+Done
diff --git a/ext/filter/tests/027.phpt b/ext/filter/tests/027.phpt
new file mode 100644
index 0000000..759030a
--- /dev/null
+++ b/ext/filter/tests/027.phpt
@@ -0,0 +1,32 @@
+--TEST--
+filter_var() and FILTER_SANITIZE_ENCODED
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FILTER_SANITIZE_ENCODED));
+var_dump(filter_var("<data&sons>", FILTER_SANITIZE_ENCODED));
+var_dump(filter_var("", FILTER_SANITIZE_ENCODED));
+
+var_dump(filter_var("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FILTER_SANITIZE_ENCODED, FILTER_FLAG_ENCODE_LOW));
+var_dump(filter_var("<data&sons>", FILTER_SANITIZE_ENCODED, FILTER_FLAG_ENCODE_LOW));
+var_dump(filter_var("", FILTER_SANITIZE_ENCODED, FILTER_FLAG_ENCODE_LOW));
+
+var_dump(filter_var("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FILTER_SANITIZE_ENCODED, FILTER_FLAG_ENCODE_HIGH));
+var_dump(filter_var("<data&sons>", FILTER_SANITIZE_ENCODED, FILTER_FLAG_ENCODE_HIGH));
+var_dump(filter_var("", FILTER_SANITIZE_ENCODED, FILTER_FLAG_ENCODE_HIGH));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(75) "%3F%3E%3C%21%40%23%24%25%5E%26%2A%28%29%7D%7B%7EQwertyuilfdsasdfgmnbvcxcvbn"
+string(17) "%3Cdata%26sons%3E"
+string(0) ""
+string(75) "%3F%3E%3C%21%40%23%24%25%5E%26%2A%28%29%7D%7B%7EQwertyuilfdsasdfgmnbvcxcvbn"
+string(17) "%3Cdata%26sons%3E"
+string(0) ""
+string(75) "%3F%3E%3C%21%40%23%24%25%5E%26%2A%28%29%7D%7B%7EQwertyuilfdsasdfgmnbvcxcvbn"
+string(17) "%3Cdata%26sons%3E"
+string(0) ""
+Done
diff --git a/ext/filter/tests/028.phpt b/ext/filter/tests/028.phpt
new file mode 100644
index 0000000..c0ab16f
--- /dev/null
+++ b/ext/filter/tests/028.phpt
@@ -0,0 +1,37 @@
+--TEST--
+filter_var() and FILTER_SANITIZE_SPECIAL_CHARS
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FILTER_SANITIZE_SPECIAL_CHARS));
+var_dump(filter_var("<data&sons>", FILTER_SANITIZE_SPECIAL_CHARS));
+var_dump(filter_var("", FILTER_SANITIZE_SPECIAL_CHARS));
+
+var_dump(filter_var("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_ENCODE_LOW));
+var_dump(filter_var("<data&sons>", FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_ENCODE_LOW));
+var_dump(filter_var("", FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_ENCODE_LOW));
+
+var_dump(filter_var("?><!@#$%^&*()}{~Qwertyuilfdsasdfgmnbvcxcvbn", FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_ENCODE_HIGH));
+var_dump(filter_var("<data&sons>", FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_ENCODE_HIGH));
+var_dump(filter_var("", FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_ENCODE_HIGH));
+
+var_dump(filter_var("ะบะธั€ะธะปะปะธั†ะฐ", FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_ENCODE_HIGH));
+var_dump(filter_var("ะบะธั€ะธะปะปะธั†ะฐ", FILTER_SANITIZE_SPECIAL_CHARS, FILTER_FLAG_ENCODE_LOW));
+
+echo "Done\n";
+?>
+--EXPECT--
+string(55) "?&#62;&#60;!@#$%^&#38;*()}{~Qwertyuilfdsasdfgmnbvcxcvbn"
+string(23) "&#60;data&#38;sons&#62;"
+string(0) ""
+string(55) "?&#62;&#60;!@#$%^&#38;*()}{~Qwertyuilfdsasdfgmnbvcxcvbn"
+string(23) "&#60;data&#38;sons&#62;"
+string(0) ""
+string(55) "?&#62;&#60;!@#$%^&#38;*()}{~Qwertyuilfdsasdfgmnbvcxcvbn"
+string(23) "&#60;data&#38;sons&#62;"
+string(0) ""
+string(108) "&#208;&#186;&#208;&#184;&#209;&#128;&#208;&#184;&#208;&#187;&#208;&#187;&#208;&#184;&#209;&#134;&#208;&#176;"
+string(18) "ะบะธั€ะธะปะปะธั†ะฐ"
+Done
diff --git a/ext/filter/tests/029.phpt b/ext/filter/tests/029.phpt
new file mode 100644
index 0000000..c1ede74
--- /dev/null
+++ b/ext/filter/tests/029.phpt
@@ -0,0 +1,105 @@
+--TEST--
+filter_var() and FILTER_CALLBACK
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+/* Simple callback function */
+function test($var) {
+ return strtoupper($var);
+}
+
+var_dump(filter_var("data", FILTER_CALLBACK, array("options"=>"test")));
+var_dump(filter_var("~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?\"}{:", FILTER_CALLBACK, array("options"=>"test")));
+var_dump(filter_var("", FILTER_CALLBACK, array("options"=>"test")));
+var_dump(filter_var("qwe", FILTER_CALLBACK, array("options"=>"no such func")));
+var_dump(filter_var("qwe", FILTER_CALLBACK, array("options"=>"")));
+var_dump(filter_var("qwe", FILTER_CALLBACK));
+
+/* Simple class method callback */
+class test_class {
+ static function test ($var) {
+ return strtolower($var);
+ }
+}
+
+var_dump(filter_var("dAtA", FILTER_CALLBACK, array("options"=>array("test_class", "test"))));
+var_dump(filter_var("~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?\"}{:", FILTER_CALLBACK, array("options"=>array("test_class","test"))));
+var_dump(filter_var("", FILTER_CALLBACK, array("options"=>array("test_class","test"))));
+
+/* empty function without return value */
+function test1($var) {
+}
+
+var_dump(filter_var("data", FILTER_CALLBACK, array("options"=>"test1")));
+var_dump(filter_var("~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?\"}{:", FILTER_CALLBACK, array("options"=>"test1")));
+var_dump(filter_var("", FILTER_CALLBACK, array("options"=>"test1")));
+
+/* attempting to change data by reference */
+function test2(&$var) {
+ $var = 1;
+}
+
+var_dump(filter_var("data", FILTER_CALLBACK, array("options"=>"test2")));
+var_dump(filter_var("~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?\"}{:", FILTER_CALLBACK, array("options"=>"test2")));
+var_dump(filter_var("", FILTER_CALLBACK, array("options"=>"test2")));
+
+/* unsetting data */
+function test3(&$var) {
+ unset($var);
+}
+
+var_dump(filter_var("data", FILTER_CALLBACK, array("options"=>"test3")));
+var_dump(filter_var("~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?\"}{:", FILTER_CALLBACK, array("options"=>"test3")));
+var_dump(filter_var("", FILTER_CALLBACK, array("options"=>"test3")));
+
+/* unset data and return value */
+function test4(&$var) {
+ unset($var);
+ return 1;
+}
+
+var_dump(filter_var("data", FILTER_CALLBACK, array("options"=>"test4")));
+
+/* thrown exception in the callback */
+function test5(&$var) {
+ throw new Exception("test");
+}
+
+try {
+ var_dump(filter_var("data", FILTER_CALLBACK, array("options"=>"test5")));
+} catch (Exception $e) {
+ var_dump($e->getMessage());
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+string(4) "DATA"
+string(46) "~!@#$%^&*()_QWERTYUIOPASDFGHJKLZXCVBNM<>>?"}{:"
+string(0) ""
+
+Warning: filter_var(): First argument is expected to be a valid callback in %s on line %d
+NULL
+
+Warning: filter_var(): First argument is expected to be a valid callback in %s on line %d
+NULL
+
+Warning: filter_var(): First argument is expected to be a valid callback in %s on line %d
+NULL
+string(4) "data"
+string(46) "~!@#$%^&*()_qwertyuiopasdfghjklzxcvbnm<>>?"}{:"
+string(0) ""
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+NULL
+int(1)
+string(4) "test"
+Done
diff --git a/ext/filter/tests/030.phpt b/ext/filter/tests/030.phpt
new file mode 100644
index 0000000..c5af15e
--- /dev/null
+++ b/ext/filter/tests/030.phpt
@@ -0,0 +1,64 @@
+--TEST--
+filter_var() and IPv6
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$ipv6_test = array(
+ "::127.0.0.1" => true,
+ "FF01::101:127.0.1" => false,
+ "FF01:0:0:0:101:127.0.1.1" => false,
+ "FF01:0:0:0:237:101:127.0.1.1" => true,
+ "FF01::101" => true,
+ "A1080::8:800:200C:417A" => false,
+ "1080::8:Z00:200C:417A" => false,
+ "FF01::101::1" => false,
+ "1080::8:800:200C:417A" => true,
+ "1080:0:0:0:8:800:200C:417A" => true,
+ "2001:ec8:1:1:1:1:1:1" => true,
+ "ffff::FFFF:129.144.52.38" => true,
+ "::ffff:1.2.3.4" => true,
+ "0:0:0:0:0:FFFF:129.144.52.38" => true,
+ "0:0:0:0:0:0:13.1.68.3" => true,
+ "0:0:0:0:0:0:0:13.1.68.3" => false,
+ "::13.1.68.3" => true,
+ "::FFFF:129.144.52.38" => true,
+
+ "1:2:3:4:5:6::129.144.52.38" => false,
+ "::1:2:3:4:5:6:129.144.52.38" => false,
+ "1:2:3::4:5:6:129.144.52.38" => false,
+
+ "1:2:3:4::5:6:7:8" => false,
+ "::1:2:3:4:5:6:7" => true,
+ "::1:2:3:4:5:6:7:8" => false,
+ "1:2:3:4:5:6:7::" => true,
+ "1:2:3:4:5:6:7:8::" => false,
+ "1:2:3:4:5:6:7::8" => false,
+
+ "1:2:3:4:5:6:7:8g" => false,
+ "1:2:3:4:5:6:7:g" => false,
+ "1:2:3:4:5g:6:7:8" => false,
+
+ 'a:b:c:d:e::1.2.3.4' => true,
+ '::0:a:b:c:d:e:f' => true,
+ '0:a:b:c:d:e:f::' => true,
+ ':::1.2.3.4' => false,
+ '8:::1.2.3.4' => false,
+ '::01.02.03.04' => false,
+ '::1.00.3.4' => false,
+ '0:0:0:255.255.255.255' => false,
+ '0:0:0::255.255.255.255' => true,
+);
+foreach ($ipv6_test as $ip => $exp) {
+ $out = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6);
+ $out = (int) ($out === false ? 0 : 1);
+ if ($exp != $out) {
+ echo "$ip failed (expected ", $exp?"true":"false", ", got ",
+ $out?"true":"false", ")\n";
+ }
+}
+
+echo "Ok\n";
+?>
+--EXPECT--
+Ok
diff --git a/ext/filter/tests/031.phpt b/ext/filter/tests/031.phpt
new file mode 100644
index 0000000..23691fb
--- /dev/null
+++ b/ext/filter/tests/031.phpt
@@ -0,0 +1,58 @@
+--TEST--
+filter_var() and FLOAT
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+precision=14
+--FILE--
+<?php
+
+$floats = array(
+'1.234 ',
+' 1.234',
+'1.234' ,
+'1.2e3',
+'7E3',
+'7E3 ',
+' 7E3 ',
+' 7E-3 '
+);
+
+foreach ($floats as $float) {
+ $out = filter_var($float, FILTER_VALIDATE_FLOAT);
+ var_dump($out);
+}
+
+$floats = array(
+'1.234 ' => ',',
+'1,234' => ',',
+' 1.234' => '.',
+'1.234' => '..',
+'1.2e3' => ','
+);
+
+echo "\ncustom decimal:\n";
+foreach ($floats as $float => $dec) {
+ $out = filter_var($float, FILTER_VALIDATE_FLOAT, array("options"=>array('decimal' => $dec)));
+ var_dump($out);
+}
+
+?>
+--EXPECTF--
+float(1.234)
+float(1.234)
+float(1.234)
+float(1200)
+float(7000)
+float(7000)
+float(7000)
+float(0.007)
+
+custom decimal:
+bool(false)
+float(1.234)
+float(1.234)
+
+Warning: filter_var(): decimal separator must be one char in %s on line %d
+bool(false)
+bool(false)
diff --git a/ext/filter/tests/032.phpt b/ext/filter/tests/032.phpt
new file mode 100644
index 0000000..d88d502
--- /dev/null
+++ b/ext/filter/tests/032.phpt
@@ -0,0 +1,57 @@
+--TEST--
+input_get_args()
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$data = array(
+ 'product_id' => 'libgd<script>',
+ 'component' => '10dhsajkkdhk <do>',
+ 'versions' => '2.0.33',
+ 'testscalar' => array('2','23','10','12'),
+ 'testarray' => '2',
+);
+
+$args = array(
+ 'product_id' => FILTER_SANITIZE_ENCODED,
+ 'component' => array(//'filter' => FILTER_VALIDATE_INT,
+ 'flags' => FILTER_FORCE_ARRAY,
+ 'options' => array("min_range"=>1, "max_range"=>10)
+ ),
+ 'versions' => array(
+ 'filter' => FILTER_SANITIZE_ENCODED,
+ 'flags' => FILTER_REQUIRE_SCALAR,
+ ),
+ 'doesnotexist' => FILTER_VALIDATE_INT,
+ 'testscalar' => FILTER_VALIDATE_INT,
+ 'testarray' => array(
+ 'filter' => FILTER_VALIDATE_INT,
+ 'flags' => FILTER_FORCE_ARRAY,
+ )
+
+);
+
+$myinputs = filter_var_array($data, $args);
+var_dump($myinputs);
+?>
+--EXPECT--
+array(6) {
+ ["product_id"]=>
+ string(17) "libgd%3Cscript%3E"
+ ["component"]=>
+ array(1) {
+ [0]=>
+ string(17) "10dhsajkkdhk <do>"
+ }
+ ["versions"]=>
+ string(6) "2.0.33"
+ ["doesnotexist"]=>
+ NULL
+ ["testscalar"]=>
+ bool(false)
+ ["testarray"]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
diff --git a/ext/filter/tests/033.phpt b/ext/filter/tests/033.phpt
new file mode 100644
index 0000000..04daa61
--- /dev/null
+++ b/ext/filter/tests/033.phpt
@@ -0,0 +1,31 @@
+--TEST--
+Test all filters returned by filter_list()
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+precision=14
+default_charset=UTF-8
+--FILE--
+<?php
+include dirname(__FILE__) . '/033_run.inc';
+?>
+--EXPECT--
+int 1 123
+boolean 1
+float 1 123
+validate_regexp O'Henry
+validate_url http://a.b.c
+validate_email foo@bar.com
+validate_ip 1.2.3.4
+string PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc() O&#39;Henry ํ•˜ํผ
+stripped PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc() O&#39;Henry ํ•˜ํผ
+encoded PHP 1 foo%40bar.com http%3A%2F%2Fa.b.c 1.2.3.4 123 123abc%3C%3E%28%29 O%27Henry %ED%95%98%ED%8D%BC
+special_chars PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc&#60;&#62;() O&#39;Henry ํ•˜ํผ
+full_special_chars PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc&lt;&gt;() O&#039;Henry ํ•˜ํผ
+unsafe_raw PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc<>() O'Henry ํ•˜ํผ
+email PHP 1 foo@bar.com httpa.b.c 1.2.3.4 123 123abc O'Henry
+url PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc<>() O'Henry
+number_int 1 1234 123 123
+number_float 1 1234 123 123
+magic_quotes PHP 1 foo@bar.com http://a.b.c 1.2.3.4 123 123abc<>() O\'Henry ํ•˜ํผ
+callback PHP 1 FOO@BAR.COM HTTP://A.B.C 1.2.3.4 123 123ABC<>() O'HENRY ํ•˜ํผ
diff --git a/ext/filter/tests/033_run.inc b/ext/filter/tests/033_run.inc
new file mode 100644
index 0000000..e3b6738
--- /dev/null
+++ b/ext/filter/tests/033_run.inc
@@ -0,0 +1,40 @@
+<?php
+if (function_exists('setlocale')) {
+ setlocale(LC_ALL, 'C');
+}
+
+function test($data) {
+ return strtoupper($data);
+}
+
+$data = array(
+ "PHP",
+ "1",
+ "foo@bar.com",
+ "http://a.b.c",
+ "1.2.3.4",
+ "123",
+ "123abc<>()",
+ "O'Henry",
+ "ํ•˜ํผ"
+);
+
+
+foreach(filter_list() as $filter) {
+ if($filter=="validate_regexp") {
+ foreach($data as $k=>$d) $result[$k] = filter_var($d,filter_id($filter),array("options"=>array("regexp"=>'/^O.*/')));
+ } else {
+ foreach($data as $k=>$d) $result[$k] = filter_var($d,filter_id($filter),array("options"=>"test"));
+ }
+ printf("%-20s",$filter);
+ printf("%-5s",$result[0]);
+ printf("%-3s",$result[1]);
+ printf("%-15s",$result[2]);
+ printf("%-20s",$result[3]);
+ printf("%-10s",$result[4]);
+ printf("%-5s",$result[5]);
+ printf("%-20s",$result[6]);
+ printf("%-15s",$result[7]);
+ printf("%-10s\n",$result[8]);
+}
+?>
diff --git a/ext/filter/tests/034.phpt b/ext/filter/tests/034.phpt
new file mode 100644
index 0000000..364f902
--- /dev/null
+++ b/ext/filter/tests/034.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Logical filter: boolean
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--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_var($val, FILTER_VALIDATE_BOOLEAN);
+ if ($res !== $exp) {
+ echo "$val failed,'$exp' expect, '$res' received.\n";
+ }
+}
+echo "Ok.";
+?>
+--EXPECTF--
+Ok.
diff --git a/ext/filter/tests/035.phpt b/ext/filter/tests/035.phpt
new file mode 100644
index 0000000..e2d3325
--- /dev/null
+++ b/ext/filter/tests/035.phpt
@@ -0,0 +1,38 @@
+--TEST--
+GET/POST/REQUEST Test with input_filter
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--POST--
+d=379
+--GET--
+ar[elm1]=1234&ar[elm2]=0660&a=0234
+--FILE--
+<?php
+$ret = filter_input(INPUT_GET, 'a', FILTER_VALIDATE_INT);
+var_dump($ret);
+
+$ret = filter_input(INPUT_GET, 'a', FILTER_VALIDATE_INT, array('flags'=>FILTER_FLAG_ALLOW_OCTAL));
+var_dump($ret);
+
+$ret = filter_input(INPUT_GET, 'ar', FILTER_VALIDATE_INT, array('flags'=>FILTER_REQUIRE_ARRAY));
+var_dump($ret);
+
+$ret = filter_input(INPUT_GET, 'ar', FILTER_VALIDATE_INT, array('flags'=>FILTER_FLAG_ALLOW_OCTAL|FILTER_REQUIRE_ARRAY));
+var_dump($ret);
+
+?>
+--EXPECT--
+bool(false)
+int(156)
+array(2) {
+ ["elm1"]=>
+ int(1234)
+ ["elm2"]=>
+ bool(false)
+}
+array(2) {
+ ["elm1"]=>
+ int(1234)
+ ["elm2"]=>
+ int(432)
+}
diff --git a/ext/filter/tests/036.phpt b/ext/filter/tests/036.phpt
new file mode 100644
index 0000000..9543266
--- /dev/null
+++ b/ext/filter/tests/036.phpt
@@ -0,0 +1,39 @@
+--TEST--
+input_get_args() and references
+--SKIPIF--
+<?php if (!extension_loaded("filter")) print "skip"; ?>
+--FILE--
+<?php
+
+$var = "1";
+
+$data = array();
+$data["test1"] = 1;
+$data["test2"] = &$var;
+
+$args = array();
+$args["test1"] = FILTER_VALIDATE_INT;
+$args["test2"] = FILTER_VALIDATE_INT;
+
+$ret = filter_var_array($data, $args);
+var_dump($ret);
+var_dump($data); //should be separated, i.e. not reference anymore. looks like we can't change this, or it'd change the original zval instead..
+var_dump($var); //should be still string(1) "1"
+
+echo "Done\n";
+?>
+--EXPECTF--
+array(2) {
+ ["test1"]=>
+ int(1)
+ ["test2"]=>
+ int(1)
+}
+array(2) {
+ ["test1"]=>
+ int(1)
+ ["test2"]=>
+ &string(1) "1"
+}
+string(1) "1"
+Done
diff --git a/ext/filter/tests/037.phpt b/ext/filter/tests/037.phpt
new file mode 100644
index 0000000..f8497c6
--- /dev/null
+++ b/ext/filter/tests/037.phpt
@@ -0,0 +1,41 @@
+--TEST--
+GET and data callback tests
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--GET--
+a=1&b=2
+--FILE--
+<?php
+function myfunc($val) {
+ return $val . '_callback';
+}
+echo filter_input(INPUT_GET, 'a', FILTER_CALLBACK, array("options"=>'myfunc'));
+echo "\n";
+echo filter_input(INPUT_GET, 'b', FILTER_VALIDATE_INT);
+echo "\n";
+$data = "data";
+
+echo filter_var($data, FILTER_CALLBACK, array("options"=>'myfunc'));
+echo "\n";
+
+$res = filter_input_array(INPUT_GET, array(
+ 'a' => array(
+ 'filter' => FILTER_CALLBACK,
+ 'options' => 'myfunc'
+ ),
+ 'b' => FILTER_VALIDATE_INT
+ )
+ );
+
+var_dump($res);
+?>
+--EXPECT--
+1_callback
+2
+data_callback
+array(2) {
+ ["a"]=>
+ string(10) "1_callback"
+ ["b"]=>
+ int(2)
+}
diff --git a/ext/filter/tests/038.phpt b/ext/filter/tests/038.phpt
new file mode 100644
index 0000000..998c80f
--- /dev/null
+++ b/ext/filter/tests/038.phpt
@@ -0,0 +1,58 @@
+--TEST--
+Test scalar, array
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+$var = 12;
+$res = filter_var($var, FILTER_VALIDATE_INT, array('flags'=>FILTER_FLAG_ALLOW_OCTAL));
+var_dump($res);
+
+$var = array(12);
+$res = filter_var($var, FILTER_VALIDATE_INT, array('flags'=>FILTER_FLAG_ALLOW_OCTAL));
+var_dump($res);
+
+$var = 12;
+$res = filter_var($var, FILTER_VALIDATE_INT, array('flags'=>FILTER_FLAG_ALLOW_OCTAL|FILTER_FORCE_ARRAY));
+var_dump($res);
+
+
+
+$var = 12;
+$res = filter_var($var, FILTER_VALIDATE_INT, array('flags'=>FILTER_FLAG_ALLOW_OCTAL|FILTER_REQUIRE_ARRAY));
+var_dump($res);
+
+$var = array(12);
+$res = filter_var($var, FILTER_VALIDATE_INT, array('flags'=>FILTER_FLAG_ALLOW_OCTAL|FILTER_REQUIRE_ARRAY));
+var_dump($res);
+
+$var = array(12);
+$res = filter_var($var, FILTER_VALIDATE_INT, array('flags'=>FILTER_FLAG_ALLOW_OCTAL|FILTER_FORCE_ARRAY|FILTER_REQUIRE_ARRAY));
+var_dump($res);
+
+$var = array(12);
+$res = filter_var($var, FILTER_VALIDATE_INT, array('flags'=>FILTER_FLAG_ALLOW_OCTAL|FILTER_FORCE_ARRAY));
+var_dump($res);
+
+?>
+--EXPECT--
+int(12)
+bool(false)
+array(1) {
+ [0]=>
+ int(12)
+}
+bool(false)
+array(1) {
+ [0]=>
+ int(12)
+}
+array(1) {
+ [0]=>
+ int(12)
+}
+array(1) {
+ [0]=>
+ int(12)
+}
diff --git a/ext/filter/tests/039.phpt b/ext/filter/tests/039.phpt
new file mode 100644
index 0000000..ae883db
--- /dev/null
+++ b/ext/filter/tests/039.phpt
@@ -0,0 +1,117 @@
+--TEST--
+filter_var_array() and different arguments
+--SKIPIF--
+<?php if (!extension_loaded("filter")) print "skip"; ?>
+--FILE--
+<?php
+
+echo "-- (1)\n";
+var_dump(filter_var_array(NULL));
+var_dump(filter_var_array(array()));
+var_dump(filter_var_array(array(1,"blah"=>"hoho")));
+var_dump(filter_var_array(array(), -1));
+var_dump(filter_var_array(array(), 1000000));
+var_dump(filter_var_array(array(), ""));
+
+echo "-- (2)\n";
+var_dump(filter_var_array(array(""=>""), -1));
+var_dump(filter_var_array(array(""=>""), 1000000));
+var_dump(filter_var_array(array(""=>""), ""));
+
+echo "-- (3)\n";
+var_dump(filter_var_array(array("aaa"=>"bbb"), -1));
+var_dump(filter_var_array(array("aaa"=>"bbb"), 1000000));
+var_dump(filter_var_array(array("aaa"=>"bbb"), ""));
+
+echo "-- (4)\n";
+var_dump(filter_var_array(array(), new stdclass));
+var_dump(filter_var_array(array(), array()));
+var_dump(filter_var_array(array(), array("var_name"=>1)));
+var_dump(filter_var_array(array(), array("var_name"=>-1)));
+var_dump(filter_var_array(array("var_name"=>""), array("var_name"=>-1)));
+
+echo "-- (5)\n";
+var_dump(filter_var_array(array("var_name"=>""), array("var_name"=>-1, "asdas"=>"asdasd", "qwe"=>"rty", ""=>"")));
+var_dump(filter_var_array(array("asdas"=>"text"), array("var_name"=>-1, "asdas"=>"asdasd", "qwe"=>"rty", ""=>"")));
+
+
+$a = array(""=>""); $b = -1;
+var_dump(filter_var_array($a, $b));
+var_dump($a, $b);
+
+$a = array(""=>""); $b = 100000;
+var_dump(filter_var_array($a, $b));
+var_dump($a, $b);
+
+$a = array(""=>""); $b = "";
+var_dump(filter_var_array($a, $b));
+var_dump($a, $b);
+
+echo "Done\n";
+?>
+--EXPECTF--
+-- (1)
+
+Warning: filter_var_array() expects parameter 1 to be array, null given in %s on line %d
+NULL
+array(0) {
+}
+array(2) {
+ [0]=>
+ string(1) "1"
+ ["blah"]=>
+ string(4) "hoho"
+}
+bool(false)
+bool(false)
+bool(false)
+-- (2)
+bool(false)
+bool(false)
+bool(false)
+-- (3)
+bool(false)
+bool(false)
+bool(false)
+-- (4)
+bool(false)
+array(0) {
+}
+array(1) {
+ ["var_name"]=>
+ NULL
+}
+array(1) {
+ ["var_name"]=>
+ NULL
+}
+array(1) {
+ ["var_name"]=>
+ string(0) ""
+}
+-- (5)
+
+Warning: filter_var_array(): Empty keys are not allowed in the definition array in %s on line %d
+bool(false)
+
+Warning: filter_var_array(): Empty keys are not allowed in the definition array in %s on line %d
+bool(false)
+bool(false)
+array(1) {
+ [""]=>
+ string(0) ""
+}
+int(-1)
+bool(false)
+array(1) {
+ [""]=>
+ string(0) ""
+}
+int(100000)
+bool(false)
+array(1) {
+ [""]=>
+ string(0) ""
+}
+string(0) ""
+Done
diff --git a/ext/filter/tests/040.phpt b/ext/filter/tests/040.phpt
new file mode 100644
index 0000000..fd39b36
--- /dev/null
+++ b/ext/filter/tests/040.phpt
@@ -0,0 +1,45 @@
+--TEST--
+filter_has_var() tests
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--GET--
+a=1&b=2&c=0
+--POST--
+ap[]=1&bp=test&cp=
+--FILE--
+<?php
+
+var_dump(filter_has_var());
+var_dump(filter_has_var(INPUT_GET,""));
+var_dump(filter_has_var(INPUT_GET,array()));
+var_dump(filter_has_var(INPUT_POST, "ap"));
+var_dump(filter_has_var(INPUT_POST, "cp"));
+var_dump(filter_has_var(INPUT_GET, "a"));
+var_dump(filter_has_var(INPUT_GET, "c"));
+var_dump(filter_has_var(INPUT_GET, "abc"));
+var_dump(filter_has_var(INPUT_GET, "cc"));
+var_dump(filter_has_var(-1, "cc"));
+var_dump(filter_has_var(0, "cc"));
+var_dump(filter_has_var("", "cc"));
+
+echo "Done\n";
+?>
+--EXPECTF--
+Warning: filter_has_var() expects exactly 2 parameters, 0 given in %s on line %d
+bool(false)
+bool(false)
+
+Warning: filter_has_var() expects parameter 2 to be string, array given in %s on line %d
+bool(false)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+
+Warning: filter_has_var() expects parameter 1 to be long, string given in %s on line %d
+bool(false)
+Done
diff --git a/ext/filter/tests/041.phpt b/ext/filter/tests/041.phpt
new file mode 100644
index 0000000..0a2e3f0
--- /dev/null
+++ b/ext/filter/tests/041.phpt
@@ -0,0 +1,34 @@
+--TEST--
+COOKIE multiple cookie test
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+filter.default=stripped
+filter.default_flags=0
+--COOKIE--
+abc=dir; def=true; abc=root; xyz="foo bar";
+--FILE--
+<?php
+var_dump($_COOKIE);
+var_dump(filter_has_var(INPUT_COOKIE, "abc"));
+var_dump(filter_input(INPUT_COOKIE, "abc"));
+var_dump(filter_input(INPUT_COOKIE, "def"));
+var_dump(filter_input(INPUT_COOKIE, "xyz"));
+var_dump(filter_has_var(INPUT_COOKIE, "bogus"));
+var_dump(filter_input(INPUT_COOKIE, "xyz", FILTER_SANITIZE_SPECIAL_CHARS));
+?>
+--EXPECT--
+array(3) {
+ ["abc"]=>
+ string(3) "dir"
+ ["def"]=>
+ string(4) "true"
+ ["xyz"]=>
+ string(17) "&#34;foo bar&#34;"
+}
+bool(true)
+string(3) "dir"
+string(4) "true"
+string(9) ""foo bar""
+bool(false)
+string(17) "&#34;foo bar&#34;"
diff --git a/ext/filter/tests/042.phpt b/ext/filter/tests/042.phpt
new file mode 100644
index 0000000..08f4dd6
--- /dev/null
+++ b/ext/filter/tests/042.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Combination of strip & sanitize filters
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$var = 'XYZ< script>alert(/ext/filter+bypass/);< /script>ABC';
+$a = filter_var($var, FILTER_SANITIZE_STRING, array("flags" => FILTER_FLAG_STRIP_LOW));
+echo $a . "\n";
+
+$var = 'XYZ<
+script>alert(/ext/filter+bypass/);<
+/script>ABC';
+$a = filter_var($var, FILTER_SANITIZE_STRING, array("flags" => FILTER_FLAG_STRIP_LOW));
+echo $a . "\n";
+?>
+--EXPECT--
+XYZalert(/ext/filter+bypass/);ABC
+XYZalert(/ext/filter+bypass/);ABC
diff --git a/ext/filter/tests/043.phpt b/ext/filter/tests/043.phpt
new file mode 100644
index 0000000..92ac051
--- /dev/null
+++ b/ext/filter/tests/043.phpt
@@ -0,0 +1,269 @@
+--TEST--
+Character encoding test
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$flags = FILTER_FLAG_ENCODE_AMP|FILTER_FLAG_ENCODE_LOW|FILTER_FLAG_ENCODE_HIGH;
+
+for ($i = 0; $i < 256; $i++) {
+ var_dump(filter_var(chr($i), FILTER_SANITIZE_STRING, array("flags" => $flags)));
+}
+?>
+--EXPECT--
+string(4) "&#0;"
+string(4) "&#1;"
+string(4) "&#2;"
+string(4) "&#3;"
+string(4) "&#4;"
+string(4) "&#5;"
+string(4) "&#6;"
+string(4) "&#7;"
+string(4) "&#8;"
+string(4) "&#9;"
+string(5) "&#10;"
+string(5) "&#11;"
+string(5) "&#12;"
+string(5) "&#13;"
+string(5) "&#14;"
+string(5) "&#15;"
+string(5) "&#16;"
+string(5) "&#17;"
+string(5) "&#18;"
+string(5) "&#19;"
+string(5) "&#20;"
+string(5) "&#21;"
+string(5) "&#22;"
+string(5) "&#23;"
+string(5) "&#24;"
+string(5) "&#25;"
+string(5) "&#26;"
+string(5) "&#27;"
+string(5) "&#28;"
+string(5) "&#29;"
+string(5) "&#30;"
+string(5) "&#31;"
+string(1) " "
+string(1) "!"
+string(5) "&#34;"
+string(1) "#"
+string(1) "$"
+string(1) "%"
+string(5) "&#38;"
+string(5) "&#39;"
+string(1) "("
+string(1) ")"
+string(1) "*"
+string(1) "+"
+string(1) ","
+string(1) "-"
+string(1) "."
+string(1) "/"
+string(1) "0"
+string(1) "1"
+string(1) "2"
+string(1) "3"
+string(1) "4"
+string(1) "5"
+string(1) "6"
+string(1) "7"
+string(1) "8"
+string(1) "9"
+string(1) ":"
+string(1) ";"
+string(0) ""
+string(1) "="
+string(1) ">"
+string(1) "?"
+string(1) "@"
+string(1) "A"
+string(1) "B"
+string(1) "C"
+string(1) "D"
+string(1) "E"
+string(1) "F"
+string(1) "G"
+string(1) "H"
+string(1) "I"
+string(1) "J"
+string(1) "K"
+string(1) "L"
+string(1) "M"
+string(1) "N"
+string(1) "O"
+string(1) "P"
+string(1) "Q"
+string(1) "R"
+string(1) "S"
+string(1) "T"
+string(1) "U"
+string(1) "V"
+string(1) "W"
+string(1) "X"
+string(1) "Y"
+string(1) "Z"
+string(1) "["
+string(1) "\"
+string(1) "]"
+string(1) "^"
+string(1) "_"
+string(1) "`"
+string(1) "a"
+string(1) "b"
+string(1) "c"
+string(1) "d"
+string(1) "e"
+string(1) "f"
+string(1) "g"
+string(1) "h"
+string(1) "i"
+string(1) "j"
+string(1) "k"
+string(1) "l"
+string(1) "m"
+string(1) "n"
+string(1) "o"
+string(1) "p"
+string(1) "q"
+string(1) "r"
+string(1) "s"
+string(1) "t"
+string(1) "u"
+string(1) "v"
+string(1) "w"
+string(1) "x"
+string(1) "y"
+string(1) "z"
+string(1) "{"
+string(1) "|"
+string(1) "}"
+string(1) "~"
+string(6) "&#127;"
+string(6) "&#128;"
+string(6) "&#129;"
+string(6) "&#130;"
+string(6) "&#131;"
+string(6) "&#132;"
+string(6) "&#133;"
+string(6) "&#134;"
+string(6) "&#135;"
+string(6) "&#136;"
+string(6) "&#137;"
+string(6) "&#138;"
+string(6) "&#139;"
+string(6) "&#140;"
+string(6) "&#141;"
+string(6) "&#142;"
+string(6) "&#143;"
+string(6) "&#144;"
+string(6) "&#145;"
+string(6) "&#146;"
+string(6) "&#147;"
+string(6) "&#148;"
+string(6) "&#149;"
+string(6) "&#150;"
+string(6) "&#151;"
+string(6) "&#152;"
+string(6) "&#153;"
+string(6) "&#154;"
+string(6) "&#155;"
+string(6) "&#156;"
+string(6) "&#157;"
+string(6) "&#158;"
+string(6) "&#159;"
+string(6) "&#160;"
+string(6) "&#161;"
+string(6) "&#162;"
+string(6) "&#163;"
+string(6) "&#164;"
+string(6) "&#165;"
+string(6) "&#166;"
+string(6) "&#167;"
+string(6) "&#168;"
+string(6) "&#169;"
+string(6) "&#170;"
+string(6) "&#171;"
+string(6) "&#172;"
+string(6) "&#173;"
+string(6) "&#174;"
+string(6) "&#175;"
+string(6) "&#176;"
+string(6) "&#177;"
+string(6) "&#178;"
+string(6) "&#179;"
+string(6) "&#180;"
+string(6) "&#181;"
+string(6) "&#182;"
+string(6) "&#183;"
+string(6) "&#184;"
+string(6) "&#185;"
+string(6) "&#186;"
+string(6) "&#187;"
+string(6) "&#188;"
+string(6) "&#189;"
+string(6) "&#190;"
+string(6) "&#191;"
+string(6) "&#192;"
+string(6) "&#193;"
+string(6) "&#194;"
+string(6) "&#195;"
+string(6) "&#196;"
+string(6) "&#197;"
+string(6) "&#198;"
+string(6) "&#199;"
+string(6) "&#200;"
+string(6) "&#201;"
+string(6) "&#202;"
+string(6) "&#203;"
+string(6) "&#204;"
+string(6) "&#205;"
+string(6) "&#206;"
+string(6) "&#207;"
+string(6) "&#208;"
+string(6) "&#209;"
+string(6) "&#210;"
+string(6) "&#211;"
+string(6) "&#212;"
+string(6) "&#213;"
+string(6) "&#214;"
+string(6) "&#215;"
+string(6) "&#216;"
+string(6) "&#217;"
+string(6) "&#218;"
+string(6) "&#219;"
+string(6) "&#220;"
+string(6) "&#221;"
+string(6) "&#222;"
+string(6) "&#223;"
+string(6) "&#224;"
+string(6) "&#225;"
+string(6) "&#226;"
+string(6) "&#227;"
+string(6) "&#228;"
+string(6) "&#229;"
+string(6) "&#230;"
+string(6) "&#231;"
+string(6) "&#232;"
+string(6) "&#233;"
+string(6) "&#234;"
+string(6) "&#235;"
+string(6) "&#236;"
+string(6) "&#237;"
+string(6) "&#238;"
+string(6) "&#239;"
+string(6) "&#240;"
+string(6) "&#241;"
+string(6) "&#242;"
+string(6) "&#243;"
+string(6) "&#244;"
+string(6) "&#245;"
+string(6) "&#246;"
+string(6) "&#247;"
+string(6) "&#248;"
+string(6) "&#249;"
+string(6) "&#250;"
+string(6) "&#251;"
+string(6) "&#252;"
+string(6) "&#253;"
+string(6) "&#254;"
+string(6) "&#255;"
diff --git a/ext/filter/tests/044.phpt b/ext/filter/tests/044.phpt
new file mode 100644
index 0000000..ff46893
--- /dev/null
+++ b/ext/filter/tests/044.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Integer validation with spaces
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+precision=14
+--FILE--
+<?php
+$vals = array(
+"
+ ",
+" ",
+" 123",
+" 123.01 ",
+);
+
+foreach ($vals as $var) {
+ var_dump(filter_var($var, FILTER_VALIDATE_FLOAT));
+}
+?>
+--EXPECT--
+bool(false)
+bool(false)
+float(123)
+float(123.01)
diff --git a/ext/filter/tests/045.phpt b/ext/filter/tests/045.phpt
new file mode 100644
index 0000000..ad8f47e
--- /dev/null
+++ b/ext/filter/tests/045.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Options must not be changed by filter_var()
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$a = array("flags"=>(string)FILTER_FLAG_ALLOW_HEX, "options" => array("min_range"=>"0", "max_range"=>"1024"));
+$ret = filter_var("0xff", FILTER_VALIDATE_INT, $a);
+echo ($ret === 255 && $a["options"]["min_range"] === "0")?"ok\n":"bug\n";
+echo ($ret === 255 && $a["options"]["max_range"] === "1024")?"ok\n":"bug\n";
+echo ($ret === 255 && is_string($a["flags"]) && $a["flags"] == FILTER_FLAG_ALLOW_HEX)?"ok\n":"bug\n";
+$a = (string)FILTER_FLAG_ALLOW_HEX;
+$ret = filter_var("0xff", FILTER_VALIDATE_INT, $a);
+echo ($ret === 255 && is_string($a) && $a == FILTER_FLAG_ALLOW_HEX)?"ok\n":"bug\n";
+$a = array("test"=>array("filter"=>(string)FILTER_VALIDATE_INT, "flags"=>(string)FILTER_FLAG_ALLOW_HEX));
+$ret = filter_var_array(array("test"=>"0xff"), $a);
+echo ($ret["test"] === 255 && is_string($a["test"]["filter"]) && $a["test"]["filter"] == FILTER_VALIDATE_INT)?"ok\n":"bug\n";
+echo ($ret["test"] === 255 && is_string($a["test"]["flags"]) && $a["test"]["flags"] == FILTER_FLAG_ALLOW_HEX)?"ok\n":"bug\n";
+$a = array("test"=>(string)FILTER_VALIDATE_INT);
+$ret = filter_var_array(array("test"=>"255"), $a);
+echo ($ret["test"] === 255 && is_string($a["test"]) && $a["test"] == FILTER_VALIDATE_INT)?"ok\n":"bug\n";
+?>
+--EXPECT--
+ok
+ok
+ok
+ok
+ok
+ok
+ok
diff --git a/ext/filter/tests/046.phpt b/ext/filter/tests/046.phpt
new file mode 100644
index 0000000..bc45442
--- /dev/null
+++ b/ext/filter/tests/046.phpt
@@ -0,0 +1,49 @@
+--TEST--
+Integer overflow
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$max = sprintf("%d", PHP_INT_MAX);
+switch($max) {
+case "2147483647": /* 32-bit systems */
+ $min = "-2147483648";
+ $overflow = "2147483648";
+ $underflow = "-2147483649";
+ break;
+case "9223372036854775807": /* 64-bit systems */
+ $min = "-9223372036854775808";
+ $overflow = "9223372036854775808";
+ $underflow = "-9223372036854775809";
+ break;
+default:
+ die("failed: unknown value for PHP_MAX_INT");
+ break;
+}
+
+function test_validation($val, $msg) {
+ $f = filter_var($val, FILTER_VALIDATE_INT);
+ echo "$msg filtered: "; var_dump($f); // filtered value (or false)
+ echo "$msg is_long: "; var_dump(is_long($f)); // test validation
+ echo "$msg equal: "; var_dump($val == $f); // test equality of result
+}
+
+// PHP_INT_MAX
+test_validation($max, "max");
+test_validation($overflow, "overflow");
+test_validation($min, "min");
+test_validation($underflow, "underflow");
+?>
+--EXPECTF--
+max filtered: int(%d)
+max is_long: bool(true)
+max equal: bool(true)
+overflow filtered: bool(false)
+overflow is_long: bool(false)
+overflow equal: bool(false)
+min filtered: int(-%d)
+min is_long: bool(true)
+min equal: bool(true)
+underflow filtered: bool(false)
+underflow is_long: bool(false)
+underflow equal: bool(false)
diff --git a/ext/filter/tests/047.phpt b/ext/filter/tests/047.phpt
new file mode 100644
index 0000000..cc41eab
--- /dev/null
+++ b/ext/filter/tests/047.phpt
@@ -0,0 +1,37 @@
+--TEST--
+Octal integer overflow
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+function octal_inc($s) {
+ $len = strlen($s);
+ while ($len > 0) {
+ $len--;
+ if ($s[$len] != '7') {
+ $s[$len] = $s[$len] + 1;
+ return $s;
+ }
+ $s[$len] = '0';
+ }
+ return '1'.$s;
+}
+
+
+$s = sprintf("%o", PHP_INT_MAX);
+var_dump(is_long(filter_var('0'.$s, FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL))));
+
+$s = octal_inc($s);
+var_dump(is_long(filter_var('0'.$s, FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL))));
+
+$s = sprintf("%o", ~0);
+var_dump(is_long(filter_var('0'.$s, FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL))));
+
+$s = octal_inc($s);
+var_dump(filter_var('0'.$s, FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_OCTAL)));
+?>
+--EXPECT--
+bool(true)
+bool(true)
+bool(true)
+bool(false)
diff --git a/ext/filter/tests/048.phpt b/ext/filter/tests/048.phpt
new file mode 100644
index 0000000..92ab690
--- /dev/null
+++ b/ext/filter/tests/048.phpt
@@ -0,0 +1,41 @@
+--TEST--
+Hex integer overflow
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+function hex_inc($s) {
+ $len = strlen($s);
+ while ($len > 0) {
+ $len--;
+ if ($s[$len] != 'f') {
+ if ($s[$len] == '9') {
+ $s[$len] = 'a';
+ } else {
+ $s[$len] = $s[$len] + 1;
+ }
+ return $s;
+ }
+ $s[$len] = '0';
+ }
+ return '1'.$s;
+}
+
+
+$s = sprintf("%x", PHP_INT_MAX);
+var_dump(is_long(filter_var('0x'.$s, FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX))));
+
+$s = hex_inc($s);
+var_dump(is_long(filter_var('0x'.$s, FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX))));
+
+$s = sprintf("%x", ~0);
+var_dump(is_long(filter_var('0x'.$s, FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX))));
+
+$s = hex_inc($s);
+var_dump(filter_var('0x'.$s, FILTER_VALIDATE_INT, array("flags"=>FILTER_FLAG_ALLOW_HEX)));
+?>
+--EXPECT--
+bool(true)
+bool(true)
+bool(true)
+bool(false)
diff --git a/ext/filter/tests/049.phpt b/ext/filter/tests/049.phpt
new file mode 100644
index 0000000..5a9977b
--- /dev/null
+++ b/ext/filter/tests/049.phpt
@@ -0,0 +1,34 @@
+--TEST--
+filter_var() and doubles with thousend separators
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$test = array(
+ '0' => 0.0,
+ '12345678900.1234567165' => 12345678900.1234567165,
+ '1,234,567,890.1234567165' => 1234567890.1234567165,
+ '-1,234,567,890.1234567165' => -1234567890.1234567165,
+ '1234,567,890.1234567165' => false,
+ '1,234,567,89.1234567165' => false,
+ '1,234,567,8900.1234567165' => false,
+ '1.234.567.890.1234567165' => false,
+ '1,234,567,8900.123,456' => false,
+);
+foreach ($test as $src => $dst) {
+ $out = filter_var($src, FILTER_VALIDATE_FLOAT, array("flags"=>FILTER_FLAG_ALLOW_THOUSAND));
+ if ($dst !== $out) {
+ if ($out === false) {
+ echo "$src -> false != $dst\n";
+ } elseif ($dst === false) {
+ echo "$src -> $out != false\n";
+ } else {
+ echo "$src -> $out != $dst\n";
+ }
+ }
+}
+
+echo "Ok\n";
+?>
+--EXPECT--
+Ok
diff --git a/ext/filter/tests/050.phpt b/ext/filter/tests/050.phpt
new file mode 100644
index 0000000..69a269f
--- /dev/null
+++ b/ext/filter/tests/050.phpt
@@ -0,0 +1,29 @@
+--TEST--
+filter_var() and double overflow/underflow
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$test = array(
+ '1e+308' => 1e+308,
+ '1e+309' => false,
+ '1e-323' => 1e-323,
+ '1e-324' => false,
+);
+foreach ($test as $src => $dst) {
+ $out = filter_var($src, FILTER_VALIDATE_FLOAT);
+ if ($dst !== $out) {
+ if ($out === false) {
+ echo "$src -> false != $dst\n";
+ } elseif ($dst === false) {
+ echo "$src -> $out != false\n";
+ } else {
+ echo "$src -> $out != $dst\n";
+ }
+ }
+}
+
+echo "Ok\n";
+?>
+--EXPECT--
+Ok
diff --git a/ext/filter/tests/051.phpt b/ext/filter/tests/051.phpt
new file mode 100644
index 0000000..e34289d
--- /dev/null
+++ b/ext/filter/tests/051.phpt
@@ -0,0 +1,11 @@
+--TEST--
+filter_var() and default values
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$tmp = $default = 321;
+var_dump(filter_var("123asd", FILTER_VALIDATE_INT, array("options"=>array("default"=>$default))));
+?>
+--EXPECT--
+int(321)
diff --git a/ext/filter/tests/052.phpt b/ext/filter/tests/052.phpt
new file mode 100644
index 0000000..257613e
--- /dev/null
+++ b/ext/filter/tests/052.phpt
@@ -0,0 +1,73 @@
+--TEST--
+filter_var() / filter_var_array() and passed data integrity
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+function filter_cb($var)
+{
+ return 1;
+}
+
+$data = array ('bar' => array ('fu<script>bar', 'bar<script>fu') );
+var_dump(filter_var($data, FILTER_SANITIZE_STRING, FILTER_FORCE_ARRAY));
+var_dump($data);
+var_dump(filter_var($data, FILTER_CALLBACK, array('options' => 'filter_cb')));
+var_dump($data);
+var_dump(filter_var_array($data, array('bar' => array('filter' => FILTER_CALLBACK, 'options' => 'filter_cb'))));
+var_dump($data);
+--EXPECT--
+array(1) {
+ ["bar"]=>
+ array(2) {
+ [0]=>
+ string(5) "fubar"
+ [1]=>
+ string(5) "barfu"
+ }
+}
+array(1) {
+ ["bar"]=>
+ array(2) {
+ [0]=>
+ string(13) "fu<script>bar"
+ [1]=>
+ string(13) "bar<script>fu"
+ }
+}
+array(1) {
+ ["bar"]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(1)
+ }
+}
+array(1) {
+ ["bar"]=>
+ array(2) {
+ [0]=>
+ string(13) "fu<script>bar"
+ [1]=>
+ string(13) "bar<script>fu"
+ }
+}
+array(1) {
+ ["bar"]=>
+ array(2) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(1)
+ }
+}
+array(1) {
+ ["bar"]=>
+ array(2) {
+ [0]=>
+ string(13) "fu<script>bar"
+ [1]=>
+ string(13) "bar<script>fu"
+ }
+}
diff --git a/ext/filter/tests/053.phpt b/ext/filter/tests/053.phpt
new file mode 100644
index 0000000..a179f3e
--- /dev/null
+++ b/ext/filter/tests/053.phpt
@@ -0,0 +1,17 @@
+--TEST--
+filter_var() - using callback
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+function filter_test($str) { return FALSE; }
+filter_var('durty/boy', FILTER_CALLBACK, array(
+ 'options' => 'filter_test',
+));
+
+print "Done\n";
+
+?>
+--EXPECTF--
+Done
diff --git a/ext/filter/tests/054.phpt b/ext/filter/tests/054.phpt
new file mode 100644
index 0000000..c8a5dad
--- /dev/null
+++ b/ext/filter/tests/054.phpt
@@ -0,0 +1,26 @@
+--TEST--
+filter_var_array() - using the add_empty option
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+$data = array('foo' => 123);
+
+var_dump(
+ filter_var_array($data, array('foo' => array('filter' => FILTER_DEFAULT), 'bar' => array('filter' => FILTER_DEFAULT)), false),
+ filter_var_array($data, array('foo' => array('filter' => FILTER_DEFAULT), 'bar' => array('filter' => FILTER_DEFAULT)))
+);
+
+?>
+--EXPECT--
+array(1) {
+ ["foo"]=>
+ string(3) "123"
+}
+array(2) {
+ ["foo"]=>
+ string(3) "123"
+ ["bar"]=>
+ NULL
+}
diff --git a/ext/filter/tests/PMOPB45.phpt b/ext/filter/tests/PMOPB45.phpt
new file mode 100644
index 0000000..532eb21
--- /dev/null
+++ b/ext/filter/tests/PMOPB45.phpt
@@ -0,0 +1,11 @@
+--TEST--
+PMOPB-45-2007:PHP ext/filter Email Validation Vulnerability
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+ $var = "test@example.com\n";
+ var_dump(filter_var($var, FILTER_VALIDATE_EMAIL));
+?>
+--EXPECT--
+bool(false)
diff --git a/ext/filter/tests/bug39846.phpt b/ext/filter/tests/bug39846.phpt
new file mode 100644
index 0000000..57407f1
--- /dev/null
+++ b/ext/filter/tests/bug39846.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Bug #39846 (ipv4 trailing data validation)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var('192.168.1.100random-text-here', FILTER_VALIDATE_IP));
+var_dump(filter_var("192.168.1.155\0foo", FILTER_VALIDATE_IP));
+?>
+--EXPECT--
+bool(false)
+bool(false)
diff --git a/ext/filter/tests/bug42718-2.phpt b/ext/filter/tests/bug42718-2.phpt
new file mode 100644
index 0000000..ed21068
--- /dev/null
+++ b/ext/filter/tests/bug42718-2.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #42718 - 2 (unsafe_raw filter not applied when configured as default filter)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+display_errors=0
+filter.default=unsafe_raw
+filter.default_flags=
+--GET--
+a=1%00
+--FILE--
+<?php
+echo ini_get('filter.default') . "\n";
+echo ini_get('filter.default_flags') . "\n";
+?>
+--EXPECT--
+unsafe_raw
+
diff --git a/ext/filter/tests/bug42718.phpt b/ext/filter/tests/bug42718.phpt
new file mode 100644
index 0000000..ba56d39
--- /dev/null
+++ b/ext/filter/tests/bug42718.phpt
@@ -0,0 +1,23 @@
+--TEST--
+Bug #42718 (unsafe_raw filter not applied when configured as default filter)
+--XFAIL--
+FILTER_UNSAFE_RAW not applied when configured as default filter, even with flags
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+filter.default=unsafe_raw
+filter.default_flags=4
+--GET--
+a=1%00
+--FILE--
+<?php
+echo ini_get('filter.default') . "\n";
+echo ini_get('filter.default_flags') . "\n";
+var_dump(FILTER_FLAG_STRIP_LOW == 4);
+echo addcslashes($_GET['a'],"\0") . "\n";
+?>
+--EXPECT--
+unsafe_raw
+4
+bool(true)
+1
diff --git a/ext/filter/tests/bug44445.phpt b/ext/filter/tests/bug44445.phpt
new file mode 100644
index 0000000..36a8641
--- /dev/null
+++ b/ext/filter/tests/bug44445.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Bug #44445 (email validator does not handle domains starting/ending with a -)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var("foo@-foo.com",FILTER_VALIDATE_EMAIL));
+var_dump(filter_var("foo@foo-.com",FILTER_VALIDATE_EMAIL));
+?>
+--EXPECT--
+bool(false)
+bool(false)
diff --git a/ext/filter/tests/bug44779.phpt b/ext/filter/tests/bug44779.phpt
new file mode 100644
index 0000000..65a1e09
--- /dev/null
+++ b/ext/filter/tests/bug44779.phpt
@@ -0,0 +1,10 @@
+--TEST--
+Bug #44779 (filter returns NULL in CLI when it shouldn't)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_input(INPUT_SERVER, "PHP_SELF"));
+?>
+--EXPECTF--
+%unicode|string%(%d) "%s"
diff --git a/ext/filter/tests/bug46973.phpt b/ext/filter/tests/bug46973.phpt
new file mode 100644
index 0000000..eacacf5
--- /dev/null
+++ b/ext/filter/tests/bug46973.phpt
@@ -0,0 +1,16 @@
+--TEST--
+Bug #46973 (IPv6 address filter rejects valid address)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var('1fff::a88:85a3::172.31.128.1', FILTER_VALIDATE_IP,FILTER_FLAG_IPV6));
+var_dump(filter_var('3ffe:6a88:85a3:08d3:1319:8a2e:0370:7344', FILTER_VALIDATE_IP,FILTER_FLAG_IPV6));
+var_dump(filter_var('1fff::a88:85a3::172.31.128.1', FILTER_VALIDATE_IP,FILTER_FLAG_IPV6));
+
+?>
+--EXPECTF--
+bool(false)
+string(39) "3ffe:6a88:85a3:08d3:1319:8a2e:0370:7344"
+bool(false)
diff --git a/ext/filter/tests/bug47435.phpt b/ext/filter/tests/bug47435.phpt
new file mode 100644
index 0000000..957a001
--- /dev/null
+++ b/ext/filter/tests/bug47435.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Bug #47435 (FILTER_FLAG_NO_PRIV_RANGE and FILTER_FLAG_NO_RES_RANGE don't work with ipv6)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var("FC00::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("FC00::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_PRIV_RANGE));
+var_dump(filter_var("::", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("::", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("fe8:5:6::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("fe8:5:6::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("2001:0db8::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("2001:0db8::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("5f::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("5f::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var("3ff3::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var("3ff3::1", FILTER_VALIDATE_IP, FILTER_FLAG_IPV6 | FILTER_FLAG_NO_RES_RANGE));
+?>
+--EXPECT--
+string(7) "FC00::1"
+bool(false)
+string(2) "::"
+bool(false)
+string(3) "::1"
+bool(false)
+string(10) "fe8:5:6::1"
+bool(false)
+string(12) "2001:0db8::1"
+bool(false)
+string(5) "5f::1"
+bool(false)
+string(7) "3ff3::1"
+bool(false)
diff --git a/ext/filter/tests/bug47745.phpt b/ext/filter/tests/bug47745.phpt
new file mode 100644
index 0000000..feb0c2b
--- /dev/null
+++ b/ext/filter/tests/bug47745.phpt
@@ -0,0 +1,13 @@
+--TEST--
+Bug #47745 (FILTER_VALIDATE_INT doesn't allow minimum integer)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$s = (string)(-PHP_INT_MAX-1);
+var_dump(intval($s));
+var_dump(filter_var($s, FILTER_VALIDATE_INT));
+?>
+--EXPECTF--
+int(-%d)
+int(-%d)
diff --git a/ext/filter/tests/bug48762.phpt b/ext/filter/tests/bug48762.phpt
new file mode 100644
index 0000000..195a616
--- /dev/null
+++ b/ext/filter/tests/bug48762.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #48762 (IPv6 address filter still rejects valid address)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+var_dump(filter_var('0b15:23::3:67.98.234.17', FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+var_dump(filter_var('::67:78b:34.43.43.2', FILTER_VALIDATE_IP, FILTER_FLAG_IPV6));
+
+?>
+--EXPECT--
+string(23) "0b15:23::3:67.98.234.17"
+string(19) "::67:78b:34.43.43.2"
diff --git a/ext/filter/tests/bug49274.phpt b/ext/filter/tests/bug49274.phpt
new file mode 100644
index 0000000..c87e6be
--- /dev/null
+++ b/ext/filter/tests/bug49274.phpt
@@ -0,0 +1,10 @@
+--TEST--
+#49274, fatal error when an object does not implement toString
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var(new stdClass, FILTER_VALIDATE_EMAIL));
+?>
+--EXPECTF--
+bool(false)
diff --git a/ext/filter/tests/bug49510.phpt b/ext/filter/tests/bug49510.phpt
new file mode 100644
index 0000000..3f365cc
--- /dev/null
+++ b/ext/filter/tests/bug49510.phpt
@@ -0,0 +1,36 @@
+--TEST--
+#49510 boolean validation fails with FILTER_NULL_ON_FAILURE
+--FILE--
+<?php
+var_dump(filter_var(false, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+var_dump(filter_var(0, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+var_dump(filter_var("0", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+var_dump(filter_var("off", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+var_dump(filter_var("", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+var_dump(filter_var("false", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+var_dump(filter_var("no", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+
+var_dump(filter_var(true, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+var_dump(filter_var(1, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+var_dump(filter_var("1", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+var_dump(filter_var("on", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+var_dump(filter_var("yes", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+
+var_dump(filter_var("invalid", FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE));
+?>
+==DONE==
+--EXPECT--
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(false)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+bool(true)
+NULL
+==DONE==
diff --git a/ext/filter/tests/bug50158.phpt b/ext/filter/tests/bug50158.phpt
new file mode 100644
index 0000000..72c31a7
--- /dev/null
+++ b/ext/filter/tests/bug50158.phpt
@@ -0,0 +1,25 @@
+--TEST--
+Bug #50158 (FILTER_VALIDATE_EMAIL fails with valid addresses containing = or ?)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+$email_address = "test=mail@example.com";
+var_dump(filter_var($email_address, FILTER_VALIDATE_EMAIL));
+
+$email_address = "test-mail@example.com";
+var_dump(filter_var($email_address, FILTER_VALIDATE_EMAIL));
+
+$email_address = "test+mail@example.com";
+var_dump(filter_var($email_address, FILTER_VALIDATE_EMAIL));
+
+$email_address = "test?mail@example.com";
+var_dump(filter_var($email_address, FILTER_VALIDATE_EMAIL));
+
+?>
+--EXPECTF--
+%unicode|string%(21) "test=mail@example.com"
+%unicode|string%(21) "test-mail@example.com"
+%unicode|string%(21) "test+mail@example.com"
+%unicode|string%(21) "test?mail@example.com"
diff --git a/ext/filter/tests/bug50632.phpt b/ext/filter/tests/bug50632.phpt
new file mode 100644
index 0000000..2f33b91
--- /dev/null
+++ b/ext/filter/tests/bug50632.phpt
@@ -0,0 +1,11 @@
+--TEST--
+bug 50632, filter_input() does not return default value if the variable does not exist
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$foo = filter_input(INPUT_GET, 'foo', FILTER_VALIDATE_INT, array('flags' => FILTER_REQUIRE_SCALAR, 'options' => array('default' => 23)));
+var_dump($foo);
+?>
+--EXPECT--
+int(23)
diff --git a/ext/filter/tests/bug51192.phpt b/ext/filter/tests/bug51192.phpt
new file mode 100644
index 0000000..96c67ea
--- /dev/null
+++ b/ext/filter/tests/bug51192.phpt
@@ -0,0 +1,13 @@
+--TEST--
+bug 51192, FILTER_VALIDATE_URL will invalidate a hostname that includes '-'
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var('http://example.com/path', FILTER_VALIDATE_URL));
+var_dump(filter_var('http://exa-mple.com/path', FILTER_VALIDATE_URL));
+var_dump(filter_var('http://exa_mple.com/path', FILTER_VALIDATE_URL));
+--EXPECT--
+string(23) "http://example.com/path"
+string(24) "http://exa-mple.com/path"
+bool(false)
diff --git a/ext/filter/tests/bug52209.phpt b/ext/filter/tests/bug52209.phpt
new file mode 100644
index 0000000..79db749
--- /dev/null
+++ b/ext/filter/tests/bug52209.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #52209 (INPUT_ENV returns NULL for set variables (CLI))
+--SKIPIF--
+<?php
+/* This test makes no sense on windows as an empty variable
+ would never show up in the "set" list. Which means, it's
+ always undefined in PHP. */
+if(substr(PHP_OS, 0, 3) == "WIN") die("skip Not for Windows");
+if (!extension_loaded("filter") || !empty($_ENV['PWD'])) die("skip");
+?>
+--INI--
+variables_order=GPCSE
+--FILE--
+<?php
+ var_dump(filter_input(INPUT_ENV, 'PWD'));
+?>
+--EXPECTF--
+string(%d) "%s"
diff --git a/ext/filter/tests/bug52929.phpt b/ext/filter/tests/bug52929.phpt
new file mode 100644
index 0000000..2933295
--- /dev/null
+++ b/ext/filter/tests/bug52929.phpt
@@ -0,0 +1,18 @@
+--TEST--
+Bug #52929 (Segfault in filter_var with FILTER_VALIDATE_EMAIL with large amount of data)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var('valid@email.address', FILTER_VALIDATE_EMAIL));
+
+// Beyond the allowable limit for an e-mail address.
+var_dump(filter_var('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx@yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy.zz', FILTER_VALIDATE_EMAIL));
+
+// An invalid address likely to crash PHP due to stack exhaustion if it goes to
+// the validation regex.
+var_dump(filter_var(str_repeat('x', 8000), FILTER_VALIDATE_EMAIL));
+--EXPECT--
+string(19) "valid@email.address"
+bool(false)
+bool(false)
diff --git a/ext/filter/tests/bug53037.phpt b/ext/filter/tests/bug53037.phpt
new file mode 100644
index 0000000..4a1e9e3
--- /dev/null
+++ b/ext/filter/tests/bug53037.phpt
@@ -0,0 +1,14 @@
+--TEST--
+Bug #53037 (FILTER_FLAG_EMPTY_STRING_NULL is not implemented)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(
+ filter_var("", FILTER_DEFAULT),
+ filter_var("", FILTER_DEFAULT, array('flags' => FILTER_FLAG_EMPTY_STRING_NULL))
+);
+?>
+--EXPECT--
+string(0) ""
+NULL
diff --git a/ext/filter/tests/bug53150.phpt b/ext/filter/tests/bug53150.phpt
new file mode 100644
index 0000000..4baa4db
--- /dev/null
+++ b/ext/filter/tests/bug53150.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Bug #53150 (FILTER_FLAG_NO_RES_RANGE is missing some IP ranges)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var('127.0.0.1', FILTER_VALIDATE_IP));
+var_dump(filter_var("::1", FILTER_VALIDATE_IP));
+
+var_dump(filter_var('127.0.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+var_dump(filter_var('::1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+
+var_dump(filter_var('128.0.0.1', FILTER_VALIDATE_IP));
+var_dump(filter_var('128.0.0.1', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+
+var_dump(filter_var('191.255.0.0', FILTER_VALIDATE_IP));
+var_dump(filter_var('191.255.0.0', FILTER_VALIDATE_IP, FILTER_FLAG_NO_RES_RANGE));
+
+?>
+--EXPECT--
+string(9) "127.0.0.1"
+string(3) "::1"
+bool(false)
+bool(false)
+string(9) "128.0.0.1"
+bool(false)
+string(11) "191.255.0.0"
+bool(false)
diff --git a/ext/filter/tests/bug55478.phpt b/ext/filter/tests/bug55478.phpt
new file mode 100644
index 0000000..243d707
--- /dev/null
+++ b/ext/filter/tests/bug55478.phpt
@@ -0,0 +1,11 @@
+--TEST--
+Bug #55478 (FILTER_VALIDATE_EMAIL fails with internationalized domain name addresses containing >1 -)
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$email_address = "test@xn--example--7za.de"; // "example-รค.de"
+var_dump(filter_var($email_address, FILTER_VALIDATE_EMAIL));
+?>
+--EXPECT--
+string(24) "test@xn--example--7za.de"
diff --git a/ext/filter/tests/bug7586.phpt b/ext/filter/tests/bug7586.phpt
new file mode 100644
index 0000000..74e55ff
--- /dev/null
+++ b/ext/filter/tests/bug7586.phpt
@@ -0,0 +1,55 @@
+--TEST--
+input_get_args() filter not reseted between elements
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$data = array(
+ 'product_id' => 'libgd<script>',
+ 'component' => '10dhsajkkdhk <do>',
+ 'versions' => '2.0.33',
+ 'testscalar' => array('2','23','10','12'),
+ 'testarray' => '2',
+);
+
+$args = array(
+ 'product_id' => FILTER_SANITIZE_ENCODED,
+ 'component' => array('flags' => FILTER_FORCE_ARRAY,
+ 'options' => array("min_range"=>1, "max_range"=>10)
+ ),
+ 'versions' => array(
+ 'filter' => FILTER_SANITIZE_ENCODED,
+ 'flags' => FILTER_REQUIRE_SCALAR,
+ ),
+ 'doesnotexist' => FILTER_VALIDATE_INT,
+ 'testscalar' => FILTER_VALIDATE_INT,
+ 'testarray' => array(
+ 'filter' => FILTER_VALIDATE_INT,
+ 'flags' => FILTER_FORCE_ARRAY,
+ )
+
+);
+$out = filter_var_array($data, $args);
+var_dump($out);
+?>
+--EXPECTF--
+array(6) {
+ ["product_id"]=>
+ string(17) "libgd%3Cscript%3E"
+ ["component"]=>
+ array(1) {
+ [0]=>
+ string(17) "%s"
+ }
+ ["versions"]=>
+ string(6) "2.0.33"
+ ["doesnotexist"]=>
+ NULL
+ ["testscalar"]=>
+ bool(false)
+ ["testarray"]=>
+ array(1) {
+ [0]=>
+ int(2)
+ }
+}
diff --git a/ext/filter/tests/bug7715.phpt b/ext/filter/tests/bug7715.phpt
new file mode 100644
index 0000000..4298d50
--- /dev/null
+++ b/ext/filter/tests/bug7715.phpt
@@ -0,0 +1,33 @@
+--TEST--
+bug 7715, floats value with integer or incomplete input
+--INI--
+precision=14
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$data = array(
+ '.23',
+ '-42',
+ '+42',
+ '.4',
+ '-.4',
+ '1000000000000',
+ '-1000000000000',
+ '02.324'
+);
+foreach ($data as $val) {
+ $res = filter_var($val, FILTER_VALIDATE_FLOAT);
+ var_dump($res);
+}
+echo "\n";
+?>
+--EXPECTF--
+float(0.23)
+float(-42)
+float(42)
+float(0.4)
+float(-0.4)
+float(1000000000000)
+float(-1000000000000)
+float(2.324)
diff --git a/ext/filter/tests/bug7733.phpt b/ext/filter/tests/bug7733.phpt
new file mode 100644
index 0000000..ab02123
--- /dev/null
+++ b/ext/filter/tests/bug7733.phpt
@@ -0,0 +1,29 @@
+--TEST--
+filter_data() Float exponential weird result
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$data = array(
+ 'E2',
+ '10E',
+ '2E-',
+ 'E-2',
+ '+E2'
+ );
+$out = filter_var($data, FILTER_VALIDATE_FLOAT, FILTER_REQUIRE_ARRAY);
+var_dump($out);
+?>
+--EXPECTF--
+array(5) {
+ [0]=>
+ bool(false)
+ [1]=>
+ bool(false)
+ [2]=>
+ bool(false)
+ [3]=>
+ bool(false)
+ [4]=>
+ bool(false)
+}
diff --git a/ext/filter/tests/bug8315.phpt b/ext/filter/tests/bug8315.phpt
new file mode 100644
index 0000000..094d82f
--- /dev/null
+++ b/ext/filter/tests/bug8315.phpt
@@ -0,0 +1,15 @@
+--TEST--
+bug 8315, NULL values halt the validation
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+
+$var="3".chr(0)."foo";
+var_dump(filter_var($var, FILTER_VALIDATE_INT));
+$var="3".chr(0)."foo";
+var_dump(filter_var($var, FILTER_VALIDATE_FLOAT));
+?>
+--EXPECT--
+bool(false)
+bool(false)
diff --git a/ext/filter/tests/callback_closure.phpt b/ext/filter/tests/callback_closure.phpt
new file mode 100644
index 0000000..e27a31b
--- /dev/null
+++ b/ext/filter/tests/callback_closure.phpt
@@ -0,0 +1,14 @@
+--TEST--
+callback function is a closure
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+$callback = function ($var) {
+ return $var;
+};
+$var = "test";
+var_dump(filter_var($var, FILTER_CALLBACK, array('options'=> $callback)));
+?>
+--EXPECT--
+string(4) "test"
diff --git a/ext/filter/tests/callback_non_modified_var.phpt b/ext/filter/tests/callback_non_modified_var.phpt
new file mode 100644
index 0000000..f0d5575
--- /dev/null
+++ b/ext/filter/tests/callback_non_modified_var.phpt
@@ -0,0 +1,14 @@
+--TEST--
+callback function returns non modified value
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+function callback($var) {
+ return $var;
+}
+$var = "test";
+var_dump(filter_var($var, FILTER_CALLBACK, array('options'=>'callback')));
+?>
+--EXPECT--
+string(4) "test"
diff --git a/ext/filter/tests/filter_data.phpt b/ext/filter/tests/filter_data.phpt
new file mode 100644
index 0000000..f83d986
--- /dev/null
+++ b/ext/filter/tests/filter_data.phpt
@@ -0,0 +1,83 @@
+--TEST--
+Simple filter_var() tests
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--INI--
+precision=14
+--FILE--
+<?php
+
+/* Integer */
+$data = "-123"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = "0"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = "-0"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = "+0"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = "123"; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = -123; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = 0; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = -0; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = +0; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = 123; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+$data = ""; var_dump(filter_var($data, FILTER_VALIDATE_INT));
+echo "\n";
+
+/* Float */
+$data = "-0.123"; var_dump(filter_var($data, FILTER_VALIDATE_FLOAT));
+$data = "0.00"; var_dump(filter_var($data, FILTER_VALIDATE_FLOAT));
+$data = "1.23"; var_dump(filter_var($data, FILTER_VALIDATE_FLOAT));
+$data = -1.23; var_dump(filter_var($data, FILTER_VALIDATE_FLOAT));
+$data = 0.0; var_dump(filter_var($data, FILTER_VALIDATE_FLOAT));
+$data = 1.23; var_dump(filter_var($data, FILTER_VALIDATE_FLOAT));
+$data = ""; var_dump(filter_var($data, FILTER_VALIDATE_FLOAT));
+echo "\n";
+
+/* Boolean */
+$data = "on"; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = "off"; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = "yes"; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = "no"; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = "true"; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = "false"; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = "1"; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = "0"; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = 1; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = 0; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = true; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = false; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+$data = ""; var_dump(filter_var($data, FILTER_VALIDATE_BOOLEAN));
+
+?>
+--EXPECT--
+int(-123)
+int(0)
+int(0)
+int(0)
+int(123)
+int(-123)
+int(0)
+int(0)
+int(0)
+int(123)
+bool(false)
+
+float(-0.123)
+float(0)
+float(1.23)
+float(-1.23)
+float(0)
+float(1.23)
+bool(false)
+
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+bool(true)
+bool(false)
+bool(false)