patches fixing bugs in postgres 7.1 driver
Michael Jerris <[email protected]> Fri, 18 Apr 2014 13:47:13 -0400
| Newsgroups | gmane.comp.db.unixodbc.devel |
|---|---|
| Message-ID | <[email protected]> |
--Apple-Mail=_B84D049B-C62E-40A0-864C-A89BC0370371 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii Please see attached patches for memory leaks and a data truncation issue = in the postgres driver. Feedback and inclusion appreciated. Thanks Mike --Apple-Mail=_B84D049B-C62E-40A0-864C-A89BC0370371 Content-Disposition: attachment; filename=postgres7.1.fixes.diff Content-Type: application/octet-stream; name="postgres7.1.fixes.diff" Content-Transfer-Encoding: 7bit commit 736ffd7de5c70c30660867433490f2d728038365 Author: Michael Jerris <[email protected]> Date: Fri Apr 18 13:42:46 2014 -0400 postgres 7.1 driver float cat be 15 decimal places plus the period for 16 diff --git a/Drivers/Postgre7.1/pgtypes.c b/Drivers/Postgre7.1/pgtypes.c index e4964b8..1602db5 100644 --- a/Drivers/Postgre7.1/pgtypes.c +++ b/Drivers/Postgre7.1/pgtypes.c @@ -480,7 +480,7 @@ Int4 pgtype_precision(StatementClass *stmt, Int4 type, int col, int handle_unkno case PG_TYPE_FLOAT4: case PG_TYPE_MONEY: return 7; - case PG_TYPE_FLOAT8: return 15; + case PG_TYPE_FLOAT8: return 16; case PG_TYPE_DATE: return 10; case PG_TYPE_TIME: return 8; commit 796ed9fc7a885e03164fb99f0683e28b8296e45b Author: Michael Jerris <[email protected]> Date: Fri Apr 18 13:42:07 2014 -0400 postgres 7.1 error message leak diff --git a/Drivers/Postgre7.1/environ.c b/Drivers/Postgre7.1/environ.c index edca310..114326d 100644 --- a/Drivers/Postgre7.1/environ.c +++ b/Drivers/Postgre7.1/environ.c @@ -83,7 +83,7 @@ SQLRETURN SQLError(SQLHENV henv, SQLCHAR *szErrorMsg, SQLSMALLINT cbErrorMsgMax, SQLSMALLINT *pcbErrorMsg) { -char *msg; +char *msg = NULL; int status; mylog("**** SQLError: henv=%u, hdbc=%u, hstmt=%u\n", henv, hdbc, hstmt); @@ -217,7 +217,10 @@ int status; } mylog(" szSqlState = '%s', szError='%s'\n", szSqlState, szErrorMsg); - + + if ( msg ) { + free(msg); + } } else { if (NULL != szSqlState) strcpy((char*)szSqlState, "00000"); commit bae70e71b4d3fb7f7e0a7e0f1880c015b97f95ee Author: Michael Jerris <[email protected]> Date: Fri Apr 18 13:41:02 2014 -0400 postgres 7.1 driver leak diff --git a/Drivers/Postgre7.1/connection.c b/Drivers/Postgre7.1/connection.c index c8a14e2..d978e73 100644 --- a/Drivers/Postgre7.1/connection.c +++ b/Drivers/Postgre7.1/connection.c @@ -234,6 +234,8 @@ ConnectionClass *rv; rv->henv = (HENV)NULL; /* not yet associated with an environment */ + rv->__error_message = NULL; + CC_clear_error(rv); rv->status = CONN_NOT_CONNECTED; @@ -314,6 +316,8 @@ CC_Destructor(ConnectionClass *self) CC_set_errormsg(self, NULL); + CC_clear_error(self); + free(self); mylog("exit CC_Destructor\n"); @@ -345,6 +349,7 @@ void CC_clear_error(ConnectionClass *self) { self->__error_number = 0; + if (self->__error_message) free(self->__error_message); self->__error_message = NULL; self->errormsg_created = FALSE; } @@ -929,8 +934,7 @@ CC_create_errormsg(ConnectionClass *self) void CC_set_error(ConnectionClass *self, int number, const char *message) { - if (self->__error_message) - free(self->__error_message); + CC_clear_error(self); self->__error_number = number; self->__error_message = message ? strdup(message) : NULL; } @@ -939,8 +943,7 @@ CC_set_error(ConnectionClass *self, int number, const char *message) void CC_set_errormsg(ConnectionClass *self, const char *message) { - if (self->__error_message) - free(self->__error_message); + CC_clear_error(self); self->__error_message = message ? strdup(message) : NULL; } @@ -955,8 +958,7 @@ CC_get_error(ConnectionClass *self, int *number, char **message) /* Create a very informative errormsg if it hasn't been done yet. */ if ( ! self->errormsg_created) { msgcrt = CC_create_errormsg(self); - if (self->__error_message) - free(self->__error_message); + CC_clear_error(self); self->__error_message = msgcrt; self->errormsg_created = TRUE; } diff --git a/Drivers/Postgre7.1/statement.c b/Drivers/Postgre7.1/statement.c index 522cfaf..558ab5d 100644 --- a/Drivers/Postgre7.1/statement.c +++ b/Drivers/Postgre7.1/statement.c @@ -209,7 +209,7 @@ SC_Constructor(void) rv->prepare = FALSE; rv->status = STMT_ALLOCATED; rv->internal = FALSE; - + rv->__error_message = NULL; SC_clear_error(rv); rv->statement = NULL; @@ -281,6 +281,7 @@ SC_Destructor(StatementClass *self) if (self->bindings) free(self->bindings); + SC_clear_error(self); /* Free the parsed table information */ if (self->ti) { @@ -516,6 +517,7 @@ void SC_clear_error(StatementClass *self) { self->__error_number = 0; + if (self->__error_message) free(self->__error_message); self->__error_message = NULL; self->errormsg_created = FALSE; } @@ -573,19 +575,19 @@ SC_create_errormsg(StatementClass *self) void SC_set_error(StatementClass *self, int number, const char *message) { - if (self->__error_message) - free(self->__error_message); + SC_clear_error(self); self->__error_number = number; self->__error_message = message ? strdup(message) : NULL; + self->errormsg_created = !!self->__error_message; } void SC_set_errormsg(StatementClass *self, const char *message) { - if (self->__error_message) - free(self->__error_message); + SC_clear_error(self); self->__error_message = message ? strdup(message) : NULL; + self->errormsg_created = !!self->__error_message; } @@ -596,14 +598,17 @@ char rv; /* Create a very informative errormsg if it hasn't been done yet. */ if ( ! self->errormsg_created) { - self->__error_message = SC_create_errormsg(self); - self->errormsg_created = TRUE; + SC_clear_error(self); + if ((self->__error_message = SC_create_errormsg(self))) { + self->errormsg_created = TRUE; + } } if (self->__error_number) { *number = self->__error_number; *message = self->__error_message; self->__error_message = NULL; + self->errormsg_created = FALSE; } rv = (self->__error_number != 0); --Apple-Mail=_B84D049B-C62E-40A0-864C-A89BC0370371 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_B84D049B-C62E-40A0-864C-A89BC0370371 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ unixODBC-dev mailing list [email protected] http://mailman.unixodbc.org/mailman/listinfo/unixodbc-dev --Apple-Mail=_B84D049B-C62E-40A0-864C-A89BC0370371--