[PHP-CVS] cvs: php-src /ext/pdo_dblib dblib_driver.c dblib_stmt.c

2009-03-19 Thread Steph Fox
sfoxThu Mar 19 22:15:04 2009 UTC

  Modified files:  
/php-src/ext/pdo_dblib  dblib_driver.c dblib_stmt.c 
  Log:
  - Fix bug #38805 ( PDO Truncates Text from SQL Server Text Data Type Field)
  - Bring behaviour into line with ext/mssql 
  - Several memleaks plugged
  
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_dblib/dblib_driver.c?r1=1.18&r2=1.19&diff_format=u
Index: php-src/ext/pdo_dblib/dblib_driver.c
diff -u php-src/ext/pdo_dblib/dblib_driver.c:1.18 
php-src/ext/pdo_dblib/dblib_driver.c:1.19
--- php-src/ext/pdo_dblib/dblib_driver.c:1.18   Tue Mar 10 23:39:28 2009
+++ php-src/ext/pdo_dblib/dblib_driver.cThu Mar 19 22:15:03 2009
@@ -17,7 +17,7 @@
   +--+
 */
 
-/* $Id: dblib_driver.c,v 1.18 2009/03/10 23:39:28 helly Exp $ */
+/* $Id: dblib_driver.c,v 1.19 2009/03/19 22:15:03 sfox Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -229,7 +229,11 @@
if (H->link == NULL) {
goto cleanup;
}
-   
+
+   if (DBSETOPT(H->link, DBTEXTLIMIT, "2147483647") == FAIL) {
+   goto cleanup;
+   }
+
if (vars[3].optval && FAIL == dbuse(H->link, vars[3].optval)) {
goto cleanup;
}
http://cvs.php.net/viewvc.cgi/php-src/ext/pdo_dblib/dblib_stmt.c?r1=1.13&r2=1.14&diff_format=u
Index: php-src/ext/pdo_dblib/dblib_stmt.c
diff -u php-src/ext/pdo_dblib/dblib_stmt.c:1.13 
php-src/ext/pdo_dblib/dblib_stmt.c:1.14
--- php-src/ext/pdo_dblib/dblib_stmt.c:1.13 Tue Mar 10 23:39:28 2009
+++ php-src/ext/pdo_dblib/dblib_stmt.c  Thu Mar 19 22:15:03 2009
@@ -17,7 +17,7 @@
   +--+
 */
 
-/* $Id: dblib_stmt.c,v 1.13 2009/03/10 23:39:28 helly Exp $ */
+/* $Id: dblib_stmt.c,v 1.14 2009/03/19 22:15:03 sfox Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -113,18 +113,27 @@
stmt->column_count = S->ncols;

for (i = 0, j = 0; i < S->ncols; i++) {
+   char *tmp = NULL;
+
S->cols[i].coltype = dbcoltype(H->link, i+1);
-   S->cols[i].name = dbcolname(H->link, i+1);
-   if (S->cols[i].name) {
-   S->cols[i].name = estrdup(S->cols[i].name);
-   } else if (j) {
-   spprintf(&S->cols[i].name, 0, "computed%d", 
j++);
-   } else {
-   S->cols[i].name = estrdup("computed");
-   j++;
+   S->cols[i].name = (char*)dbcolname(H->link, i+1);
+
+   if (!strlen(S->cols[i].name)) {
+   if (j) {
+   spprintf(&tmp, 0, "computed%d", j++);
+   strlcpy(S->cols[i].name, tmp, 
strlen(tmp)+1);
+   efree(tmp);
+   } else {
+   S->cols[i].name = "computed";
+   j++;
+   }
}
-   S->cols[i].source = dbcolsource(H->link, i+1);
-   S->cols[i].source = estrdup(S->cols[i].source ? 
S->cols[i].source : "");
+
+   S->cols[i].source = (char*)dbcolsource(H->link, i+1);
+   tmp = estrdup(S->cols[i].source ? S->cols[i].source : 
"");
+   S->cols[i].source = tmp;
+   efree(tmp);
+
S->cols[i].maxlen = dbcollen(H->link, i+1);
}
}



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] cvs: php-src /ext/pdo_dblib dblib_driver.c dblib_stmt.c pdo_dblib.c /ext/pdo_dblib/tests common.phpt

2005-07-19 Thread Wez Furlong
wez Wed Jul 20 01:27:27 2005 EDT

  Added files: 
/php-src/ext/pdo_dblib/testscommon.phpt 

  Modified files:  
/php-src/ext/pdo_dblib  dblib_driver.c dblib_stmt.c pdo_dblib.c 
  Log:
  use pdo core test suite.
  Now passes all but one test.  Volunteers that want to track down the cause
  for test pdo_018.phpt not passing are welcome.
  
  
http://cvs.php.net/diff.php/php-src/ext/pdo_dblib/dblib_driver.c?r1=1.8&r2=1.9&ty=u
Index: php-src/ext/pdo_dblib/dblib_driver.c
diff -u php-src/ext/pdo_dblib/dblib_driver.c:1.8 
php-src/ext/pdo_dblib/dblib_driver.c:1.9
--- php-src/ext/pdo_dblib/dblib_driver.c:1.8Tue Jul 12 08:16:02 2005
+++ php-src/ext/pdo_dblib/dblib_driver.cWed Jul 20 01:27:27 2005
@@ -17,7 +17,7 @@
   +--+
 */
 
