From: Tom Lane Date: Sun, 5 May 2002 17:38:28 +0000 (+0000) Subject: plpgsql_dstring_append was broken for long strings. X-Git-Url: http://git.postgresql.org/gitweb/static/gitweb.js?a=commitdiff_plain;h=36ab737a6b6c6f55db3250920c0c663b07af328a;p=users%2Fbernd%2Fpostgres.git plpgsql_dstring_append was broken for long strings. --- diff --git a/src/pl/plpgsql/src/pl_funcs.c b/src/pl/plpgsql/src/pl_funcs.c index ca0b0e5877..17fd85ab46 100644 --- a/src/pl/plpgsql/src/pl_funcs.c +++ b/src/pl/plpgsql/src/pl_funcs.c @@ -64,6 +64,7 @@ plpgsql_dstring_init(PLpgSQL_dstring * ds) { ds->value = palloc(ds->alloc = 512); ds->used = 0; + ds->value[0] = '\0'; } @@ -86,10 +87,14 @@ void plpgsql_dstring_append(PLpgSQL_dstring * ds, char *str) { int len = strlen(str); + int needed = ds->used + len + 1; - if (ds->used + len + 1 > ds->alloc) + if (needed > ds->alloc) { - ds->alloc *= 2; + /* might have to double more than once, if len is large */ + do { + ds->alloc *= 2; + } while (needed > ds->alloc); ds->value = repalloc(ds->value, ds->alloc); }