#31324 [Fbk->Opn]: function strlen miscounts
| From: | phpbug at tore dot cc | Date: | Wed, 29 Dec 2004 06:34:43 +0000 |
| Subject: | #31324 [Fbk->Opn]: function strlen miscounts | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-71203@lists.php.net to get a copy of this message | ||
ID: 31324
User updated by: phpbug at tore dot cc
Reported By: phpbug at tore dot cc
-Status: Feedback
+Status: Open
Bug Type: Strings related
Operating System: Solaris 10
PHP Version: 5.0.2
New Comment:
I have used gcc2 and gcc3 to compile.
The machine is a sparc.
The problem occurs on solaris 9 and solaris 10.
If you suspect that this is a solaris problem, can you extract the code
for 'strlen' in php. I could make some tests in C....
Previous Comments:
------------------------------------------------------------------------
[2004-12-28 23:59:37] derick@php.net
It still works fine for me on Linux. Which compiler did you use to
compile PHP (gcc or sun workshop), and what kind of platform do you
use? intel (32/64), sparc...
------------------------------------------------------------------------
[2004-12-28 23:40:36] phpbug at tore dot cc
Sorry, my mistake!
It seems to work on one char long strings.
I made a better script (still avoiding loops...).
<?php
$s=pack("C*",0x8e,0x8f);
$t=pack("C*",0x8e);
$u=pack("C*",0x8e,0x8f,0x90);
print "The variable s has the length: " . strlen($s) . "\n";
print "The variable t has the length: " . strlen($t) . "\n";
print "The variable u has the length: " . strlen($u) . "\n";
?>
Result:
The variable s has the length: 1
The variable t has the length: 1
The variable u has the length: 2
The result should be:
The variable s has the length: 2
The variable t has the length: 1
The variable u has the length: 3
Since s=2 chars, t=1 char and u 3 chars long.
Lets try another test with 7 bit chars.
<?php
$s=pack("C*",0x30,0x31);
$t=pack("C*",0x30);
$u=pack("C*",0x30,0x31,0x32);
print "The variable s has the length: " . strlen($s) . "\n";
print "The variable t has the length: " . strlen($t) . "\n";
print "The variable u has the length: " . strlen($u) . "\n";
?>
Result:
The variable s has the length: 2
The variable t has the length: 1
The variable u has the length: 3
As expected. No problem with low values on the chars.
------------------------------------------------------------------------
[2004-12-28 23:07:29] derick@php.net
Please try using this CVS snapshot:
http://snaps.php.net/php5-STABLE-latest.tar.gz
For Windows:
http://snaps.php.net/win32/php5.0-win32-latest.zip
Both in 4.3.10RC2, 5.0.3-dev, and 5.1.0-dev it prints as expected:
The variable s has the length: 1 (actual length) 1
So please try a snapshot.
------------------------------------------------------------------------
[2004-12-28 21:57:50] phpbug at tore dot cc
How about:
<?php
$s=pack("C",143);
$result = count_chars($s, 0);
print "The variable s has the length: " .
strlen($s) . " (actual length) " . $result[143] .
"\n";
?>
Gives printout:
The variable s has the length: 0 (actual length) 1
The 'pack' creates a bit-string with a length of 1 char.
The 'strlen' should should recognize it as a char with length 1. As you
can see below 'strlen' does not only miscalculates the string length for
the char 143.
------------------------------------------------------------------------
[2004-12-28 19:19:36] derick@php.net
I don't understand what your script is doing, please come up with a
trivial script instead of those loops.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/31324
--
Edit this bug report at http://bugs.php.net/?id=31324&edit=1