Bug #64109 [Opn->Csd]: incorrect use of abs() in array_pad()
Edit report at https://bugs.php.net/bug.php?id=64109&edit=1
ID: 64109
Updated by: requinix@php.net
Reported by: xi dot wang at gmail dot com
Summary: incorrect use of abs() in array_pad()
-Status: Open
+Status: Closed
Type: Bug
Package: Arrays related
PHP Version: master-Git-2013-01-30 (Git)
-Assigned To:
+Assigned To: requinix
Block user comment: N
Private report: N
New Comment:
Fixed since PHP 7. https://3v4l.org/pWJc7
Previous Comments:
------------------------------------------------------------------------
[2013-02-17 03:46:27] laruence@php.net
actually, there are some other issues, like use abs on a long number.
I am not sure whether this is a critical bug, but will try to fix it only for 5.4+
------------------------------------------------------------------------
[2013-01-30 21:33:10] xi dot wang at gmail dot com
Description:
------------
Using `abs(pad_size) < 0' to catch the LONG_MIN case invokes undefined behavior in
C. gcc simply assumes abs(pad_size) must be non-negative and discards the check.
Test script:
---------------
<?php
// This is for 64-bit systems.
$input = array(12, 10, 9);
$input = array_pad($input, -9223372036854775808, 0);
var_dump($input);
?>
Expected result:
----------------
Warning: array_pad(): You may only pad up to 1048576 elements at a time in t.php
on line 3
bool(false)
Actual result:
--------------
array(3) {
[0]=>
int(12)
[1]=>
int(10)
[2]=>
int(9)
}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64109&edit=1
Thread (4 messages)