]> granicus.if.org Git - php/commitdiff
allow NULL argument to be passed where binary string expected
authorAntony Dovgal <tony2001@php.net>
Wed, 26 Mar 2008 09:09:08 +0000 (09:09 +0000)
committerAntony Dovgal <tony2001@php.net>
Wed, 26 Mar 2008 09:09:08 +0000 (09:09 +0000)
Zend/tests/null_argument_001.phpt [new file with mode: 0644]
Zend/zend_API.c

diff --git a/Zend/tests/null_argument_001.phpt b/Zend/tests/null_argument_001.phpt
new file mode 100644 (file)
index 0000000..9a5c707
--- /dev/null
@@ -0,0 +1,52 @@
+--TEST--
+NULL argument is allowed where binary string expected
+--FILE--
+<?php
+
+var_dump(urldecode(null));
+var_dump(urldecode(b""));
+var_dump(urldecode(""));
+var_dump(urldecode(array()));
+var_dump(urldecode(1));
+var_dump(urldecode(false));
+var_dump(urldecode(new stdclass));
+
+$fp = fopen(__FILE__, "r");
+var_dump(urldecode($fp));
+
+echo "Done\n";
+?>
+--EXPECTF--    
+string(0) ""
+string(0) ""
+string(0) ""
+
+Warning: urldecode() expects parameter 1 to be string, array given in %s on line %d
+NULL
+string(1) "1"
+string(0) ""
+
+Warning: urldecode() expects parameter 1 to be string, object given in %s on line %d
+NULL
+
+Warning: urldecode() expects parameter 1 to be string, resource given in %s on line %d
+NULL
+Done
+--UEXPECTF--
+string(0) ""
+string(0) ""
+
+Warning: urldecode() expects parameter 1 to be strictly a binary string, Unicode string given in %s on line %d
+NULL
+
+Warning: urldecode() expects parameter 1 to be binary string, array given in %s on line %d
+NULL
+string(1) "1"
+string(0) ""
+
+Warning: urldecode() expects parameter 1 to be binary string, object given in %s on line %d
+NULL
+
+Warning: urldecode() expects parameter 1 to be binary string, resource given in %s on line %d
+NULL
+Done
index d20439f70a58b9c2bd62aa68492b25d099641548..c386b66513e2a9db236a088447a09b8fd5f78cfb 100644 (file)
@@ -476,7 +476,7 @@ static char *zend_parse_arg_impl(int arg_num, zval **arg, va_list *va, char **sp
                                                        *p = Z_STRVAL_PP(arg);
                                                        *pl = Z_STRLEN_PP(arg);
                                                        break;
-                                               } else if (c == 'S') {
+                                               } else if (c == 'S' && Z_TYPE_PP(arg) != IS_NULL /* NULL is ok */) {
                                                        return "strictly a binary string";
                                                }
                                                /* fall through */