]> granicus.if.org Git - php/commitdiff
Fixed bug #61212 (PDO ODBC Segfaults on SQL_SUCESS_WITH_INFO).
authorIlia Alshanetsky <iliaa@php.net>
Wed, 14 Mar 2012 20:20:33 +0000 (20:20 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 14 Mar 2012 20:20:33 +0000 (20:20 +0000)
NEWS
ext/pdo_odbc/odbc_stmt.c

diff --git a/NEWS b/NEWS
index a0acb438363f985e5bb1ab9b18b340f3f4dbd278..1d01aa74f1dd49f5401e0006a943e2d1b417ae0c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -47,6 +47,9 @@ PHP                                                                        NEWS
   . Fixed bug #61194 (PDO should export compression flag with myslqnd).
     (Johannes)
 
+- PDO_odbc 
+  . Fixed bug #61212 (PDO ODBC Segfaults on SQL_SUCESS_WITH_INFO). (Ilia)
+
 - PDO_pgsql
   . Fixed bug #61267 (pdo_pgsql's PDO::exec() returns the number of SELECTed
     rows on postgresql >= 9). (ben dot pineau at gmail dot com)
index aabe3dcc369aa2460e5278444d5516bab76b99dd..4e039d2a740b6477a9d6e2b6a498bc27fdda0b62 100755 (executable)
@@ -637,12 +637,14 @@ static int odbc_stmt_get_col(pdo_stmt_t *stmt, int colno, char **ptr, unsigned l
 
                        if (C->fetched_len != SQL_NO_TOTAL) {
                                /* use size suggested by the driver, if it knows it */
-                               alloced = C->fetched_len + 1;
+                               buf = emalloc(C->fetched_len + 1);
+                               memcpy(buf, C->data, C->fetched_len);
+                               buf[C->fetched_len] = 0;
+                               used = C->fetched_len;
+                       } else {
+                               buf = estrndup(C->data, 256);
+                               used = 255; /* not 256; the driver NUL terminated the buffer */
                        }
-                       
-                       buf = emalloc(alloced);
-                       memcpy(buf, C->data, 256);
-                       used = 255; /* not 256; the driver NUL terminated the buffer */
 
                        do {
                                C->fetched_len = 0;