php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #71305 Crash when optional resource is omitted
Submitted: 2016-01-07 18:04 UTC Modified: 2016-01-13 20:49 UTC
From: mikedeweese at hotmail dot com Assigned: ab
Status: Closed Package: InterBase related
PHP Version: 7.0.2 OS: Windows 10 x64
Private report: No CVE-ID:
 [2016-01-07 18:04 UTC] mikedeweese at hotmail dot com
Description:
------------
Calling ibase_query without a database link identifier crashes PHP.

In PHP5 and according to the manual, if omitted, the last opened link is assumed.  

functions ibase_trans and ibase_prepare also take an optional database link id and will also crash if one is not given in php7.



Test script:
---------------
$db = ibase_connect("172.16.2.1:TESTDB", 'sysdba', 'masterkey');
$q = ibase_query("SELECT * FROM UTUSERS WHERE FUSERID = 'MJD'");
print "ok";

Expected result:
----------------
ok should print to the screen

Actual result:
--------------
A windows dialog with php icon. "CLI has stopped working.  A problem caused the program to stop working correctly.  Please close the program."

If I put $db as the first param, there is no crash and ok prints as expected.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2016-01-08 03:12 UTC] laruence@php.net
interbase is know broken in somehow. :<

please read: https://marc.info/?l=php-internals&m=145077389117375&w=2
 [2016-01-11 15:51 UTC] ab@php.net
-Status: Open +Status: Feedback
 [2016-01-11 15:51 UTC] ab@php.net
@mikedeweese please test the current development 7.0 branch. Several fixes was applied. Please fetch this http://windows.php.net/downloads/snaps/php-7.0/rb188caf/ or any later snapshot.

Thanks.
 [2016-01-11 21:24 UTC] mikedeweese at hotmail dot com
It is closer to working like it used to.

This now works

$db = ibase_connect("172.16.2.1:POEM_DEV", 'sysdba', 'masterkey');
$t = ibase_trans();  // This line crashes in the 7.0.2
$q = ibase_query($t, "SELECT FUSERID, FEMPNO FROM UTUSERS WHERE FUSERID = 'MJD'");
$r = ibase_fetch_object($q);
print_r($r);


but this still crashes

$db = ibase_connect("172.16.2.1:TESTDB", 'sysdba', 'masterkey');
$q = ibase_query("SELECT * FROM UTUSERS WHERE FUSERID = 'MJD'");
print "at end";
 [2016-01-11 21:37 UTC] mikedeweese at hotmail dot com
Ok, my second test does work if I connect to a DB that actually exists.

However, it still isn't 100%, as it crashes when I try to open a database that does not exist.  In PHP 5.6 it exits gracefully with these warnings:

PHP Warning:  ibase_connect(): I/O error during "CreateFile (open)" operation for file "TESTDB" Error while trying to open file The system cannot find the file specified.   in C:\work\php7_ibase_failure2.php on line 3
PHP Warning:  ibase_query(): no Firebird/InterBase link resource supplied in C:\work\php7_ibase_failure2.php on line 4
PHP Warning:  ibase_fetch_object() expects parameter 1 to be resource, boolean given in C:\work\php7_ibase_failure2.php on line 5
 [2016-01-12 14:18 UTC] ab@php.net
@mikedeweese thanks for checking. Here's a new build http://windows.php.net/downloads/snaps/php-7.0/r4e7cb05/ (or any later snapshot).

Thanks.
 [2016-01-13 12:51 UTC] mikedeweese at hotmail dot com
Yes, I now have 3 small tests that all complete as expected.

I tested with the snapshot in the r2b4625d directory.
 [2016-01-13 20:49 UTC] ab@php.net
-Status: Feedback +Status: Closed -Assigned To: +Assigned To: ab
 [2016-01-13 20:49 UTC] ab@php.net
@mikedeweese thanks for staying on the matter. I would consider this one to be over. There are still some issues there, and it's known. If you have simple repro cases for those, please file another ticket.

Many thanks to Hui for the huge patch to ext/interbase.

Cheers.
 
PHP Copyright © 2001-2017 The PHP Group
All rights reserved.
Last updated: Mon May 29 04:01:35 2017 UTC