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 */
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));

View File

@@ -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

View File

@@ -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() */

View File

@@ -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;