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