ID:               42101
 Updated by:       [EMAIL PROTECTED]
 Reported By:      mcorne at yahoo dot com
-Status:           Assigned
+Status:           No Feedback
 Bug Type:         mbstring related
 Operating System: Linux x86-64
 PHP Version:      5.2.4RC2-dev
 Assigned To:      hirokawa
 New Comment:

No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Open". Thank you.




Previous Comments:
------------------------------------------------------------------------

[2007-09-22 01:32:00] [EMAIL PROTECTED]

I reproduced the same issue with mb_substr() on my Athlon 64/x2
machine.

I believe that substr() is also has the same 64bit issue.

It is a sample script (tested on my x86/64 Ubuntu Linux, Athlon 64x2)
<?php
 echo substr("\x44\xCC\x87", 0, 1024);          // output:
0x44,0xcc,0x87
 echo substr("\x44\xCC\x87", 0, PHP_INT_MAX);   // output: 0x44,0xcc
 echo substr("\x44\xCC\x87", 0, PHP_INT_MAX-1); // output: 0x44
 echo substr("\x44\xCC\x87", 0, PHP_INT_MAX-2); // output: 
?>

I think PHP itself is not 64bit compatible.
Why didn't you submit a bug report for substr() ?



------------------------------------------------------------------------

[2007-08-17 13:49:09] [EMAIL PROTECTED]

Assigned to the maintainer of mbstring extension.

------------------------------------------------------------------------

[2007-08-15 06:45:07] mcorne at yahoo dot com

Same issue on the latest release.
Test done on:
PHP Version => 5.2.4RC2-dev
System => Linux durbatuluk 2.6.20-16-generic #2 SMP Thu Jun 7 19:00:28
UTC 2007 x86_64
Build Date => Aug 13 2007 21:59:11

------------------------------------------------------------------------

[2007-07-25 12:10:28] mcorne at yahoo dot com

Description:
------------
mb_substr("\x44\xCC\x87", 0, PHP_INT_MAX, 'UTF-8') only captures the
first character on linux 64-bit instead of returning the whole string.
Note that this works fine on Windows XP and Linux 32-bit.

Reproduce code:
---------------
function substring($string, $length)
{
    $substr = mb_substr($string, 0, $length , 'UTF-8');
    $length = strlen($substr);
    $chars = $length? unpack("C{$length}chars", $substr) : array();
    $decs = array_map('dechex', $chars);
    return array($substr, $decs);
}

$test['string'] = "\x44\xCC\x87";
$test['utf8'] = '\x44\xCC\x87';
$test['unicode'] = '\u0044\u0307';
$test['PHP_INT_MAX'] = PHP_INT_MAX;
$test['php_int_max'] = substring($test['string'], PHP_INT_MAX);
$test['9999'] = substring($test['string'], 9999);

print_r($test);


Expected result:
----------------
Array
(
    [string] => D&#775;
    [utf8] => \x44\xCC\x87
    [unicode] => \u0044\u0307
    [PHP_INT_MAX] => 2147483647
    [php_int_max] => Array
        (
            [0] => D&#775;
            [1] => Array
                (
                    [chars1] => 44
                    [chars2] => cc
                    [chars3] => 87
                )

        )

    [9999] => Array
        (
            [0] => D&#775;
            [1] => Array
                (
                    [chars1] => 44
                    [chars2] => cc
                    [chars3] => 87
                )

        )

)

Actual result:
--------------
Array
(
    [string] => D&#775;
    [utf8] => \x44\xCC\x87
    [unicode] => \u0044\u0307
    [PHP_INT_MAX] => 2147483647
    [php_int_max] => Array
        (
            [0] => D
            [1] => Array
                (
                    [chars1] => 44
                )

        )

    [9999] => Array
        (
            [0] => D&#775;
            [1] => Array
                (
                    [chars1] => 44
                    [chars2] => cc
                    [chars3] => 87
                )

        )

)


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=42101&edit=1

Reply via email to