[php-src] Issue #10908: Bus error with SELECT in PDO Firebird on RPI with 64 bit kernel and 32 bit userspace
| From: | rvk01 | Date: | Wed, 22 Mar 2023 20:50:20 +0000 |
| Subject: | [php-src] Issue #10908: Bus error with SELECT in PDO Firebird on RPI with 64 bit kernel and 32 bit userspace | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-243975@lists.php.net to get a copy of this message | ||
Issue: https://github.com/php/php-src/issues/10908
Author: rvk01
### Description
With a simple apt-get upgrade on my RPI 4 it was upgraded to a 64 bit kernel automatically :(
# uname -a
Linux space01 6.1.19-v8+ #1637 SMP PREEMPT Tue Mar 14 11:11:47 GMT 2023 aarch64 GNU/Linux
Now the SELECT of a BIGINT and NUMERIC(18,3) always results in a "Bus error".
Switching back to the 32 bit kernel (with arm_64bit=0 in /boot/config.txt) it works again:
# uname -a
Linux space01 6.1.19-v7l+ #1637 SMP Tue Mar 14 11:07:55 GMT 2023 armv7l
But I can't use the 32 bit kernel anymore because of multiple out of memory errors.
(with 8GB there is too little space in the lower memory)
Casting a BIGINT to INTEGER and a NUMERIC(18,3) to NUMERIC(9,3) works too.
(It seems from NUMERIC(10,3) and above the error occurs again.)
Reproduce with the following code (command for creating testdatabase is in the comments):
```php
<?php
// Environment Raspberry Pi 4 8GB / Raspbian GNU/Linux 11 (bullseye)
// PHP 8.2.4 with PDO
// php8.2-common 8.2.4-1+0~20230316.17+debian11~1.gbp556b04
// php8.2-interbase 8.2.4-1+0~20230316.17+debian11~1.gbp556b04
// Firebird client LI-V6.3.7.33374 Firebird 3.0
// Working in kernel 32 bit: Linux space01 6.1.19-v7l+ #1637 SMP Tue Mar 14 11:07:55 GMT 2023 armv7l
// Not working in kernel 64 bit: Linux space01 6.1.19-v8+ #1637 SMP PREEMPT Tue Mar 14 11:11:47 GMT
2023 aarch64 GNU/Linux
/*
Create the test database on a console terminal (maybe adjust the path of the database):
isql-fb <<EOF
CREATE DATABASE 'localhost:/home/firebird/testdb.fdb' USER 'SYSDBA' PASSWORD
'masterkey' PAGE_SIZE 8192;
COMMIT;
CONNECT 'localhost:/home/firebird/testdb.fdb' USER 'SYSDBA' PASSWORD
'masterkey';
CREATE TABLE TESTTABLE(
ID BIGINT NOT NULL,
CODE VARCHAR(60) NOT NULL,
NUM NUMERIC(18, 3)
);
INSERT INTO TESTTABLE VALUES(1, 'ABC', 12.34);
COMMIT;
exit;
EOF
*/
$fb = new PDO("firebird:dbname=localhost:/home/firebird/testdb.fdb;charset=utf8",
'SYSDBA', 'masterkey');
// the following sql gives the results (in the comments)
$sql="SELECT CODE FROM TESTTABLE"; // works fine
$sql="SELECT ID FROM TESTTABLE"; // Bus error
$sql="SELECT NUM FROM TESTTABLE"; // Bus error
$sql="SELECT * FROM TESTTABLE"; // Bus error
$sql="SELECT CAST(NUM AS NUMERIC(9, 3)) FROM TESTTABLE"; // works fine
$sql="SELECT CAST(ID AS INTEGER) FROM TESTTABLE"; // works fine
$sql="SELECT CAST(ID AS BIGINT) FROM TESTTABLE"; // Bus error
foreach ($fb->query($sql) as $row) {
print_r($row);
print("\n");
}
```
Resulted in this output:
```
Bus error
```
But I expected this output instead:
```
Array
(
[CAST] => 1
[0] => 1
)
```
### PHP Version
PHP 8.2.4
### Operating System
Raspbian GNU/Linux 11 (bullseye)