1
0
mirror of https://github.com/nmap/nmap.git synced 2025-12-23 16:09:02 +00:00

Rectifies incorrect use of va_start/va_end from stdarg.h. Closes #1297

This commit is contained in:
nnposter
2018-08-09 22:11:15 +00:00
parent 0c617b26d9
commit 302954fb3f
4 changed files with 22 additions and 12 deletions

View File

@@ -4138,13 +4138,15 @@ pcap_t *my_pcap_open_live(const char *device, int snaplen, int promisc, int to_m
/* Set a pcap filter */ /* Set a pcap filter */
void set_pcap_filter(const char *device, pcap_t *pd, const char *bpf, ...) { void set_pcap_filter(const char *device, pcap_t *pd, const char *bpf, ...) {
va_list ap; va_list ap;
int size;
char buf[3072]; char buf[3072];
struct bpf_program fcode; struct bpf_program fcode;
va_start(ap, bpf); va_start(ap, bpf);
if (Vsnprintf(buf, sizeof(buf), bpf, ap) >= (int) sizeof(buf)) size = Vsnprintf(buf, sizeof(buf), bpf, ap);
netutil_fatal("%s called with too-large filter arg\n", __func__);
va_end(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) if (pcap_compile(pd, &fcode, buf, 1, PCAP_NETMASK_UNKNOWN) < 0)
netutil_fatal("Error compiling our pcap filter: %s", pcap_geterr(pd)); netutil_fatal("Error compiling our pcap filter: %s", pcap_geterr(pd));

View File

@@ -489,6 +489,7 @@ snprintf (char *str, size_t sz, const char *format, ...)
va_start(args, format); va_start(args, format);
ret = vsnprintf (str, sz, format, args); ret = vsnprintf (str, sz, format, args);
va_end(args);
#ifdef PARANOIA #ifdef PARANOIA
{ {
@@ -497,14 +498,15 @@ snprintf (char *str, size_t sz, const char *format, ...)
tmp = safe_malloc (sz); tmp = safe_malloc (sz);
va_start(args, format);
ret2 = vsprintf (tmp, format, args); ret2 = vsprintf (tmp, format, args);
va_end(args);
if (ret != ret2 || strcmp(str, tmp)) if (ret != ret2 || strcmp(str, tmp))
abort (); abort ();
free (tmp); free (tmp);
} }
#endif #endif
va_end(args);
return ret; return ret;
} }
#endif #endif
@@ -565,6 +567,7 @@ asprintf (char **ret, const char *format, ...)
va_start(args, format); va_start(args, format);
val = vasprintf (ret, format, args); val = vasprintf (ret, format, args);
va_end(args);
#ifdef PARANOIA #ifdef PARANOIA
{ {
@@ -572,14 +575,15 @@ asprintf (char **ret, const char *format, ...)
char *tmp; char *tmp;
tmp = safe_malloc (val + 1); tmp = safe_malloc (val + 1);
va_start(args, format);
ret2 = vsprintf (tmp, format, args); ret2 = vsprintf (tmp, format, args);
va_end(args);
if (val != ret2 || strcmp(*ret, tmp)) if (val != ret2 || strcmp(*ret, tmp))
abort (); abort ();
free (tmp); free (tmp);
} }
#endif #endif
va_end(args);
return val; return val;
} }
#endif #endif
@@ -593,6 +597,7 @@ asnprintf (char **ret, size_t max_sz, const char *format, ...)
va_start(args, format); va_start(args, format);
val = vasnprintf (ret, max_sz, format, args); val = vasnprintf (ret, max_sz, format, args);
va_end(args);
#ifdef PARANOIA #ifdef PARANOIA
{ {
@@ -600,14 +605,15 @@ asnprintf (char **ret, size_t max_sz, const char *format, ...)
char *tmp; char *tmp;
tmp = safe_malloc (val + 1); tmp = safe_malloc (val + 1);
va_start(args, format);
ret2 = vsprintf (tmp, format, args); ret2 = vsprintf (tmp, format, args);
va_end(args);
if (val != ret2 || strcmp(*ret, tmp)) if (val != ret2 || strcmp(*ret, tmp))
abort (); abort ();
free (tmp); free (tmp);
} }
#endif #endif
va_end(args);
return val; return val;
} }
#endif #endif

View File

