diff options
author | Dominik Maier <domenukk@gmail.com> | 2021-01-08 11:36:40 +0100 |
---|---|---|
committer | Dominik Maier <domenukk@gmail.com> | 2021-01-08 11:36:40 +0100 |
commit | 34732e3c5ede9020ff1802f0f0827e3731217dce (patch) | |
tree | d833692ced76c2c45a3cd26e9341487419dc812a /src/afl-common.c | |
parent | 7eaca9c840e7e8599db3a7a09bcbf6d774ee7631 (diff) | |
download | afl++-34732e3c5ede9020ff1802f0f0827e3731217dce.tar.gz |
refactored kill signal env parsing
Diffstat (limited to 'src/afl-common.c')
-rw-r--r-- | src/afl-common.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/afl-common.c b/src/afl-common.c index 21cb6ab4..3a7d0ce5 100644 --- a/src/afl-common.c +++ b/src/afl-common.c @@ -424,6 +424,40 @@ u8 *find_binary(u8 *fname) { } +/* Parses the kill signal environment variable, FATALs on error. + If the env is not set, sets the env to default_signal for the signal handlers + and returns the default_signal. */ +int parse_afl_kill_signal_env(u8 *afl_kill_signal_env, int default_signal) { + + if (afl_kill_signal_env && afl_kill_signal_env[0]) { + + char *endptr; + u8 signal_code; + signal_code = (u8)strtoul(afl_kill_signal_env, &endptr, 10); + /* Did we manage to parse the full string? */ + if (*endptr != '\0' || endptr == (char *)afl_kill_signal_env) { + + FATAL("Invalid AFL_KILL_SIGNAL: %s (expected unsigned int)", + afl_kill_signal_env); + + } + + return signal_code; + + } else { + + char *sigstr = alloc_printf("%d", default_signal); + if (!sigstr) { FATAL("Failed to alloc mem for signal buf"); } + + /* Set the env for signal handler */ + setenv("AFL_KILL_SIGNAL", sigstr, 1); + free(sigstr); + return default_signal; + + } + +} + void check_environment_vars(char **envp) { if (be_quiet) { return; } |