]> granicus.if.org Git - php/commitdiff
Fixed bug #64511 - pdo_dblib segfaults or leaks on nextRowset()
authorStanley Sufficool <ssufficool@php.net>
Thu, 23 Oct 2014 03:13:22 +0000 (20:13 -0700)
committerStanley Sufficool <ssufficool@php.net>
Thu, 23 Oct 2014 03:13:22 +0000 (20:13 -0700)
ext/pdo_dblib/dblib_stmt.c

index 5909f6407fbea49af4b52079e8368cba6d4b6265..bd79be3e9c14a0436e278f18e5bd187636c74e3c 100644 (file)
@@ -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;