diff --git a/libnetutil/netutil.cc b/libnetutil/netutil.cc index 6756790f3..d73881cfe 100644 --- a/libnetutil/netutil.cc +++ b/libnetutil/netutil.cc @@ -4138,13 +4138,15 @@ pcap_t *my_pcap_open_live(const char *device, int snaplen, int promisc, int to_m /* Set a pcap filter */ void set_pcap_filter(const char *device, pcap_t *pd, const char *bpf, ...) { va_list ap; + int size; char buf[3072]; struct bpf_program fcode; va_start(ap, bpf); - if (Vsnprintf(buf, sizeof(buf), bpf, ap) >= (int) sizeof(buf)) - netutil_fatal("%s called with too-large filter arg\n", __func__); + size = Vsnprintf(buf, sizeof(buf), bpf, ap); va_end(ap); + if (size >= (int) sizeof(buf)) + netutil_fatal("%s called with too-large filter arg\n", __func__); if (pcap_compile(pd, &fcode, buf, 1, PCAP_NETMASK_UNKNOWN) < 0) netutil_fatal("Error compiling our pcap filter: %s", pcap_geterr(pd)); diff --git a/nbase/snprintf.c b/nbase/snprintf.c index 541b960b4..c00be9ce6 100644 --- a/nbase/snprintf.c +++ b/nbase/snprintf.c @@ -489,6 +489,7 @@ snprintf (char *str, size_t sz, const char *format, ...) va_start(args, format); ret = vsnprintf (str, sz, format, args); + va_end(args); #ifdef PARANOIA { @@ -497,14 +498,15 @@ snprintf (char *str, size_t sz, const char *format, ...) tmp = safe_malloc (sz); + va_start(args, format); ret2 = vsprintf (tmp, format, args); + va_end(args); if (ret != ret2 || strcmp(str, tmp)) abort (); free (tmp); } #endif - va_end(args); return ret; } #endif @@ -565,6 +567,7 @@ asprintf (char **ret, const char *format, ...) va_start(args, format); val = vasprintf (ret, format, args); + va_end(args); #ifdef PARANOIA { @@ -572,14 +575,15 @@ asprintf (char **ret, const char *format, ...) char *tmp; tmp = safe_malloc (val + 1); + va_start(args, format); ret2 = vsprintf (tmp, format, args); + va_end(args); if (val != ret2 || strcmp(*ret, tmp)) abort (); free (tmp); } #endif - va_end(args); return val; } #endif @@ -593,6 +597,7 @@ asnprintf (char **ret, size_t max_sz, const char *format, ...) va_start(args, format); val = vasnprintf (ret, max_sz, format, args); + va_end(args); #ifdef PARANOIA { @@ -600,14 +605,15 @@ asnprintf (char **ret, size_t max_sz, const char *format, ...) char *tmp; tmp = safe_malloc (val + 1); + va_start(args, format); ret2 = vsprintf (tmp, format, args); + va_end(args); if (val != ret2 || strcmp(*ret, tmp)) abort (); free (tmp); } #endif - va_end(args); return val; } #endif diff --git a/nping/output.cc b/nping/output.cc index 509b1452f..e6817ec4b 100644 --- a/nping/output.cc +++ b/nping/output.cc @@ -151,7 +151,6 @@ int nping_fatal(int level, const char *str, ...) { char errstr[MAX_ERR_STR_LEN]; memset(errstr,0, MAX_ERR_STR_LEN); - va_start(list, str); fflush(stdout); fflush(stderr); @@ -166,11 +165,12 @@ int nping_fatal(int level, const char *str, ...) { if ( (level>=QT_3 && level<=VB_4) || (level>=DBG_1 && level<=DBG_9) ){ + va_start(list, str); vfprintf(stderr, str, list); + va_end(list); fprintf(stderr,"\n"); /* Print to stderr */ } - va_end(list); exit(EXIT_FAILURE); return OP_SUCCESS; } /* End of nping_fatal() */ @@ -189,7 +189,6 @@ int nping_warning(int level, const char *str, ...) { bool skipnewline=false; memset(errstr,0, MAX_ERR_STR_LEN); - va_start(list, str); fflush(stdout); fflush(stderr); @@ -210,11 +209,12 @@ int nping_warning(int level, const char *str, ...) { /* Otherwise, print the info to stderr*/ if ( (level>=QT_3 && level<=VB_4) || (level>=DBG_1 && level<=DBG_9) ){ + va_start(list, str); vfprintf(stderr, str, list); /* Print to stderr */ + va_end(list); if( !skipnewline ) fprintf(stderr,"\n"); } - va_end(list); return OP_SUCCESS; } /* End of nping_warning() */ @@ -231,7 +231,6 @@ int nping_print(int level, const char *str, ...){ bool skipnewline=false; memset(errstr,0, MAX_ERR_STR_LEN); - va_start(list, str); fflush(stdout); int current_vb_level= o.getVerbosity(); @@ -251,11 +250,12 @@ int nping_print(int level, const char *str, ...){ /* Otherwise, print the info to stderr*/ if ( (level>=QT_3 && level<=VB_4) || (level>=DBG_1 && level<=DBG_9) ){ + va_start(list, str); vfprintf(stdout, str, list); /* Print to stderr */ + va_end(list); if( !skipnewline ) fprintf(stdout,"\n"); } - va_end(list); return OP_SUCCESS; } /* End of nping_print() */ diff --git a/nsock/src/nsock_write.c b/nsock/src/nsock_write.c index 994b93284..a9d85165d 100644 --- a/nsock/src/nsock_write.c +++ b/nsock/src/nsock_write.c @@ -175,18 +175,20 @@ nsock_event_id nsock_printf(nsock_pool ms_pool, nsock_iod ms_iod, char displaystr[256]; va_list ap; - va_start(ap,format); nse = event_new(nsp, NSE_TYPE_WRITE, nsi, timeout_msecs, handler, userdata); assert(nse); + va_start(ap,format); res = Vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); if (res != -1) { if (res > sizeof(buf)) { buf2 = (char * )safe_malloc(res + 16); + va_start(ap,format); res2 = Vsnprintf(buf2, sizeof(buf), format, ap); + va_end(ap); if (res2 == -1 || res2 > res) { free(buf2); buf2 = NULL;