mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-12 18:34:36 +08:00
Fixed incorrect memory management.
This commit is contained in:
parent
2720c57005
commit
fc19373993
@ -1,4 +1,4 @@
|
|||||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.86 2009/08/07 10:51:20 meskes Exp $ */
|
/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.87 2009/09/03 10:24:48 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.
|
||||||
@ -469,8 +469,8 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
|
|||||||
char *newcopy = NULL;
|
char *newcopy = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* arrays are not possible unless the attribute is an array too FIXME: we
|
* arrays are not possible unless the attribute is an array too
|
||||||
* do not know if the attribute is an array here
|
* FIXME: we do not know if the attribute is an array here
|
||||||
*/
|
*/
|
||||||
#if 0
|
#if 0
|
||||||
if (var->arrsize > 1 &&...)
|
if (var->arrsize > 1 &&...)
|
||||||
@ -818,6 +818,9 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
|
|||||||
|
|
||||||
if (var->arrsize > 1)
|
if (var->arrsize > 1)
|
||||||
{
|
{
|
||||||
|
if (!(mallocedval = ecpg_strdup("array [", lineno)))
|
||||||
|
return false;
|
||||||
|
|
||||||
for (element = 0; element < var->arrsize; element++)
|
for (element = 0; element < var->arrsize; element++)
|
||||||
{
|
{
|
||||||
nval = PGTYPESnumeric_new();
|
nval = PGTYPESnumeric_new();
|
||||||
@ -833,15 +836,12 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
|
|||||||
slen = strlen(str);
|
slen = strlen(str);
|
||||||
PGTYPESnumeric_free(nval);
|
PGTYPESnumeric_free(nval);
|
||||||
|
|
||||||
if (!(mallocedval = ecpg_realloc(mallocedval, strlen(mallocedval) + slen + sizeof("array [] "), lineno)))
|
if (!(mallocedval = ecpg_realloc(mallocedval, strlen(mallocedval) + slen + 2, lineno)))
|
||||||
{
|
{
|
||||||
ecpg_free(str);
|
ecpg_free(str);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!element)
|
|
||||||
strcpy(mallocedval, "array [");
|
|
||||||
|
|
||||||
strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
|
strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
|
||||||
strcpy(mallocedval + strlen(mallocedval), ",");
|
strcpy(mallocedval + strlen(mallocedval), ",");
|
||||||
ecpg_free(str);
|
ecpg_free(str);
|
||||||
@ -885,6 +885,9 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
|
|||||||
|
|
||||||
if (var->arrsize > 1)
|
if (var->arrsize > 1)
|
||||||
{
|
{
|
||||||
|
if (!(mallocedval = ecpg_strdup("array [", lineno)))
|
||||||
|
return false;
|
||||||
|
|
||||||
for (element = 0; element < var->arrsize; element++)
|
for (element = 0; element < var->arrsize; element++)
|
||||||
{
|
{
|
||||||
str = quote_postgres(PGTYPESinterval_to_asc((interval *) ((var + var->offset * element)->value)), quote, lineno);
|
str = quote_postgres(PGTYPESinterval_to_asc((interval *) ((var + var->offset * element)->value)), quote, lineno);
|
||||||
@ -892,15 +895,12 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
|
|||||||
return false;
|
return false;
|
||||||
slen = strlen(str);
|
slen = strlen(str);
|
||||||
|
|
||||||
if (!(mallocedval = ecpg_realloc(mallocedval, strlen(mallocedval) + slen + sizeof("array [],interval "), lineno)))
|
if (!(mallocedval = ecpg_realloc(mallocedval, strlen(mallocedval) + slen + 2, lineno)))
|
||||||
{
|
{
|
||||||
ecpg_free(str);
|
ecpg_free(str);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!element)
|
|
||||||
strcpy(mallocedval, "array [");
|
|
||||||
|
|
||||||
strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
|
strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
|
||||||
strcpy(mallocedval + strlen(mallocedval), ",");
|
strcpy(mallocedval + strlen(mallocedval), ",");
|
||||||
ecpg_free(str);
|
ecpg_free(str);
|
||||||
@ -936,6 +936,9 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
|
|||||||
|
|
||||||
if (var->arrsize > 1)
|
if (var->arrsize > 1)
|
||||||
{
|
{
|
||||||
|
if (!(mallocedval = ecpg_strdup("array [", lineno)))
|
||||||
|
return false;
|
||||||
|
|
||||||
for (element = 0; element < var->arrsize; element++)
|
for (element = 0; element < var->arrsize; element++)
|
||||||
{
|
{
|
||||||
str = quote_postgres(PGTYPESdate_to_asc(*(date *) ((var + var->offset * element)->value)), quote, lineno);
|
str = quote_postgres(PGTYPESdate_to_asc(*(date *) ((var + var->offset * element)->value)), quote, lineno);
|
||||||
@ -943,15 +946,12 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
|
|||||||
return false;
|
return false;
|
||||||
slen = strlen(str);
|
slen = strlen(str);
|
||||||
|
|
||||||
if (!(mallocedval = ecpg_realloc(mallocedval, strlen(mallocedval) + slen + sizeof("array [],date "), lineno)))
|
if (!(mallocedval = ecpg_realloc(mallocedval, strlen(mallocedval) + slen + 2, lineno)))
|
||||||
{
|
{
|
||||||
ecpg_free(str);
|
ecpg_free(str);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!element)
|
|
||||||
strcpy(mallocedval, "array [");
|
|
||||||
|
|
||||||
strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
|
strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
|
||||||
strcpy(mallocedval + strlen(mallocedval), ",");
|
strcpy(mallocedval + strlen(mallocedval), ",");
|
||||||
ecpg_free(str);
|
ecpg_free(str);
|
||||||
@ -987,6 +987,9 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
|
|||||||
|
|
||||||
if (var->arrsize > 1)
|
if (var->arrsize > 1)
|
||||||
{
|
{
|
||||||
|
if (!(mallocedval = ecpg_strdup("array [", lineno)))
|
||||||
|
return false;
|
||||||
|
|
||||||
for (element = 0; element < var->arrsize; element++)
|
for (element = 0; element < var->arrsize; element++)
|
||||||
{
|
{
|
||||||
str = quote_postgres(PGTYPEStimestamp_to_asc(*(timestamp *) ((var + var->offset * element)->value)), quote, lineno);
|
str = quote_postgres(PGTYPEStimestamp_to_asc(*(timestamp *) ((var + var->offset * element)->value)), quote, lineno);
|
||||||
@ -995,15 +998,12 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari
|
|||||||
|
|
||||||
slen = strlen(str);
|
slen = strlen(str);
|
||||||
|
|
||||||
if (!(mallocedval = ecpg_realloc(mallocedval, strlen(mallocedval) + slen + sizeof("array [], timestamp "), lineno)))
|
if (!(mallocedval = ecpg_realloc(mallocedval, strlen(mallocedval) + slen + 2, lineno)))
|
||||||
{
|
{
|
||||||
ecpg_free(str);
|
ecpg_free(str);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!element)
|
|
||||||
strcpy(mallocedval, "array [");
|
|
||||||
|
|
||||||
strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
|
strncpy(mallocedval + strlen(mallocedval), str, slen + 1);
|
||||||
strcpy(mallocedval + strlen(mallocedval), ",");
|
strcpy(mallocedval + strlen(mallocedval), ",");
|
||||||
ecpg_free(str);
|
ecpg_free(str);
|
||||||
|
Loading…
Reference in New Issue
Block a user