fortune, strfile: Improve validation of command-line arguments.
- Avoid potential overflow when parsing a percentage. - Avoid truncation when copying file paths. PR: 246050 Submitted by: Akos Somfai <akos.somfai@gmail.com> (original) MFC after: 1 week
This commit is contained in:
parent
a08d04f4e4
commit
777c9f5a38
@ -400,11 +400,12 @@ form_file_list(char **files, int file_cnt)
|
||||
sp = files[i];
|
||||
else {
|
||||
percent = 0;
|
||||
for (sp = files[i]; isdigit((unsigned char)*sp); sp++)
|
||||
for (sp = files[i]; isdigit((unsigned char)*sp); sp++) {
|
||||
percent = percent * 10 + *sp - '0';
|
||||
if (percent > 100) {
|
||||
fprintf(stderr, "percentages must be <= 100\n");
|
||||
return (FALSE);
|
||||
if (percent > 100) {
|
||||
fprintf(stderr, "percentages must be <= 100\n");
|
||||
return (FALSE);
|
||||
}
|
||||
}
|
||||
if (*sp == '.') {
|
||||
fprintf(stderr, "percentages must be integers\n");
|
||||
|
@ -295,16 +295,26 @@ getargs(int argc, char **argv)
|
||||
|
||||
if (*argv) {
|
||||
Infile = *argv;
|
||||
if (*++argv)
|
||||
strcpy(Outfile, *argv);
|
||||
if (*++argv) {
|
||||
if (strlcpy(Outfile, *argv, sizeof(Outfile)) >=
|
||||
sizeof(Outfile)) {
|
||||
fprintf(stderr,
|
||||
"output_file path is too long\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!Infile) {
|
||||
puts("No input file name");
|
||||
usage();
|
||||
}
|
||||
if (*Outfile == '\0') {
|
||||
strlcpy(Outfile, Infile, sizeof(Outfile));
|
||||
strlcat(Outfile, ".dat", sizeof(Outfile));
|
||||
if ((size_t)snprintf(Outfile, sizeof(Outfile), "%s.dat",
|
||||
Infile) >= sizeof(Outfile)) {
|
||||
fprintf(stderr,
|
||||
"generated output_file path is too long\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user