ID: 26906
Updated by: [EMAIL PROTECTED]
Reported By: scottmacvicar at ntlworld dot com
-Status: Open
+Status: Bogus
Bug Type: Scripting Engine problem
Operating System: All
PHP Version: 4CVS-2004-01-14 (stable)
New Comment:
As PHP is a typeless language, this behaviour is expected. Please take
a look at this extended version of your script:
var_dump((string)'foo', strlen('foo')); // 3
var_dump((string)true, strlen(true)); // 1
var_dump((string)false, strlen(false)); // 0
var_dump((string)array('foo', 'bar'), strlen(array('foo', 'bar'))); //
5
Previous Comments:
------------------------------------------------------------------------
[2004-01-14 13:25:53] scottmacvicar at ntlworld dot com
Patch
diff -u zend_builtin_functions.c zend_builtin_functions.c.patched
--- zend_builtin_functions.c 2003-08-28 18:06:52.000000000 +0100
+++ zend_builtin_functions.c.patched 2004-01-14 17:46:02.000000000
+0000
@@ -260,6 +260,16 @@
if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &str) ==
FAILURE) {
ZEND_WRONG_PARAM_COUNT();
}
+ switch((*str)->type) {
+ case IS_LONG:
+ case IS_DOUBLE:
+ case IS_STRING:
+ break;
+ default:
+ zend_error(E_WARNING, "Variable passed to
strlen() is not a string or number");
+ RETURN_LONG(-1);
+ break;
+ }
convert_to_string_ex(str);
RETVAL_LONG((*str)->value.str.len);
}
------------------------------------------------------------------------
[2004-01-14 13:24:49] scottmacvicar at ntlworld dot com
Description:
------------
strlen will return a value for boolean types as well as a consitent
value of 5 for an array.
Reproduce code:
---------------
<?php
var_dump(strlen('foo')); // 3
var_dump(strlen(true)); // 1
var_dump(strlen(false)); // 0
var_dump(strlen(array('foo', 'bar'))); // 5
?>
Expected result:
----------------
string foo = int(3)
bool true = int(-1)
bool false = int(-1)
array('foo', 'bar') = int(-1)
Actual result:
--------------
string foo = int(3)
bool true = int(1)
bool false = int(0)
array('foo', 'bar') = int(5)
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=26906&edit=1