diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index d50f82df9e8d114e37529429b426136db6760658..1b08b2ce8b58cc24208215a8b9bd03fbb0b4f30c 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -872,21 +872,21 @@ int archprintf(Archive* AH, const char *fmt, ...) int bSize = strlen(fmt) + 256; int cnt = -1; - va_start(ap, fmt); - /* This is paranoid: deal with the possibility that vsnprintf is willing to ignore trailing null */ /* or returns > 0 even if string does not fit. It may be the case that it returns cnt = bufsize */ - while (cnt < 0 || cnt >= (bSize-1) ) { - if (p != NULL) free(p); - bSize *= 2; - if ((p = malloc(bSize)) == NULL) + while (cnt < 0 || cnt >= (bSize-1) ) { - va_end(ap); - exit_horribly(AH, "%s: could not allocate buffer for archprintf\n", progname); - } - cnt = vsnprintf(p, bSize, fmt, ap); + if (p != NULL) free(p); + bSize *= 2; + p = (char*)malloc(bSize); + if (p == NULL) + { + exit_horribly(AH, "%s: could not allocate buffer for archprintf\n", progname); + } + va_start(ap, fmt); + cnt = vsnprintf(p, bSize, fmt, ap); + va_end(ap); } - va_end(ap); WriteData(AH, p, cnt); free(p); return cnt; @@ -977,21 +977,21 @@ int ahprintf(ArchiveHandle* AH, const char *fmt, ...) int bSize = strlen(fmt) + 256; /* Should be enough */ int cnt = -1; - va_start(ap, fmt); /* This is paranoid: deal with the possibility that vsnprintf is willing to ignore trailing null */ /* or returns > 0 even if string does not fit. It may be the case that it returns cnt = bufsize */ - while (cnt < 0 || cnt >= (bSize - 1) ) { + while (cnt < 0 || cnt >= (bSize - 1) ) + { if (p != NULL) free(p); bSize *= 2; p = (char*)malloc(bSize); if (p == NULL) { - va_end(ap); die_horribly(AH, "%s: could not allocate buffer for ahprintf\n", progname); } + va_start(ap, fmt); cnt = vsnprintf(p, bSize, fmt, ap); + va_end(ap); } - va_end(ap); ahwrite(p, 1, cnt, AH); free(p); return cnt; diff --git a/src/bin/pg_dump/pg_backup_tar.c b/src/bin/pg_dump/pg_backup_tar.c index 87dada274d5bdc6a56ade0e9ec638eda8480b2b5..a24701a37ccf8d2e4b2552c12b01ad401d615e65 100644 --- a/src/bin/pg_dump/pg_backup_tar.c +++ b/src/bin/pg_dump/pg_backup_tar.c @@ -899,24 +899,22 @@ static int tarPrintf(ArchiveHandle *AH, TAR_MEMBER *th, const char *fmt, ...) int bSize = strlen(fmt) + 256; /* Should be enough */ int cnt = -1; - va_start(ap, fmt); /* This is paranoid: deal with the possibility that vsnprintf is willing to ignore trailing null */ /* or returns > 0 even if string does not fit. It may be the case that it returns cnt = bufsize */ - while (cnt < 0 || cnt >= (bSize - 1) ) { + while (cnt < 0 || cnt >= (bSize - 1) ) + { if (p != NULL) free(p); bSize *= 2; p = (char*)malloc(bSize); if (p == NULL) { - va_end(ap); - die_horribly(AH, "%s: could not allocate buffer for ahprintf\n", progname); + die_horribly(AH, "%s: could not allocate buffer for tarPrintf\n", progname); } + va_start(ap, fmt); cnt = vsnprintf(p, bSize, fmt, ap); + va_end(ap); } - va_end(ap); - cnt = tarWrite(p, cnt, th); - free(p); return cnt; }