aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorvan Hauser <vh@thc.org>2020-12-21 11:02:09 +0100
committerGitHub <noreply@github.com>2020-12-21 11:02:09 +0100
commit6d1f17d78dec7947a18174918af0703310af015e (patch)
tree4145bc58d29c59159a1be5049d6ff4beea46afee /include
parentbc9f956c84dacdf34e7cfaf8fc6552b1ae4b8417 (diff)
parentc28ecbbb2b35cc0fd9eac267ea4db33d891d9e59 (diff)
downloadAFLplusplus-6d1f17d78dec7947a18174918af0703310af015e.tar.gz
Merge branch 'dev' into skim_romu
Diffstat (limited to 'include')
-rw-r--r--include/config.h17
-rw-r--r--include/debug.h78
-rw-r--r--include/envs.h6
-rw-r--r--include/forkserver.h2
4 files changed, 98 insertions, 5 deletions
diff --git a/include/config.h b/include/config.h
index 1eb6bc5e..e8a49270 100644
--- a/include/config.h
+++ b/include/config.h
@@ -36,11 +36,28 @@
* *
******************************************************/
+/* console output colors: There are three ways to configure its behavior
+ * 1. default: colored outputs fixed on: defined USE_COLOR && defined
+ * ALWAYS_COLORED The env var. AFL_NO_COLOR will have no effect
+ * 2. defined USE_COLOR && !defined ALWAYS_COLORED
+ * -> depending on env var AFL_NO_COLOR=1 colors can be switched off
+ * at run-time. Default is to use colors.
+ * 3. colored outputs fixed off: !defined USE_COLOR
+ * The env var. AFL_NO_COLOR will have no effect
+ */
+
/* Comment out to disable terminal colors (note that this makes afl-analyze
a lot less nice): */
#define USE_COLOR
+#ifdef USE_COLOR
+ /* Comment in to always enable terminal colors */
+ /* Comment out to enable runtime controlled terminal colors via AFL_NO_COLOR
+ */
+ #define ALWAYS_COLORED 1
+#endif
+
/* StatsD config
Config can be adjusted via AFL_STATSD_HOST and AFL_STATSD_PORT environment
variable.
diff --git a/include/debug.h b/include/debug.h
index 5512023c..7f4a6be1 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -168,12 +168,84 @@
* Debug & error macros *
************************/
-/* Just print stuff to the appropriate stream. */
+#if defined USE_COLOR && !defined ALWAYS_COLORED
+ #include <unistd.h>
+ #pragma GCC diagnostic ignored "-Wformat-security"
+static inline const char *colorfilter(const char *x) {
+
+ static int once = 1;
+ static int disabled = 0;
+
+ if (once) {
+
+ /* when there is no tty -> we always want filtering
+ * when AFL_NO_UI is set filtering depends on AFL_NO_COLOR
+ * otherwise we want always colors
+ */
+ disabled =
+ isatty(2) && (!getenv("AFL_NO_UI") ||
+ (!getenv("AFL_NO_COLOR") && !getenv("AFL_NO_COLOUR")));
+ once = 0;
+
+ }
+
+ if (likely(disabled)) return x;
+
+ static char monochromestring[4096];
+ char * d = monochromestring;
+ int in_seq = 0;
+
+ while (*x) {
+
+ if (in_seq && *x == 'm') {
+
+ in_seq = 0;
+
+ } else {
+ if (!in_seq && *x == '\x1b') { in_seq = 1; }
+ if (!in_seq) { *d++ = *x; }
+
+ }
+
+ ++x;
+
+ }
+
+ *d = '\0';
+ return monochromestring;
+
+}
+
+#else
+ #define colorfilter(x) x /* no filtering necessary */
+#endif
+
+/* macro magic to transform the first parameter to SAYF
+ * through colorfilter which strips coloring */
+#define GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, \
+ _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, \
+ _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, \
+ _39, _40, NAME, ...) \
+ NAME
+
+#define SAYF(...) \
+ GET_MACRO(__VA_ARGS__, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, \
+ SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, \
+ SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, \
+ SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, \
+ SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, SAYF_N, \
+ SAYF_N, SAYF_1) \
+ (__VA_ARGS__)
+
+#define SAYF_1(x) MY_SAYF(colorfilter(x))
+#define SAYF_N(x, ...) MY_SAYF(colorfilter(x), __VA_ARGS__)
+
+/* Just print stuff to the appropriate stream. */
#ifdef MESSAGES_TO_STDOUT
- #define SAYF(x...) printf(x)
+ #define MY_SAYF(x...) printf(x)
#else
- #define SAYF(x...) fprintf(stderr, x)
+ #define MY_SAYF(x...) fprintf(stderr, x)
#endif /* ^MESSAGES_TO_STDOUT */
/* Show a prefixed warning. */
diff --git a/include/envs.h b/include/envs.h
index c0f41ca5..e4e49c4d 100644
--- a/include/envs.h
+++ b/include/envs.h
@@ -78,8 +78,8 @@ static char *afl_environment_variables[] = {
"AFL_LLVM_CTX",
"AFL_LLVM_DICT2FILE",
"AFL_LLVM_DOCUMENT_IDS",
- "AFL_LLVM_INSTRUMENT",
"AFL_LLVM_INSTRIM_LOOPHEAD",
+ "AFL_LLVM_INSTRUMENT",
"AFL_LLVM_LTO_AUTODICTIONARY",
"AFL_LLVM_AUTODICTIONARY",
"AFL_LLVM_SKIPSINGLEBLOCK",
@@ -103,6 +103,10 @@ static char *afl_environment_variables[] = {
"AFL_NO_ARITH",
"AFL_NO_AUTODICT",
"AFL_NO_BUILTIN",
+#if defined USE_COLOR && !defined ALWAYS_COLORED
+ "AFL_NO_COLOR",
+ "AFL_NO_COLOUR",
+#endif
"AFL_NO_CPU_RED",
"AFL_NO_FORKSRV",
"AFL_NO_UI",
diff --git a/include/forkserver.h b/include/forkserver.h
index 5d5c728f..8e029266 100644
--- a/include/forkserver.h
+++ b/include/forkserver.h
@@ -64,7 +64,7 @@ typedef struct afl_forkserver {
FILE *plot_file; /* Gnuplot output file */
- /* Note: lat_run_timed_out is u32 to send it to the child as 4 byte array */
+ /* Note: last_run_timed_out is u32 to send it to the child as 4 byte array */
u32 last_run_timed_out; /* Traced process timed out? */
u8 last_kill_signal; /* Signal that killed the child */