@@ -151,7 +151,6 @@ int nping_fatal(int level, const char *str, ...) {
char errstr[MAX_ERR_STR_LEN]; char errstr[MAX_ERR_STR_LEN];
memset(errstr,0, MAX_ERR_STR_LEN); memset(errstr,0, MAX_ERR_STR_LEN);
va_start(list, str);
fflush(stdout); fflush(stdout);
fflush(stderr); 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) ){ if ( (level>=QT_3 && level<=VB_4) || (level>=DBG_1 && level<=DBG_9) ){
va_start(list, str);
vfprintf(stderr, str, list); vfprintf(stderr, str, list);
va_end(list);
fprintf(stderr,"\n"); /* Print to stderr */ fprintf(stderr,"\n"); /* Print to stderr */
} }
va_end(list);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
return OP_SUCCESS; return OP_SUCCESS;
} /* End of nping_fatal() */ } /* End of nping_fatal() */
@@ -189,7 +189,6 @@ int nping_warning(int level, const char *str, ...) {
bool skipnewline=false; bool skipnewline=false;
memset(errstr,0, MAX_ERR_STR_LEN); memset(errstr,0, MAX_ERR_STR_LEN);
va_start(list, str);
fflush(stdout); fflush(stdout);
fflush(stderr); fflush(stderr);
@@ -210,11 +209,12 @@ int nping_warning(int level, const char *str, ...) {
/* Otherwise, print the info to stderr*/ /* Otherwise, print the info to stderr*/
if ( (level>=QT_3 && level<=VB_4) || (level>=DBG_1 && level<=DBG_9) ){ if ( (level>=QT_3 && level<=VB_4) || (level>=DBG_1 && level<=DBG_9) ){
va_start(list, str);
vfprintf(stderr, str, list); /* Print to stderr */ vfprintf(stderr, str, list); /* Print to stderr */
va_end(list);
if( !skipnewline ) if( !skipnewline )
fprintf(stderr,"\n"); fprintf(stderr,"\n");
} }
va_end(list);
return OP_SUCCESS; return OP_SUCCESS;
} /* End of nping_warning() */ } /* End of nping_warning() */
@@ -231,7 +231,6 @@ int nping_print(int level, const char *str, ...){
bool skipnewline=false; bool skipnewline=false;
memset(errstr,0, MAX_ERR_STR_LEN); memset(errstr,0, MAX_ERR_STR_LEN);
va_start(list, str);
fflush(stdout); fflush(stdout);
int current_vb_level= o.getVerbosity(); int current_vb_level= o.getVerbosity();
@@ -251,11 +250,12 @@ int nping_print(int level, const char *str, ...){
/* Otherwise, print the info to stderr*/ /* Otherwise, print the info to stderr*/
if ( (level>=QT_3 && level<=VB_4) || (level>=DBG_1 && level<=DBG_9) ){ if ( (level>=QT_3 && level<=VB_4) || (level>=DBG_1 && level<=DBG_9) ){
va_start(list, str);
vfprintf(stdout, str, list); /* Print to stderr */ vfprintf(stdout, str, list); /* Print to stderr */
va_end(list);
if( !skipnewline ) if( !skipnewline )
fprintf(stdout,"\n"); fprintf(stdout,"\n");
} }
va_end(list);
return OP_SUCCESS; return OP_SUCCESS;
} /* End of nping_print() */ } /* End of nping_print() */

View File

@@ -175,18 +175,20 @@ nsock_event_id nsock_printf(nsock_pool ms_pool, nsock_iod ms_iod,
char displaystr[256]; char displaystr[256];
va_list ap; va_list ap;
va_start(ap,format);
nse = event_new(nsp, NSE_TYPE_WRITE, nsi, timeout_msecs, handler, userdata); nse = event_new(nsp, NSE_TYPE_WRITE, nsi, timeout_msecs, handler, userdata);
assert(nse); assert(nse);
va_start(ap,format);
res = Vsnprintf(buf, sizeof(buf), format, ap); res = Vsnprintf(buf, sizeof(buf), format, ap);
va_end(ap); va_end(ap);
if (res != -1) { if (res != -1) {
if (res > sizeof(buf)) { if (res > sizeof(buf)) {
buf2 = (char * )safe_malloc(res + 16); buf2 = (char * )safe_malloc(res + 16);
va_start(ap,format);
res2 = Vsnprintf(buf2, sizeof(buf), format, ap); res2 = Vsnprintf(buf2, sizeof(buf), format, ap);
va_end(ap);
if (res2 == -1 || res2 > res) { if (res2 == -1 || res2 > res) {
free(buf2); free(buf2);
buf2 = NULL; buf2 = NULL;