com php-src: Merge branch 'PHP-5.6' into PHP-7.0: ext/pdo_dbl ib/dblib_stmt.c ext/pdo_dblib/tests/bug_6975 7.phpt

From: Date: Sun, 18 Oct 2015 11:43:53 +0000
Subject: com php-src: Merge branch 'PHP-5.6' into PHP-7.0: ext/pdo_dbl ib/dblib_stmt.c ext/pdo_dblib/tests/bug_6975 7.phpt
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-89523@lists.php.net to get a copy of this message
Commit: 980a2c283dcb8fada37b2b5c8dc65da58a56b0a2 Author: Anatol Belski <ab@php.net> Sun, 18 Oct 2015 11:28:57 +0200 Parents: 209015012faa5144098fa1d48e3f4cbc5c2dee44 Branches: PHP-7.0.0 Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=980a2c283dcb8fada37b2b5c8dc65da58a56b0a2 Log: Merge branch 'PHP-5.6' into PHP-7.0 * PHP-5.6: C89 compat use spprintf instead (no need to estrdup afterwards). dblib's dbcolname can return null in some cases testcase fot bug #69757 Segmentation fault on pdo_dblib::nextRowset (bug #69757) Conflicts: ext/pdo_dblib/dblib_stmt.c Bugs: https://bugs.php.net/69757 Changed paths: M ext/pdo_dblib/dblib_stmt.c A ext/pdo_dblib/tests/bug_69757.phpt Diff: diff --git a/ext/pdo_dblib/dblib_stmt.c b/ext/pdo_dblib/dblib_stmt.c index 9777654..bc709aa 100644 --- a/ext/pdo_dblib/dblib_stmt.c +++ b/ext/pdo_dblib/dblib_stmt.c @@ -192,15 +192,25 @@ static int pdo_dblib_stmt_describe(pdo_stmt_t *stmt, int colno) pdo_dblib_stmt *S = (pdo_dblib_stmt*)stmt->driver_data; pdo_dblib_db_handle *H = S->H; struct pdo_column_data *col; - zend_string *str; - + char *fname; + if(colno >= stmt->column_count || colno < 0) { return FAILURE; } col = &stmt->columns[colno]; - str = dbcolname(H->link, colno+1); - col->name = zend_string_init(str, strlen(str), 0); + fname = (char*)dbcolname(H->link, colno+1); + + if (fname && *fname) { + col->name = zend_string_init(fname, strlen(fname), 0); + } else { + char buf[16]; + int len; + + len = snprintf(buf, sizeof(buf), "computed%d", colno); + col->name = zend_string_init(buf, len, 0); + } + col->maxlen = dbcollen(H->link, colno+1); col->param_type = PDO_PARAM_STR; diff --git a/ext/pdo_dblib/tests/bug_69757.phpt b/ext/pdo_dblib/tests/bug_69757.phpt new file mode 100644 index 0000000..6c4aee0 --- /dev/null +++ b/ext/pdo_dblib/tests/bug_69757.phpt @@ -0,0 +1,32 @@ +--TEST-- +PDO_DBLIB: Segmentation fault on pdo_dblib::nextRowset +--SKIPIF-- +<?php +if (!extension_loaded('pdo_dblib')) die('skip not loaded'); +require __DIR__ . '/config.inc'; +?> +--FILE-- +<?php +require __DIR__ . '/config.inc'; + +$sql = " + exec dbo.sp_executesql N' + SELECT * FROM sysobjects + SELECT * FROM syscolumns + ' +"; +$stmt = $db->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

« previous php.cvs (#89523) next »