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:
@@ -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));
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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() */
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user