diff --git a/ext/pdo_dblib/dblib_stmt.c b/ext/pdo_dblib/dblib_stmt.c index 263ae6dcb8fdc..0b519995ca000 100644 --- a/ext/pdo_dblib/dblib_stmt.c +++ b/ext/pdo_dblib/dblib_stmt.c @@ -203,10 +203,16 @@ 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); + + char *fname = (char*)dbcolname(H->link, colno+1); + + if (fname && *fname) { + col->name = estrdup(fname); + col->namelen = strlen(col->name); + } else { + col->namelen = spprintf(&col->name, NULL, "computed%d", colno); + } col->maxlen = dbcollen(H->link, colno+1); - col->namelen = strlen(col->name); col->param_type = PDO_PARAM_STR; return 1; diff --git a/ext/pdo_dblib/tests/bug_69757.phpt b/ext/pdo_dblib/tests/bug_69757.phpt new file mode 100644 index 0000000000000..6c4aee0b6db56 --- /dev/null +++ b/ext/pdo_dblib/tests/bug_69757.phpt @@ -0,0 +1,32 @@ +--TEST-- +PDO_DBLIB: Segmentation fault on pdo_dblib::nextRowset +--SKIPIF-- + +--FILE-- +query($sql); +$resultset1 = $stmt->fetchAll(PDO::FETCH_ASSOC); +if (true !== $stmt->nextRowset()) { + die('expect TRUE on nextRowset'); +} +$resultset2 = $stmt->fetchAll(PDO::FETCH_ASSOC); +if (false !== $stmt->nextRowset()) { + die('expect FALSE on nextRowset'); +} +$stmt->closeCursor(); + +echo "OK\n"; +?> +--EXPECT-- +OK