Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:32442 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 64347 invoked by uid 1010); 25 Sep 2007 07:58:42 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 64332 invoked from network); 25 Sep 2007 07:58:42 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 25 Sep 2007 07:58:42 -0000 Authentication-Results: pb1.pair.com smtp.mail=dmitry@zend.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=dmitry@zend.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain zend.com designates 212.25.124.162 as permitted sender) X-PHP-List-Original-Sender: dmitry@zend.com X-Host-Fingerprint: 212.25.124.162 mail.zend.com Linux 2.5 (sometimes 2.4) (4) Received: from [212.25.124.162] ([212.25.124.162:47121] helo=mail.zend.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 3B/68-22594-1BFB8F64 for ; Tue, 25 Sep 2007 03:58:42 -0400 Received: (qmail 1302 invoked from network); 25 Sep 2007 07:58:36 -0000 Received: from internal.zend.office (HELO thinkpad) (10.1.1.1) by internal.zend.office with SMTP; 25 Sep 2007 07:58:36 -0000 To: "'Alexandra S.'" , Date: Tue, 25 Sep 2007 11:58:34 +0400 Message-ID: <000001c7ff49$e0f6e1c0$6e02a8c0@thinkpad> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook, Build 10.0.6626 Importance: Normal In-Reply-To: <46F638F5.9030008@zend.com> X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.3138 Subject: RE: [PHP-DEV] [Fwd: bug in odbc extension http://bugs.php.net/bug.php?id=37527] From: dmitry@zend.com ("Dmitry Stogov") References: <46F638F5.9030008@zend.com> Hi Alexandra, I'm not sure in tis patch. It does the same as double calling to zend_list_delete(Z_LVAL_PP(pv_conn)); Also your fix may cause deletion of connection (le_conn) before deletion of related results (le_result). Is it allowed? Thanks. Dmitry. > -----Original Message----- > From: Alexandra S. [mailto:alexandra@zend.com] > Sent: Sunday, September 23, 2007 1:59 PM > To: internals@lists.php.net > Subject: [PHP-DEV] [Fwd: bug in odbc extension > http://bugs.php.net/bug.php?id=37527] > > > Hi, > > I am attaching here a patch for this bug. > Please review it. > > -------- Original Message -------- > Subject: bug in odbc extension > http://bugs.php.net/bug.php?id=37527 > Date: Tue, 18 Sep 2007 15:29:23 +0200 > From: Alexandra S. > To: internals@lists.php.net > > > > Hi, > > > I have been trying to work on this bug. The problem here is in this > scenario: > > 1. odbc connection is established. > > 2. odbc connection is closed. > > 3. trying to do a request (example: odbc_exec) to the > database using the > closed connection -> crash. > > > > As far as I can understand from reading the odbc_exec() function, > ZEND_FETCH_RESOURCE2 should return false,, so we do not > advance to the > SQLAllocStmt call that crashes. > > I checked with php 5.2.4 on both Linux and Windows and > ZEND_FETCH_RESOURCE2 does not return false. > > The reason for it is in the odbc_close function - > > for(i = 1; i < nument; i++){ > > ptr = zend_list_find(i, &type); > > if(ptr && (type == le_result)){ > > res = (odbc_result *)ptr; > > if(res->conn_ptr == conn){ > > zend_list_delete(i); > > } > > } > } > > Here only the previous statements of this connection are deleted and > not the connection itself. > > In the odbc_close_all function all the statements are > deleted, and then > all the connections. > > > > I suggest to add the deletion of the connection itself to the > odbc_close > function - so the ZEND_FETCH_RESOURCE2 check will actually work. The > situation now is that check do not work and we try all the > time to call > SQL actions with no existent connections. > > > > Example for possible solution: > > > > for(i = 1; i < nument; i++){ > > ptr = zend_list_find(i, &type); > > if(ptr && (type == le_result)){ > > res = (odbc_result *)ptr; > > if(res->conn_ptr == conn){ > > zend_list_delete(i); > > } > > } > > if(ptr && (type == (is_pconn?le_pconn:le_conn))){ > > res = (odbc_result *)ptr; > > if(res == conn){ > > zend_list_delete(i); > > } > > } > > } > > > Alexandra Shpindovsky > > > > > > > >