From: Michael Meskes Date: Mon, 24 Apr 2006 09:46:32 +0000 (+0000) Subject: Fixed memory leak bugs found by Martijn Oosterhout. X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=2db33f9deaf7c072dc0ab41ec139c7e914e8c1f4;p=users%2Fbernd%2Fpostgres.git Fixed memory leak bugs found by Martijn Oosterhout. --- diff --git a/src/interfaces/ecpg/compatlib/informix.c b/src/interfaces/ecpg/compatlib/informix.c index 973d7a8547..538aa3dc47 100644 --- a/src/interfaces/ecpg/compatlib/informix.c +++ b/src/interfaces/ecpg/compatlib/informix.c @@ -161,8 +161,7 @@ ecpg_strndup(const char *str, size_t len) int deccvasc(char *cp, int len, decimal * np) { - char *str = ecpg_strndup(cp, len); /* decimal_in always converts the - * complete string */ + char *str; int ret = 0; numeric *result; @@ -170,6 +169,7 @@ deccvasc(char *cp, int len, decimal * np) if (risnull(CSTRINGTYPE, cp)) return 0; + str = ecpg_strndup(cp, len); /* decimal_in always converts the complete string */ if (!str) ret = ECPG_INFORMIX_NUM_UNDERFLOW; else diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c index 549b2aa321..a06be42353 100644 --- a/src/interfaces/ecpg/ecpglib/execute.c +++ b/src/interfaces/ecpg/ecpglib/execute.c @@ -848,7 +848,7 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var, if (var->arrsize > 1) { - for (element = 0; element < var->arrsize; element++) + for (element = 0; element < var->arrsize; element++, nval = PGTYPESnumeric_new()) { if (var->type == ECPGt_numeric) PGTYPESnumeric_copy((numeric *) ((var + var->offset * element)->value), nval); diff --git a/src/interfaces/ecpg/pgtypeslib/numeric.c b/src/interfaces/ecpg/pgtypeslib/numeric.c index b06b8d14e5..0742f59851 100644 --- a/src/interfaces/ecpg/pgtypeslib/numeric.c +++ b/src/interfaces/ecpg/pgtypeslib/numeric.c @@ -363,24 +363,19 @@ PGTYPESnumeric_from_asc(char *str, char **endptr) numeric *value = (numeric *) pgtypes_alloc(sizeof(numeric)); int ret; -#if 0 - long typmod = -1; -#endif char *realptr; char **ptr = (endptr != NULL) ? endptr : &realptr; - if (!value) + if (!value) return (NULL); ret = set_var_from_str(str, ptr, value); if (ret) + { + free(value); return (NULL); + } -#if 0 - ret = apply_typmod(value, typmod); - if (ret) - return (NULL); -#endif return (value); }