--- /dev/null
+--TEST--
+Test stripslashes() function : error conditions
+--FILE--
+<?php
+/* Prototype : string stripslashes ( string $str )
+ * Description: Returns an un-quoted string
+ * Source code: ext/standard/string.c
+*/
+
+/*
+ * Testing stripslashes() for error conditions
+*/
+
+echo "*** Testing stripslashes() : error conditions ***\n";
+
+// Zero argument
+echo "\n-- Testing stripslashes() function with Zero arguments --\n";
+var_dump( stripslashes() );
+
+// More than expected number of arguments
+echo "\n-- Testing stripslashes() function with more than expected no. of arguments --\n";
+$str = '\"hello\"\"world\"';
+$extra_arg = 10;
+
+var_dump( stripslashes($str, $extra_arg) );
+var_dump( $str );
+
+echo "Done\n";
+?>
+--EXPECTF--
+*** Testing stripslashes() : error conditions ***
+
+-- Testing stripslashes() function with Zero arguments --
+
+Warning: Wrong parameter count for stripslashes() in %s on line %d
+NULL
+
+-- Testing stripslashes() function with more than expected no. of arguments --
+
+Warning: Wrong parameter count for stripslashes() in %s on line %d
+NULL
+string(18) "\"hello\"\"world\""
+Done
--- /dev/null
+--TEST--
+Test stripslashes() function : usage variations - non-string type argument
+--FILE--
+<?php
+/* Prototype : string stripslashes ( string $str )
+ * Description: Returns an un-quoted string
+ * Source code: ext/standard/string.c
+*/
+
+/*
+ * Test stripslashes() with non-string type argument such as int, float, etc
+*/
+
+echo "*** Testing stripslashes() : with non-string type argument ***\n";
+// initialize all required variables
+
+// get an unset variable
+$unset_var = 'string_val';
+unset($unset_var);
+
+// declaring a class
+class sample {
+ public function __toString() {
+ return "obj\'ct";
+ }
+}
+
+// Defining resource
+$file_handle = fopen(__FILE__, 'r');
+
+// array with different values
+$values = array (
+
+ // integer values
+ 0,
+ 1,
+ 12345,
+ -2345,
+
+ // float values
+ 10.5,
+ -10.5,
+ 10.5e10,
+ 10.6E-10,
+ .5,
+
+ // array values
+ array(),
+ array(0),
+ array(1),
+ array(1, 2),
+ array('color' => 'red', 'item' => 'pen'),
+
+ // boolean values
+ true,
+ false,
+ TRUE,
+ FALSE,
+
+ // empty string
+ "",
+ '',
+
+ // undefined variable
+ $undefined_var,
+
+ // unset variable
+ $unset_var,
+
+ // objects
+ new sample(),
+
+ // resource
+ $file_handle,
+
+ // NULL values
+ NULL,
+ null
+);
+
+
+// loop through each element of the array and check the working of stripslashes()
+// when $str arugment is supplied with different values
+echo "\n--- Testing stripslashes() by supplying different values for 'str' argument ---\n";
+$counter = 1;
+for($index = 0; $index < count($values); $index ++) {
+ echo "-- Iteration $counter --\n";
+ $str = $values [$index];
+
+ var_dump( stripslashes($str) );
+
+ $counter ++;
+}
+
+// closing the file
+fclose($file_handle);
+
+echo "Done\n";
+?>
+--EXPECTF--
+*** Testing stripslashes() : with non-string type argument ***
+
+Notice: Undefined variable: undefined_var in %s on line %d
+
+Notice: Undefined variable: unset_var in %s on line %d
+
+--- Testing stripslashes() by supplying different values for 'str' argument ---
+-- Iteration 1 --
+string(1) "0"
+-- Iteration 2 --
+string(1) "1"
+-- Iteration 3 --
+string(5) "12345"
+-- Iteration 4 --
+string(5) "-2345"
+-- Iteration 5 --
+string(4) "10.5"
+-- Iteration 6 --
+string(5) "-10.5"
+-- Iteration 7 --
+string(12) "105000000000"
+-- Iteration 8 --
+string(7) "1.06E-9"
+-- Iteration 9 --
+string(3) "0.5"
+-- Iteration 10 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 11 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 12 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 13 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 14 --
+
+Notice: Array to string conversion in %s on line %d
+string(5) "Array"
+-- Iteration 15 --
+string(1) "1"
+-- Iteration 16 --
+string(0) ""
+-- Iteration 17 --
+string(1) "1"
+-- Iteration 18 --
+string(0) ""
+-- Iteration 19 --
+string(0) ""
+-- Iteration 20 --
+string(0) ""
+-- Iteration 21 --
+string(0) ""
+-- Iteration 22 --
+string(0) ""
+-- Iteration 23 --
+string(6) "obj'ct"
+-- Iteration 24 --
+string(14) "Resource id #%d"
+-- Iteration 25 --
+string(0) ""
+-- Iteration 26 --
+string(0) ""
+Done
--- /dev/null
+--TEST--
+Test stripslashes() function : usage variations - strings with newline and tab characters
+--FILE--
+<?php
+/* Prototype : string stripslashes ( string $str )
+ * Description: Returns an un-quoted string
+ * Source code: ext/standard/string.c
+*/
+
+/*
+ * Test stripslashes() with strings containing newline and tab characters.
+*/
+
+echo "*** Testing stripslashes() : with strings containing newline and tab characters ***\n";
+
+// initialising heredoc strings
+$heredoc_string_with_newline = <<<EOT
+This is line 1 \nof 'heredoc' string
+This is line 2 \nof "heredoc" string
+EOT;
+
+$heredoc_string_with_tab = <<<EOT
+This is line 1 \tof 'heredoc' string
+This is line 2 \tof "heredoc" string
+EOT;
+// initialising the string array
+
+$str_array = array(
+ // string with newline character
+ "\n",
+ "\\n",
+ "Hello \nworld",
+ "Hello \\nworld",
+ '\n',
+ '\\n',
+ 'Hello \nworld',
+ 'Hello \\nworld',
+ $heredoc_string_with_newline,
+
+ // string with tab character
+ "\t",
+ "\\t",
+ "Hello \tworld",
+ "Hello \\tworld",
+ '\t',
+ '\\t',
+ 'Hello \tworld',
+ 'Hello \\tworld',
+ $heredoc_string_with_tab
+ );
+
+$count = 1;
+// looping to test for all strings in $str_array
+foreach( $str_array as $str ) {
+ echo "\n-- Iteration $count --\n";
+ var_dump( stripslashes($str) );
+ $count ++;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+*** Testing stripslashes() : with strings containing newline and tab characters ***
+
+-- Iteration 1 --
+string(1) "
+"
+
+-- Iteration 2 --
+string(1) "n"
+
+-- Iteration 3 --
+string(12) "Hello
+world"
+
+-- Iteration 4 --
+string(12) "Hello nworld"
+
+-- Iteration 5 --
+string(1) "n"
+
+-- Iteration 6 --
+string(1) "n"
+
+-- Iteration 7 --
+string(12) "Hello nworld"
+
+-- Iteration 8 --
+string(12) "Hello nworld"
+
+-- Iteration 9 --
+string(71) "This is line 1
+of 'heredoc' string
+This is line 2
+of "heredoc" string"
+
+-- Iteration 10 --
+string(1) " "
+
+-- Iteration 11 --
+string(1) "t"
+
+-- Iteration 12 --
+string(12) "Hello world"
+
+-- Iteration 13 --
+string(12) "Hello tworld"
+
+-- Iteration 14 --
+string(1) "t"
+
+-- Iteration 15 --
+string(1) "t"
+
+-- Iteration 16 --
+string(12) "Hello tworld"
+
+-- Iteration 17 --
+string(12) "Hello tworld"
+
+-- Iteration 18 --
+string(71) "This is line 1 of 'heredoc' string
+This is line 2 of "heredoc" string"
+Done
--- /dev/null
+--TEST--
+Test stripslashes() function : usage variations - double dimensional arrays
+--FILE--
+<?php
+/* Prototype : string stripslashes ( string $str )
+ * Description: Returns an un-quoted string
+ * Source code: ext/standard/string.c
+*/
+
+/*
+ * Test stripslashes() with double dimensional arrays
+*/
+
+echo "*** Testing stripslashes() : with double dimensional arrays ***\n";
+
+// initialising the string array
+
+$str_array = array(
+ array("", array()),
+ array("", array("")),
+ array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar")),
+ array("f\\'oo", "b\\'ar", array("")),
+ array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar", array(""))),
+ array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar", array("fo\\'o", "b\\'ar")))
+ );
+function stripslashes_deep($value) {
+ $value = is_array($value) ? array_map('stripslashes_deep', $value) : stripslashes($value);
+ return $value;
+}
+
+$count = 1;
+// looping to test for all strings in $str_array
+foreach( $str_array as $arr ) {
+ echo "\n-- Iteration $count --\n";
+ var_dump( stripslashes_deep($arr) );
+ $count ++;
+}
+
+echo "Done\n";
+?>
+--EXPECTF--
+*** Testing stripslashes() : with double dimensional arrays ***
+
+-- Iteration 1 --
+array(2) {
+ [0]=>
+ string(0) ""
+ [1]=>
+ array(0) {
+ }
+}
+
+-- Iteration 2 --
+array(2) {
+ [0]=>
+ string(0) ""
+ [1]=>
+ array(1) {
+ [0]=>
+ string(0) ""
+ }
+}
+
+-- Iteration 3 --
+array(3) {
+ [0]=>
+ string(4) "f'oo"
+ [1]=>
+ string(4) "b'ar"
+ [2]=>
+ array(2) {
+ [0]=>
+ string(4) "fo'o"
+ [1]=>
+ string(4) "b'ar"
+ }
+}
+
+-- Iteration 4 --
+array(3) {
+ [0]=>
+ string(4) "f'oo"
+ [1]=>
+ string(4) "b'ar"
+ [2]=>
+ array(1) {
+ [0]=>
+ string(0) ""
+ }
+}
+
+-- Iteration 5 --
+array(3) {
+ [0]=>
+ string(4) "f'oo"
+ [1]=>
+ string(4) "b'ar"
+ [2]=>
+ array(3) {
+ [0]=>
+ string(4) "fo'o"
+ [1]=>
+ string(4) "b'ar"
+ [2]=>
+ array(1) {
+ [0]=>
+ string(0) ""
+ }
+ }
+}
+
+-- Iteration 6 --
+array(3) {
+ [0]=>
+ string(4) "f'oo"
+ [1]=>
+ string(4) "b'ar"
+ [2]=>
+ array(3) {
+ [0]=>
+ string(4) "fo'o"
+ [1]=>
+ string(4) "b'ar"
+ [2]=>
+ array(2) {
+ [0]=>
+ string(4) "fo'o"
+ [1]=>
+ string(4) "b'ar"
+ }
+ }
+}
+Done