ID:               15362
 Updated by:       [EMAIL PROTECTED]
-Reported By:      [EMAIL PROTECTED]
+Reported By:      [EMAIL PROTECTED]
 Status:           Open
 Bug Type:         Date/time related
 Operating System: Linux 6.2 and 7.2
 PHP Version:      4.1.1
 New Comment:

This is a bug in the ext/standard/datetime.c php_date function. 

here is the diff 

*** php-4.1.1/ext/standard/datetime.c.orig      Thu Feb  7 23:01:22
2002
--- php-4.1.1/ext/standard/datetime.c   Thu Feb  7 23:02:09 2002
***************
*** 449,453 ****
                        case 'O':               /* GMT offset in
[+-]HHMM format */
  #if HAVE_TM_GMTOFF                            
!                               sprintf(tmp_buff, "%c%02d%02d",
(ta->tm_gmtoff < 0) ? '-' : '+', abs(ta->tm_gmtoff / 3600), abs(
ta->tm_gmtoff % 3600));
  #else
                                sprintf(tmp_buff, "%c%02d%02d",
((ta->tm_isdst ? tzone - 3600:tzone)>0)?'-':'+', abs((ta->tm_isdst ?
tzone - 3600 : tzone) / 3600), abs((ta->tm_isdst ? tzone - 3600 :
tzone) % 3600));
--- 449,453 ----
                        case 'O':               /* GMT offset in
[+-]HHMM format */
  #if HAVE_TM_GMTOFF                            
!                               sprintf(tmp_buff, "%c%02d%02d",
(ta->tm_gmtoff < 0) ? '-' : '+', abs(ta->tm_gmtoff / 3600), abs( (
ta->tm_gmtoff % 3600 ) / 60 ));
  #else
                                sprintf(tmp_buff, "%c%02d%02d",
((ta->tm_isdst ? tzone - 3600:tzone)>0)?'-':'+', abs((ta->tm_isdst ?
tzone - 3600 : tzone) / 3600), abs((ta->tm_isdst ? tzone - 3600 :
tzone) % 3600));
***************
*** 500,504 ****
                                        (ta->tm_gmtoff < 0) ? '-' :
'+',
                                        abs(ta->tm_gmtoff / 3600),
!                                       abs( ta->tm_gmtoff % 3600)
                                );
  #else
--- 500,504 ----
                                        (ta->tm_gmtoff < 0) ? '-' :
'+',
                                        abs(ta->tm_gmtoff / 3600),
!                                       abs( (ta->tm_gmtoff % 3600) /
60 )
                                );
  #else


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

[2002-02-03 21:12:13] [EMAIL PROTECTED]

I have tested both PHP 4.1.1 and PHP 4.05 and the following occurs for
both.

The date('r') call returns the wrong timezone offset (in my case
"+101800") which causes a buffer overflow in datetime.c

The date("Z") call correctly returns the timezone offset number of
seconds (630 in my case).

The undocumented (in the PHP manual anyway) option to strftime('%z')
returns the correct value of +1030.

The timezone abbreviation ("CST" in my case) is correctly returned with
both the strftime("%Z") and date("T") calls.
  
This will often cause the process to seg fault and die, althought on
more complex pages, this becomes quite consistant.

With the PHP compile option '--enable-debug', the following is reported
in the Apache error log:

---------------------------------------
zend_execute_API.c(274) : Block 0x0813EDA0 status:
zend_variables.c(44) : Actual location (location was relayed)
Beginning:      OK (allocated on datetime.c:331, 32 bytes)
      End:      Overflown (magic=0x2A8F0030 instead of 0x2A8FCC84)
                2 byte(s) overflown
---------------------------------------

For PHP 4.1.1 the configure line is:
./configure --with-mysql=/usr/local/mysql --enable-track-vars
--with-apxs=/usr/local/apache/bin/apxs
--with-config-file-path=/usr/local/apache/conf --enable-bcmath
--with-zlib --with-xml --with-gettext --with-imap=../imap --with-mcrypt
--with-ldap=/usr/local --enable-ftp --without-gd --enable-debug

(Will be used for Horde's IMP webmail system)


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


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


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to