note 125251 added to language.types.integer

From: 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

« previous php.notes (#214934) next »