diff options
author | Stanley Sufficool <ssufficool@php.net> | 2014-10-22 20:13:22 -0700 |
---|---|---|
committer | Stanley Sufficool <ssufficool@php.net> | 2014-10-22 20:13:22 -0700 |
commit | 83144a72817775f793407d23f2701e9cdabb36cc (patch) | |
tree | 2c3060efdf73bb2a7c2b03f54a16bb1827aa51e1 | |
parent | fe8577efb1ecf845b937e877634f10ad95b08b75 (diff) | |
download | php-git-83144a72817775f793407d23f2701e9cdabb36cc.tar.gz |
Fixed bug #64511 - pdo_dblib segfaults or leaks on nextRowset()
-rw-r--r-- | ext/pdo_dblib/dblib_stmt.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/ext/pdo_dblib/dblib_stmt.c b/ext/pdo_dblib/dblib_stmt.c index 5909f6407f..bd79be3e9c 100644 --- a/ext/pdo_dblib/dblib_stmt.c +++ b/ext/pdo_dblib/dblib_stmt.c @@ -103,21 +103,15 @@ static int pdo_dblib_stmt_cursor_closer(pdo_stmt_t *stmt TSRMLS_DC) /* Cancel any pending results */ dbcancel(H->link); - efree(stmt->columns); - stmt->columns = NULL; - return 1; } static int pdo_dblib_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC) { pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data; - - efree(stmt->columns); - stmt->columns = NULL; - + efree(S); - + return 1; } @@ -128,16 +122,16 @@ static int pdo_dblib_stmt_next_rowset(pdo_stmt_t *stmt TSRMLS_DC) RETCODE ret; ret = dbresults(H->link); - + if (FAIL == ret) { pdo_raise_impl_error(stmt->dbh, stmt, "HY000", "PDO_DBLIB: dbresults() returned FAIL" TSRMLS_CC); return 0; } - + if(NO_MORE_RESULTS == ret) { return 0; } - + stmt->row_count = DBCOUNT(H->link); stmt->column_count = dbnumcols(H->link); @@ -204,7 +198,7 @@ static int pdo_dblib_stmt_describe(pdo_stmt_t *stmt, int colno TSRMLS_DC) struct pdo_column_data *col = &stmt->columns[colno]; - col->name = (char*)dbcolname(H->link, colno+1); + col->name = estrdup(dbcolname(H->link, colno+1)); col->maxlen = dbcollen(H->link, colno+1); col->namelen = strlen(col->name); col->param_type = PDO_PARAM_STR; |