From 5e0f604418897975c1f45b46a3987bd0b0c831e4 Mon Sep 17 00:00:00 2001 From: Jon Siwek Date: Tue, 10 Sep 2013 11:30:13 -0500 Subject: [PATCH] binpac: Add missing va_end()'s to match va_start()'s. Probably not an issue on most implementations, but undefined behavior is scary and it's easy to fix. --- tools/binpac/src/pac_output.cc | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/tools/binpac/src/pac_output.cc b/tools/binpac/src/pac_output.cc index 99af4bd400..32875bdee6 100644 --- a/tools/binpac/src/pac_output.cc +++ b/tools/binpac/src/pac_output.cc @@ -41,7 +41,21 @@ int Output::print(const char* fmt, ...) { va_list ap; va_start(ap, fmt); - return print(fmt, ap); + int r = -1; + + try + { + r = print(fmt, ap); + } + + catch ( ... ) + { + va_end(ap); + throw; + } + + va_end(ap); + return r; } int Output::println(const char* fmt, ...) @@ -49,11 +63,22 @@ int Output::println(const char* fmt, ...) for ( int i = 0; i < indent(); ++i ) fprintf(fp, "\t"); - int r; va_list ap; va_start(ap, fmt); - r = print(fmt, ap); + int r = -1; + try + { + r = print(fmt, ap); + } + + catch ( ... ) + { + va_end(ap); + throw; + } + + va_end(ap); fprintf(fp, "\n"); return r; }