]> granicus.if.org Git - php/commitdiff
Fixes #65689. PDO_Firebrid / exec() does not free allocated statement.
authorDorin Marcoci <dorin.marcoci@marcodor.com>
Sat, 24 Dec 2016 11:57:03 +0000 (13:57 +0200)
committerSara Golemon <pollita@php.net>
Mon, 26 Dec 2016 06:06:20 +0000 (22:06 -0800)
ext/pdo_firebird/firebird_driver.c

index b26939ccd21ca7c39d449f2786b135f9bd10ac73..91cd3593ea7e42f5e49a182f2471d6e577710664 100644 (file)
@@ -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;
 }
 /* }}} */