note 125251 added to language.types.integer
| From: | ganlvtech at qq dot com | Date: | Fri, 07 Aug 2020 07:34:02 +0000 |
| Subject: | note 125251 added to language.types.integer | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-214934@lists.php.net to get a copy of this message | ||
Be aware of float to int cast overflow
<?php
// You may expected these
var_dump(0x7fffffffffffffff); // int(9223372036854775807)
var_dump(0x7fffffffffffffff + 1); // float(9.2233720368548E+18)
var_dump((int)(0x7fffffffffffffff + 1)); // int(9223372036854775807)
var_dump(0x7fffffffffffffff + 1 > 0); // bool(true)
var_dump((int)(0x7fffffffffffffff + 1) > 0); // bool(true)
var_dump((int)'9223372036854775807'); // int(9223372036854775807)
var_dump(9223372036854775808); // float(9.2233720368548E+18)
var_dump((int)'9223372036854775808'); // int(9223372036854775807)
var_dump((int)9223372036854775808); // int(9223372036854775807)
// But actually, it likes these
var_dump(0x7fffffffffffffff); // int(9223372036854775807)
var_dump(0x7fffffffffffffff + 1); // float(9.2233720368548E+18)
var_dump((int)(0x7fffffffffffffff + 1)); // int(-9223372036854775808) <-----
var_dump(0x7fffffffffffffff + 1 > 0); // bool(true)
var_dump((int)(0x7fffffffffffffff + 1) > 0); // bool(false) <-----
var_dump((int)'9223372036854775807'); // int(9223372036854775807)
var_dump(9223372036854775808); // float(9.2233720368548E+18)
var_dump((int)'9223372036854775808'); // int(9223372036854775807)
var_dump((int)9223372036854775808); // int(-9223372036854775808) <-----
?>
These overflows are dangerous when you try to compare it with zero, or substract it from another
value (e.g. money).
----
Server IP: 45.112.84.4
Probable Submitter: 103.51.166.36 (proxied: 119.121.154.84)
----
Manual Page -- http://php.net/manual/en/language.types.integer.php
Edit -- https://master.php.net/note/edit/125251
Del: integrated -- https://master.php.net/note/delete/125251/integrated
Del: useless -- https://master.php.net/note/delete/125251/useless
Del: bad code -- https://master.php.net/note/delete/125251/bad+code
Del: spam -- https://master.php.net/note/delete/125251/spam
Del: non-english -- https://master.php.net/note/delete/125251/non-english
Del: in docs -- https://master.php.net/note/delete/125251/in+docs
Del: other reasons-- https://master.php.net/note/delete/125251
Reject -- https://master.php.net/note/reject/125251
Search -- https://master.php.net/manage/user-notes.php