Fixed memory leak bugs found by Martijn Oosterhout.

This commit is contained in:
Michael Meskes 2006-04-24 09:46:32 +00:00
parent 8a3789cdfa
commit 1d18949563
3 changed files with 8 additions and 13 deletions

View File

@ -161,8 +161,7 @@ ecpg_strndup(const char *str, size_t len)
int int
deccvasc(char *cp, int len, decimal * np) deccvasc(char *cp, int len, decimal * np)
{ {
char *str = ecpg_strndup(cp, len); /* decimal_in always converts the char *str;
* complete string */
int ret = 0; int ret = 0;
numeric *result; numeric *result;
@ -170,6 +169,7 @@ deccvasc(char *cp, int len, decimal * np)
if (risnull(CSTRINGTYPE, cp)) if (risnull(CSTRINGTYPE, cp))
return 0; return 0;
str = ecpg_strndup(cp, len); /* decimal_in always converts the complete string */
if (!str) if (!str)
ret = ECPG_INFORMIX_NUM_UNDERFLOW; ret = ECPG_INFORMIX_NUM_UNDERFLOW;
else else

View File

@ -1,4 +1,4 @@
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.26.2.5 2005/06/02 12:50:30 meskes Exp $ */ /* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.26.2.6 2006/04/24 09:46:32 meskes Exp $ */
/* /*
* The aim is to get a simpler inteface to the database routines. * The aim is to get a simpler inteface to the database routines.
@ -848,7 +848,7 @@ ECPGstore_input(const struct statement * stmt, const struct variable * var,
if (var->arrsize > 1) 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) if (var->type == ECPGt_numeric)
PGTYPESnumeric_copy((numeric *) ((var + var->offset * element)->value), nval); PGTYPESnumeric_copy((numeric *) ((var + var->offset * element)->value), nval);

View File

@ -363,24 +363,19 @@ PGTYPESnumeric_from_asc(char *str, char **endptr)
numeric *value = (numeric *) pgtypes_alloc(sizeof(numeric)); numeric *value = (numeric *) pgtypes_alloc(sizeof(numeric));
int ret; int ret;
#if 0
long typmod = -1;
#endif
char *realptr; char *realptr;
char **ptr = (endptr != NULL) ? endptr : &realptr; char **ptr = (endptr != NULL) ? endptr : &realptr;
if (!value) if (!value)
return (NULL); return (NULL);
ret = set_var_from_str(str, ptr, value); ret = set_var_from_str(str, ptr, value);
if (ret) if (ret)
{
free(value);
return (NULL); return (NULL);
}
#if 0
ret = apply_typmod(value, typmod);
if (ret)
return (NULL);
#endif
return (value); return (value);
} }