-/* $Id: dblib_driver.c,v 1.8 2005/07/12 12:16:02 wez Exp $ */
+/* $Id: dblib_driver.c,v 1.9 2005/07/20 05:27:27 wez Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -44,15 +44,18 @@
S = (pdo_dblib_stmt*)stmt->driver_data;
einfo = &S->err;
}
-   
+
if (einfo->dberr == SYBESMSG && einfo->lastmsg) {
msg = einfo->lastmsg;
+   } else if (einfo->dberr == SYBESMSG && DBLIB_G(err).lastmsg) {
+   msg = DBLIB_G(err).lastmsg;
+   DBLIB_G(err).lastmsg = NULL;
} else {
msg = einfo->dberrstr;
}
 
-   spprintf(&message, 0, "%s [%d] (severity %d)",
-   msg, einfo->dberr, einfo->severity);
+   spprintf(&message, 0, "%s [%d] (severity %d) [%s]",
+   msg, einfo->dberr, einfo->severity, stmt ? 
stmt->active_query_string : "");
 
add_next_index_long(info, einfo->dberr);
add_next_index_string(info, message, 0);
http://cvs.php.net/diff.php/php-src/ext/pdo_dblib/dblib_stmt.c?r1=1.5&r2=1.6&ty=u
Index: php-src/ext/pdo_dblib/dblib_stmt.c
diff -u php-src/ext/pdo_dblib/dblib_stmt.c:1.5 
php-src/ext/pdo_dblib/dblib_stmt.c:1.6
--- php-src/ext/pdo_dblib/dblib_stmt.c:1.5  Fri Jun 10 02:32:36 2005
+++ php-src/ext/pdo_dblib/dblib_stmt.c  Wed Jul 20 01:27:27 2005
@@ -17,7 +17,7 @@
   +--+
 */
 
-/* $Id: dblib_stmt.c,v 1.5 2005/06/10 06:32:36 wez Exp $ */
+/* $Id: dblib_stmt.c,v 1.6 2005/07/20 05:27:27 wez Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -47,6 +47,7 @@
}
efree(S->rows);
S->rows = NULL;
+   S->nrows = 0;
 }
 
 static int pdo_dblib_stmt_dtor(pdo_stmt_t *stmt TSRMLS_DC)
@@ -96,7 +97,7 @@
ret = dbnextrow(H->link);
 
 if (ret == NO_MORE_ROWS) {
-   return 0;
+   return 1;
 }
 
if (!S->cols) {
@@ -139,33 +140,38 @@
for (i = 0; i < S->ncols; i++) {
pdo_dblib_colval *val = &S->rows[S->nrows * S->ncols + 
i];
 
-   switch (S->cols[i].coltype) {
-   case SQLCHAR:
-   case SQLTEXT:
-   case SQLVARBINARY:
-   case SQLBINARY:
-   case SQLIMAGE:
-   val->len = dbdatlen(H->link, i+1);
-   val->data = emalloc(val->len + 1);
-   memcpy(val->data, dbdata(H->link, i+1), 
val->len);
-   val->data[val->len] = '\0';
-   break;
-
-   default:
-   if (dbwillconvert(S->cols[i].coltype, 
SQLCHAR)) {
-   val->len = 32 + (2 * 
dbdatlen(H->link, i+1));
-   val->data = emalloc(val->len);
-
-   val->len = dbconvert(NULL, 
S->cols[i].coltype, dbdata(H->link, i+1),
-   
dbdatlen(H->link, i+1), SQLCHAR, val->data, val->len);
-
-   if (val->len >= 0) {
-   val->data[val->len] = 
'\0';
+   if (dbdatlen(H->link, i+1) == 0 && dbdata(H->link, i+1) 
== NULL) {
+   val->len = 0;
+   val->data = NULL;
+   } else {
+   switch (S->cols[i].coltype) {
+   case SQLCHAR:
+   case SQLTEXT:
+   case SQLVARBINARY:
+   case SQLBINARY:
+   case SQLIMAGE:
+   val->len = dbdatlen(H->link, 
i+1);
+   va