#48708 [Opn->Fbk]: Year can't be displayed on big endian system
| From: | derick@php.net | Date: | Sat, 27 Jun 2009 20:59:45 +0000 |
| Subject: | #48708 [Opn->Fbk]: Year can't be displayed on big endian system | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-138880@lists.php.net to get a copy of this message | ||
ID: 48708
Updated by: derick@php.net
Reported By: l_faillie at yahoo dot com
-Status: Open
+Status: Feedback
Bug Type: Date/time related
Operating System: All
PHP Version: 5.2.10
New Comment:
Please try using this CVS snapshot:
http://snaps.php.net/php5.3-latest.tar.gz
For Windows:
http://windows.php.net/snapshots/
Previous Comments:
------------------------------------------------------------------------
[2009-06-27 16:04:36] l_faillie at yahoo dot com
In ext/date/php_date.c, t->y (years) are stored as wide_int which is
'long long int' 64 bits but vararg or main/snprintf.c retrieve it as
'long int' (32 bits).
As consequence, on big endian system, only upper part is take in
account and contains only 0.
Tested on NetBSD / Sparc system but I guess reproducible on all big
endian system (IBM, sparc, 68000, ...).
Bye the way, what is the need having 64b years which as been introduced
w/ 5.2.10 ?
Bye
Laurent
------------------------------------------------------------------------
[2009-06-27 15:58:02] l_faillie at yahoo dot com
Description:
------------
In ext/date/php_date.c, years are stored as 64b integers but displayed
using "%04ld" (32b integers). Only work on little endian system
Reproduce code:
---------------
echo date('Y y o');
"0000 09 2009".
Expected result:
----------------
"2009 09 2009"
Actual result:
--------------
"0000 09 2009"
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=48708&edit=1