php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #47718 Missing documentation for 64 bit overflows
Submitted: 2009-03-19 14:46 UTC Modified: 2009-11-19 11:30 UTC
From: vivekanandan8 at yahoo dot com Assigned: mattwil (profile)
Status: Closed Package: Documentation problem
PHP Version: Irrelevant OS: *
Private report: No CVE-ID: None
 [2009-03-19 14:46 UTC] vivekanandan8 at yahoo dot com
Description:
------------
Documentation for 64 bit platform about integers overflow 

Reproduce code:
---------------
---
From manual page: language.types.integer
---


Expected result:
----------------
If PHP encounters a number beyond the bounds of the integer type, it will be interpreted as a float instead. 
This above general rule differs depending on whether a 32 bit or 64 bit platform is used, which is described in the table below 

 Platform: 32 bit , Range: -2^31-1 and 2^31-1,Numbers: -2147483647 to 2147483647
Platform: 64 bit , Range: -2^63-1 and 2^63-1,Numbers: -9223372036854775807 to 23372036854775807

<?php
$large_number=9223372036854775807;
var_dump($large_number);
// output: int(9223372036854775807)
$large_number = 9223372036854775808;
var_dump($large_number);
// output: float(9.2233720368548E+18) as 9223372036854775808

//2^64-1 is 18446744073709551615
var_dump(0xffffffffffffffff);
// output: float(1.844674407371E+19) as 18446744073709551615
?>

Actual result:
--------------
No documentation regarding 64 bit platform in online php manual also.i added these info as add a note even it is not approved. i am interested in contributing php manual.please do the needful.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-03-20 18:49 UTC] kalle@php.net
Matt, you have worked on some 64bit overflows recently, think you 
could look into this?
 [2009-03-25 11:20 UTC] vivekanandan8 at yahoo dot com
hi,
  sorry, Please ignore the previous comments.

since in PHP zval for storing integer is long data type.
The Data Representation for long is defined by ABI(Application Binary Interface)
which says that 

Bit-field Type: signed long, Width(bits)  1to 64,Range: &#8722;2^w&#8722;1 to 2^w&#8722;1&#8722; 1
for HexaDeciamal Numbers : Width(bits)  1to 64, Range: 0 to 2w&#8722; 1


For integers in PHP:
 
Platform: 32 bit , Range: -2^31 and 2^31-1,Numbers: -2147483648 to 2147483647

Platform: 64 bit , Range: -2^63 and 2^63-1,Numbers:-9223372036854775808 to 23372036854775807

For Hexadeciaml in PHP:

Platform: 32 bit , Range: 0 to 2^32&#8722; 1, Numbers: 0 to 4294967295

Platform: 64 bit , Range: 0 to -2^64-1, Numbers: 0 to 23372036854775807

more info regarding ABi(http://www.x86-64.org/documentation/abi-0.99.pdf)

Example for 64 bit integer overflow

<?php

$large_number=9223372036854775807;
var_dump($large_number);
// output: 2^63-1 for integer as int(9223372036854775807)

$large_number = 9223372036854775808;
var_dump($large_number);
// output: float(9.2233720368548E+18) as 9223372036854775808


$large_number=-9223372036854775807;
var_dump($large_number);
// output: int(-9223372036854775807)

$large_number =(int)-9223372036854775808;
var_dump($large_number);
// output: 2^64 for integer as int(9223372036854775808)

?>

Example for 64 bit Hexadecimal  overflow
<?
//2^64-1 is 18446744073709551615
var_dump(0xffffffffffffffff);
// output: float(1.844674407371E+19) as 18446744073709551615
?>
 [2009-03-25 11:29 UTC] vivekanandan8 at yahoo dot com
Hi,
  sorry some character are misdecoded, hence i am giving that onceagain, 

Since in PHP zval for storing integer is long data type.
The Data Representation for long is defined by ABI(Application Binary Interface)
which says that 

Bit-field Type:signed long,Width(bits)1to64,Range:-2^w-1 to(2^w-1)-1
for HexaDeciamal Numbers : Width(bits)  1to 64, Range: 0 to 2^w-1

For integers in PHP:
 
Platform: 32 bit , Range: -2^31 and 2^31-1,Numbers: -2147483648 to 2147483647

Platform: 64 bit , Range: -2^63 and 2^63-1,Numbers:-9223372036854775808 to 23372036854775807

For Hexadeciaml in PHP:

Platform: 32 bit , Range: 0 to 2^32&#8722; 1, Numbers: 0 to 4294967295

Platform: 64 bit , Range: 0 to -2^64-1, Numbers: 0 to 23372036854775807

more info regarding ABi(http://www.x86-64.org/documentation/abi-0.99.pdf)

Example for 64 bit integer overflow

<?php

$large_number=9223372036854775807;
var_dump($large_number);
// output: 2^63-1 for integer as int(9223372036854775807)

$large_number = 9223372036854775808;
var_dump($large_number);
// output: float(9.2233720368548E+18) as 9223372036854775808


$large_number=-9223372036854775807;
var_dump($large_number);
// output: int(-9223372036854775807)

$large_number =(int)-9223372036854775808;
var_dump($large_number);
// output: 2^64 for integer as int(9223372036854775808)

?>

Example for 64 bit Hexadecimal  overflow
<?
//2^64-1 is 18446744073709551615
var_dump(0xffffffffffffffff);
// output: float(1.844674407371E+19) as 18446744073709551615
?>
 [2009-11-19 11:30 UTC] svn@php.net
Automatic comment from SVN on behalf of vrana
Revision: http://svn.php.net/viewvc/?view=revision&revision=290980
Log: Usual maximum on 64-bits (bug #47718)
 [2009-11-19 11:30 UTC] vrana@php.net
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.

Thank you for the report, and for helping us make our documentation better.


 
PHP Copyright © 2001-2026 The PHP Group
All rights reserved.
Last updated: Mon Jun 15 04:00:01 2026 UTC