felipe          Tue Nov 11 13:28:22 2008 UTC

  Added files:                 (Branch: PHP_5_3)
    /php-src/ext/interbase/tests        bug46543.phpt 

  Modified files:              
    /ZendEngine2        zend_list.h 
    /php-src/ext/interbase      interbase.c 
  Log:
  MFH:
  - Added ZEND_FETCH_RESOURCE2_NO_RETURN() (a version of ZEND_FETCH_RESOURCE2 
but without the ZEND_VERIFY_RESOURCE() which contains RETURN_FALSE)
  - Fixed bug #46543 (ibase_trans() memory leaks when using wrong parameters)
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_list.h?r1=1.48.2.1.2.1.2.1&r2=1.48.2.1.2.1.2.2&diff_format=u
Index: ZendEngine2/zend_list.h
diff -u ZendEngine2/zend_list.h:1.48.2.1.2.1.2.1 
ZendEngine2/zend_list.h:1.48.2.1.2.1.2.2
--- ZendEngine2/zend_list.h:1.48.2.1.2.1.2.1    Mon Dec 31 07:17:04 2007
+++ ZendEngine2/zend_list.h     Tue Nov 11 13:28:22 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_list.h,v 1.48.2.1.2.1.2.1 2007/12/31 07:17:04 sebastian Exp $ */
+/* $Id: zend_list.h,v 1.48.2.1.2.1.2.2 2008/11/11 13:28:22 felipe Exp $ */
 
 #ifndef ZEND_LIST_H
 #define ZEND_LIST_H
@@ -99,6 +99,9 @@
 #define ZEND_FETCH_RESOURCE2(rsrc, rsrc_type, passed_id, default_id, 
resource_type_name, resource_type1, resource_type2)       \
        rsrc = (rsrc_type) zend_fetch_resource(passed_id TSRMLS_CC, default_id, 
resource_type_name, NULL, 2, resource_type1, resource_type2);   \
        ZEND_VERIFY_RESOURCE(rsrc);
+       
+#define ZEND_FETCH_RESOURCE2_NO_RETURN(rsrc, rsrc_type, passed_id, default_id, 
resource_type_name, resource_type1, resource_type2)     \
+       (rsrc = (rsrc_type) zend_fetch_resource(passed_id TSRMLS_CC, 
default_id, resource_type_name, NULL, 2, resource_type1, resource_type2))
 
 #define ZEND_REGISTER_RESOURCE(rsrc_result, rsrc_pointer, rsrc_type)  \
     zend_register_resource(rsrc_result, rsrc_pointer, rsrc_type);
http://cvs.php.net/viewvc.cgi/php-src/ext/interbase/interbase.c?r1=1.225.2.4.2.7.2.6&r2=1.225.2.4.2.7.2.7&diff_format=u
Index: php-src/ext/interbase/interbase.c
diff -u php-src/ext/interbase/interbase.c:1.225.2.4.2.7.2.6 
php-src/ext/interbase/interbase.c:1.225.2.4.2.7.2.7
--- php-src/ext/interbase/interbase.c:1.225.2.4.2.7.2.6 Sun Nov  2 21:19:32 2008
+++ php-src/ext/interbase/interbase.c   Tue Nov 11 13:28:22 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: interbase.c,v 1.225.2.4.2.7.2.6 2008/11/02 21:19:32 felipe Exp $ */
+/* $Id: interbase.c,v 1.225.2.4.2.7.2.7 2008/11/11 13:28:22 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1214,8 +1214,13 @@
                        
                        if (Z_TYPE_PP(args[i]) == IS_RESOURCE) {
                                
-                               ZEND_FETCH_RESOURCE2(ib_link[link_cnt], 
ibase_db_link *, args[i], -1, 
-                                       LE_LINK, le_link, le_plink);
+                               if 
(!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link[link_cnt], ibase_db_link *, args[i], 
-1, LE_LINK, le_link, le_plink)) {
+                                       efree(teb);
+                                       efree(tpb);
+                                       efree(ib_link);
+                                       efree(args);
+                                       RETURN_FALSE;
+                               }
        
                                /* copy the most recent modifier string into 
tbp[] */
                                memcpy(&tpb[TPB_MAX_SIZE * link_cnt], last_tpb, 
TPB_MAX_SIZE);
@@ -1279,8 +1284,10 @@
 
        if (link_cnt == 0) {
                link_cnt = 1;
-               ZEND_FETCH_RESOURCE2(ib_link[0], ibase_db_link *, NULL, 
IBG(default_link), LE_LINK, 
-                       le_link, le_plink);
+               if (!ZEND_FETCH_RESOURCE2_NO_RETURN(ib_link[0], ibase_db_link 
*, NULL, IBG(default_link), LE_LINK, le_link, le_plink)) {
+                       efree(ib_link);
+                       RETURN_FALSE;
+               }
                result = isc_start_transaction(IB_STATUS, &tr_handle, 1, 
&ib_link[0]->handle, tpb_len, last_tpb);
        }
        

http://cvs.php.net/viewvc.cgi/php-src/ext/interbase/tests/bug46543.phpt?view=markup&rev=1.1
Index: php-src/ext/interbase/tests/bug46543.phpt
+++ php-src/ext/interbase/tests/bug46543.phpt
--TEST--
Bug #46543 (ibase_trans() memory leaks when using wrong parameters)
--SKIPIF--
<?php include("skipif.inc"); ?>
--FILE--
<?php

require("interbase.inc");

@ibase_close();

ibase_trans(1);
ibase_trans();
ibase_trans('foo');
ibase_trans(fopen(__FILE__, 'r'));

$x = ibase_connect($test_base);
ibase_trans(1, 2, $x, $x, 3);

?>
--EXPECTF--
Warning: ibase_trans(): no Firebird/InterBase link resource supplied in %s on 
line %d

Warning: ibase_trans(): no Firebird/InterBase link resource supplied in %s on 
line %d

Warning: ibase_trans(): no Firebird/InterBase link resource supplied in %s on 
line %d

Warning: ibase_trans(): supplied resource is not a valid Firebird/InterBase 
link resource in %s on line %d



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to