84 lines
3.4 KiB
Diff
84 lines
3.4 KiB
Diff
From 60a0d26ba7dc9e6c9456c37dbd892cd56d4a2ddb Mon Sep 17 00:00:00 2001
|
|
From: Hans Ulrich Niedermann <hun@n-dimensional.de>
|
|
Date: Fri, 28 Dec 2018 03:20:59 +0100
|
|
Subject: [PATCH] get rid of a few signed int and unchecked input value ranges
|
|
|
|
---
|
|
beep.c | 25 +++++++++++++------------
|
|
1 file changed, 13 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/beep.c b/beep.c
|
|
index 2bea6cd..b838b85 100644
|
|
--- a/beep.c
|
|
+++ b/beep.c
|
|
@@ -74,10 +74,10 @@ char *copyright =
|
|
|
|
typedef struct beep_parms_t {
|
|
unsigned int freq; /* tone frequency (Hz) */
|
|
- int length; /* tone length (ms) */
|
|
- int reps; /* # of repetitions */
|
|
- int delay; /* delay between reps (ms) */
|
|
- int end_delay; /* do we delay after last rep? */
|
|
+ unsigned int length; /* tone length (ms) */
|
|
+ unsigned int reps; /* # of repetitions */
|
|
+ unsigned int delay; /* delay between reps (ms) */
|
|
+ unsigned int end_delay; /* do we delay after last rep? */
|
|
int stdin_beep; /* are we using stdin triggers? We have three options:
|
|
- just beep and terminate (default)
|
|
- beep after a line of input
|
|
@@ -202,19 +202,19 @@ void parse_command_line(int argc, char **argv, beep_parms_t *result) {
|
|
}
|
|
break;
|
|
case 'l' : /* length */
|
|
- if(!sscanf(optarg, "%d", &argval) || (argval < 0))
|
|
+ if(!sscanf(optarg, "%d", &argval) || (argval < 0) || (argval > 2100000))
|
|
usage_bail(argv[0]);
|
|
else
|
|
result->length = argval;
|
|
break;
|
|
case 'r' : /* repetitions */
|
|
- if(!sscanf(optarg, "%d", &argval) || (argval < 0))
|
|
+ if(!sscanf(optarg, "%d", &argval) || (argval < 0) || (argval > 2100000))
|
|
usage_bail(argv[0]);
|
|
else
|
|
result->reps = argval;
|
|
break;
|
|
case 'd' : /* delay between reps - WITHOUT delay after last beep*/
|
|
- if(!sscanf(optarg, "%d", &argval) || (argval < 0))
|
|
+ if(!sscanf(optarg, "%d", &argval) || (argval < 0) || (argval > 2100000))
|
|
usage_bail(argv[0]);
|
|
else {
|
|
result->delay = argval;
|
|
@@ -222,7 +222,7 @@ void parse_command_line(int argc, char **argv, beep_parms_t *result) {
|
|
}
|
|
break;
|
|
case 'D' : /* delay between reps - WITH delay after last beep */
|
|
- if(!sscanf(optarg, "%d", &argval) || (argval < 0))
|
|
+ if(!sscanf(optarg, "%d", &argval) || (argval < 0) || (argval > 2100000))
|
|
usage_bail(argv[0]);
|
|
else {
|
|
result->delay = argval;
|
|
@@ -270,7 +270,7 @@ void parse_command_line(int argc, char **argv, beep_parms_t *result) {
|
|
}
|
|
|
|
void play_beep(beep_parms_t parms) {
|
|
- int i; /* loop counter */
|
|
+ unsigned int i; /* loop counter */
|
|
|
|
if(parms.verbose == 1)
|
|
fprintf(stderr, "[DEBUG] %d times %d ms beeps (%d delay between, "
|
|
@@ -281,10 +281,11 @@ void play_beep(beep_parms_t parms) {
|
|
for (i = 0; i < parms.reps; i++) { /* start beep */
|
|
do_beep(parms.freq);
|
|
/* Look ma, I'm not ansi C compatible! */
|
|
- usleep(1000*parms.length); /* wait... */
|
|
+ usleep(1000U*parms.length); /* wait... */
|
|
do_beep(0); /* stop beep */
|
|
- if(parms.end_delay || (i+1 < parms.reps))
|
|
- usleep(1000*parms.delay); /* wait... */
|
|
+ if (parms.end_delay || ((i+1) < parms.reps)) {
|
|
+ usleep(1000U*parms.delay); /* wait... */
|
|
+ }
|
|
} /* repeat. */
|
|
}
|
|
|