diff options
author | Michael Meskes | 2009-09-03 10:24:48 +0000 |
---|---|---|
committer | Michael Meskes | 2009-09-03 10:24:48 +0000 |
commit | 0995f1546a9e4d77504e97bbccfde3c260020b26 (patch) | |
tree | 288379ddcbcc00d82aec31edaa5d7ace047a2c09 | |
parent | ce4fb24aee2a4463d772af0cc65c1397cc0391f5 (diff) |
Fixed incorrect memory management.
-rw-r--r-- | src/interfaces/ecpg/ecpglib/execute.c | 36 |
1 files changed, 18 insertions, 18 deletions
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c index 0305425f1b..a53b1a222c 100644 --- a/src/interfaces/ecpg/ecpglib/execute.c +++ b/src/interfaces/ecpg/ecpglib/execute.c @@ -469,8 +469,8 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari char *newcopy = NULL; /* - * arrays are not possible unless the attribute is an array too FIXME: we - * do not know if the attribute is an array here + * arrays are not possible unless the attribute is an array too + * FIXME: we do not know if the attribute is an array here */ #if 0 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 (!(mallocedval = ecpg_strdup("array [", lineno))) + return false; + for (element = 0; element < var->arrsize; element++) { nval = PGTYPESnumeric_new(); @@ -833,15 +836,12 @@ ecpg_store_input(const int lineno, const bool force_indicator, const struct vari slen = strlen(str); 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); return false; } - if (!element) - strcpy(mallocedval, "array ["); - strncpy(mallocedval + strlen(mallocedval), str, slen + 1); strcpy(mallocedval + strlen(mallocedval), ","); 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 (!(mallocedval = ecpg_strdup("array [", lineno))) + return false; + for (element = 0; element < var->arrsize; element++) { 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; 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); return false; } - if (!element) - strcpy(mallocedval, "array ["); - strncpy(mallocedval + strlen(mallocedval), str, slen + 1); strcpy(mallocedval + strlen(mallocedval), ","); 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 (!(mallocedval = ecpg_strdup("array [", lineno))) + return false; + for (element = 0; element < var->arrsize; element++) { 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; 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); return false; } - if (!element) - strcpy(mallocedval, "array ["); - strncpy(mallocedval + strlen(mallocedval), str, slen + 1); strcpy(mallocedval + strlen(mallocedval), ","); 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 (!(mallocedval = ecpg_strdup("array [", lineno))) + return false; + for (element = 0; element < var->arrsize; element++) { 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); - 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); return false; } - if (!element) - strcpy(mallocedval, "array ["); - strncpy(mallocedval + strlen(mallocedval), str, slen + 1); strcpy(mallocedval + strlen(mallocedval), ","); ecpg_free(str); |