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: | Anatol Belski | 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