diff options
author | Dorin Marcoci <dorin.marcoci@marcodor.com> | 2016-12-24 13:57:03 +0200 |
---|---|---|
committer | Sara Golemon <pollita@php.net> | 2016-12-25 22:06:20 -0800 |
commit | e926bf65076cb5c8da6bf8f32635f696de5ff9aa (patch) | |
tree | 8f8d4cc6ed19deb1d9714cbed07ac60d4544eb90 /ext/pdo_firebird | |
parent | ac1372d811b06bd360337e38d93c6cfebd27f378 (diff) | |
download | php-git-e926bf65076cb5c8da6bf8f32635f696de5ff9aa.tar.gz |
Fixes #65689. PDO_Firebrid / exec() does not free allocated statement.
Diffstat (limited to 'ext/pdo_firebird')
-rw-r--r-- | ext/pdo_firebird/firebird_driver.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/ext/pdo_firebird/firebird_driver.c b/ext/pdo_firebird/firebird_driver.c index b26939ccd2..91cd3593ea 100644 --- a/ext/pdo_firebird/firebird_driver.c +++ b/ext/pdo_firebird/firebird_driver.c @@ -238,14 +238,16 @@ static zend_long firebird_handle_doer(pdo_dbh_t *dbh, const char *sql, size_t sq /* execute the statement */ if (isc_dsql_execute2(H->isc_status, &H->tr, &stmt, PDO_FB_SQLDA_VERSION, &in_sqlda, &out_sqlda)) { RECORD_ERROR(dbh); - return -1; + ret = -1; + goto free_statement; } /* find out how many rows were affected */ if (isc_dsql_sql_info(H->isc_status, &stmt, sizeof(info_count), const_cast(info_count), sizeof(result), result)) { RECORD_ERROR(dbh); - return -1; + ret = -1; + goto free_statement; } if (result[0] == isc_info_sql_records) { @@ -265,6 +267,12 @@ static zend_long firebird_handle_doer(pdo_dbh_t *dbh, const char *sql, size_t sq RECORD_ERROR(dbh); } +free_statement: + + if (isc_dsql_free_statement(H->isc_status, &stmt, DSQL_drop)) { + RECORD_ERROR(dbh); + } + return ret; } /* }}} */ |