aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Steven Schubiger <stsc@refcnt.org> 2013-11-16 23:19:06 +0100
committerGravatar Steven Schubiger <stsc@refcnt.org> 2013-11-16 23:19:06 +0100
commit4f6ff00bd402a74d794214f3c58c19b98eafa756 (patch)
treecc48e636051992f7050b037b9a3c183cb012f8bf
parent1e96a9284dde2717737cb3c1d2b5f77026b30fc1 (diff)
downloadcolorize-4f6ff00bd402a74d794214f3c58c19b98eafa756.tar.gz
colorize-4f6ff00bd402a74d794214f3c58c19b98eafa756.tar.bz2
Validate color provided to exclude-random switch
-rw-r--r--colorize.c18
-rwxr-xr-xtest.pl2
2 files changed, 14 insertions, 6 deletions
diff --git a/colorize.c b/colorize.c
index 319c799..4303eb7 100644
--- a/colorize.c
+++ b/colorize.c
@@ -262,13 +262,21 @@ main (int argc, char **argv)
clean_all = true;
break;
case OPT_EXCLUDE_RANDOM: {
- char *p;
+ bool valid = false;
+ unsigned int i;
exclude = xstrdup (optarg);
STACK_VAR (exclude);
- for (p = exclude; *p; p++)
- *p = tolower (*p);
- if (streq (exclude, "random"))
- vfprintf_fail (formats[FMT_GENERIC], "--exclude-random switch must be provided a color");
+ for (i = 1; i < tables[FOREGROUND].count - 1; i++) /* skip color none and default */
+ {
+ const struct color *entry = &tables[FOREGROUND].entries[i];
+ if (streq (exclude, entry->name))
+ {
+ valid = true;
+ break;
+ }
+ }
+ if (!valid)
+ vfprintf_fail (formats[FMT_GENERIC], "--exclude-random switch must be provided a plain color");
break;
}
case OPT_HELP:
diff --git a/test.pl b/test.pl
index 7968097..49a0cf3 100755
--- a/test.pl
+++ b/test.pl
@@ -61,7 +61,7 @@ SKIP: {
my $file = $write_to_tmpfile->('abc');
- $ok &= $run_program_fail->($program, '--exclude-random=random', 'must be provided a color');
+ $ok &= $run_program_fail->($program, '--exclude-random=random', 'must be provided a plain color');
$ok &= $run_program_fail->($program, '--clean --clean-all', 'mutually exclusive');
$ok &= $run_program_fail->($program, '--clean file1 file2', 'more than one file');
$ok &= $run_program_fail->($program, '--clean-all file1 file2', 'more than one file');