From: Ilia Alshanetsky <iliaa@php.net>
Date: Wed, 14 Mar 2012 20:20:33 +0000 (+0000)
Subject: Fixed bug #61212 (PDO ODBC Segfaults on SQL_SUCESS_WITH_INFO).
X-Git-Tag: PHP-5.4.1-RC1~26^2~6
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=601d17d1ae2fb3ac6c232e9d66cb541c266c93b4;p=php

Fixed bug #61212 (PDO ODBC Segfaults on SQL_SUCESS_WITH_INFO).
---

diff --git a/NEWS b/NEWS
index a0acb43836..1d01aa74f1 100644
--- 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)
diff --git a/ext/pdo_odbc/odbc_stmt.c b/ext/pdo_odbc/odbc_stmt.c
index aabe3dcc36..4e039d2a74 100755
--- a/ext/pdo_odbc/odbc_stmt.c
+++ b/ext/pdo_odbc/odbc_stmt.c
@@ -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;