fmk Fri Nov 18 15:40:28 2005 EDT Modified files: /php-src NEWS /php-src/ext/mssql php_mssql.c Log: Fix #32009 crash when mssql_bind() is called more than once http://cvs.php.net/diff.php/php-src/NEWS?r1=1.2080&r2=1.2081&ty=u Index: php-src/NEWS diff -u php-src/NEWS:1.2080 php-src/NEWS:1.2081 --- php-src/NEWS:1.2080 Fri Nov 18 14:13:34 2005 +++ php-src/NEWS Fri Nov 18 15:40:19 2005 @@ -27,3 +27,4 @@ defined using reflection API. (Johannes) - Fixed bug #34286 (__toString() behavior is inconsistent). (Marcus) - Fixed bug #33153 (crash in mssql_next result). (Frank) +- Fixed bug #32009 (crash when mssql_bind() is called more than once). (Frank) http://cvs.php.net/diff.php/php-src/ext/mssql/php_mssql.c?r1=1.156&r2=1.157&ty=u Index: php-src/ext/mssql/php_mssql.c diff -u php-src/ext/mssql/php_mssql.c:1.156 php-src/ext/mssql/php_mssql.c:1.157 --- php-src/ext/mssql/php_mssql.c:1.156 Fri Nov 18 14:13:35 2005 +++ php-src/ext/mssql/php_mssql.c Fri Nov 18 15:40:28 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_mssql.c,v 1.156 2005/11/18 19:13:35 fmk Exp $ */ +/* $Id: php_mssql.c,v 1.157 2005/11/18 20:40:28 fmk Exp $ */ #ifdef COMPILE_DL_MSSQL #define HAVE_MSSQL 1 @@ -2114,17 +2114,22 @@ zend_hash_init(statement->binds, 13, NULL, _mssql_bind_hash_dtor, 0); } - memset((void*)&bind,0,sizeof(mssql_bind)); - zend_hash_add(statement->binds,Z_STRVAL_PP(param_name),Z_STRLEN_PP(param_name),&bind,sizeof(mssql_bind),(void **)&bindp); - if( NULL == bindp ) RETURN_FALSE; - bindp->zval=*var; - zval_add_ref(var); - - /* no call to dbrpcparam if RETVAL */ - if ( strcmp("RETVAL",Z_STRVAL_PP(param_name))!=0 ) { - if (dbrpcparam(mssql_ptr->link, Z_STRVAL_PP(param_name), (BYTE)status, type, maxlen, datalen, (LPBYTE)value)==FAIL) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set parameter"); - RETURN_FALSE; + if (zend_hash_exists(statement->binds, Z_STRVAL_PP(param_name), Z_STRLEN_PP(param_name))) { + RETURN_FALSE; + } + else { + memset((void*)&bind,0,sizeof(mssql_bind)); + zend_hash_add(statement->binds, Z_STRVAL_PP(param_name), Z_STRLEN_PP(param_name), &bind, sizeof(mssql_bind), (void **)&bindp); + if( NULL == bindp ) RETURN_FALSE; + bindp->zval=*var; + zval_add_ref(var); + + /* no call to dbrpcparam if RETVAL */ + if ( strcmp("RETVAL",Z_STRVAL_PP(param_name))!=0 ) { + if (dbrpcparam(mssql_ptr->link, Z_STRVAL_PP(param_name), (BYTE)status, type, maxlen, datalen, (LPBYTE)value)==FAIL) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to set parameter"); + RETURN_FALSE; + } } }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php