]> granicus.if.org Git - php/commitdiff
Fix #78473: odbc_close() closes arbitrary resources
authorChristoph M. Becker <cmbecker69@gmx.de>
Wed, 28 Aug 2019 15:51:57 +0000 (17:51 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Wed, 28 Aug 2019 15:55:15 +0000 (17:55 +0200)
We have to bail out, if an invalid resource is given.  For consistency
with the other `zend_fetch_resource(2)` calls, we return `FALSE`.

NEWS
ext/odbc/php_odbc.c
ext/odbc/tests/bug78473.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index e747a4f8eb4772062bf54b9d4e52251bdf731d56..838f1d23e8dcf4cdc4af78f1a5b9891054aa766b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,9 @@ PHP                                                                        NEWS
   . Fixed connect_attr issues and added the _server_host connection attribute.
     (Qianqian Bu)
 
+- ODBC:
+  . Fixed bug #78473 (odbc_close() closes arbitrary resources). (cmb)
+
 29 Aug 2019, PHP 7.2.22
 
 - Core:
index b5b8a073665de789bde616ead68669ce325d59e7..33233d24bde6c399649368605c3ef32911858415 100644 (file)
@@ -2752,7 +2752,10 @@ PHP_FUNCTION(odbc_close)
                return;
        }
 
-       conn = (odbc_connection *)zend_fetch_resource2(Z_RES_P(pv_conn), "ODBC-Link", le_conn, le_pconn);
+       if (!(conn = (odbc_connection *)zend_fetch_resource2(Z_RES_P(pv_conn), "ODBC-Link", le_conn, le_pconn))) {
+               RETURN_FALSE;
+       }
+
        if (Z_RES_P(pv_conn)->type == le_pconn) {
                is_pconn = 1;
        }
diff --git a/ext/odbc/tests/bug78473.phpt b/ext/odbc/tests/bug78473.phpt
new file mode 100644 (file)
index 0000000..fd73b6c
--- /dev/null
@@ -0,0 +1,14 @@
+--TEST--
+Bug #78473 (odbc_close() closes arbitrary resources)
+--SKIPIF--
+<?php
+if (!extension_loaded('odbc')) die('skip odbc extension not available');
+?>
+--FILE--
+<?php
+odbc_close(STDIN);
+var_dump(STDIN);
+?>
+--EXPECTF--
+Warning: odbc_close(): supplied resource is not a valid ODBC-Link resource in %s on line %d
+resource(%d) of type (stream)