aboutsummaryrefslogtreecommitdiff
path: root/include/debug.h
diff options
context:
space:
mode:
authorhexcoder- <heiko@hexco.de>2020-12-18 21:10:39 +0100
committerhexcoder- <heiko@hexco.de>2020-12-18 21:10:39 +0100
commit12ebb351dc2b5655b4174539e2b9ee59e4acf893 (patch)
treeed66d2b7f4e8d6d1a7f2ff0d9b44a1eb9af39c99 /include/debug.h
parent73dd6d86abc16c2ceb5529f3a261724be8b7896a (diff)
downloadafl++-12ebb351dc2b5655b4174539e2b9ee59e4acf893.tar.gz
apply nocolor changes
Diffstat (limited to 'include/debug.h')
-rw-r--r--include/debug.h72
1 files changed, 66 insertions, 6 deletions
diff --git a/include/debug.h b/include/debug.h
index 5512023c..7a1725b5 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -168,12 +168,72 @@
* 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. */
@@ -222,7 +282,7 @@
do { \
\
SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD \
- "\n[-] PROGRAM ABORT : " cRST x); \
+ "\n[-] PROGRAM ABORT : " cRST x); \
SAYF(cLRD "\n Location : " cRST "%s(), %s:%u\n\n", __func__, \
__FILE__, __LINE__); \
exit(1); \
@@ -235,7 +295,7 @@
do { \
\
SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD \
- "\n[-] PROGRAM ABORT : " cRST x); \
+ "\n[-] PROGRAM ABORT : " cRST x); \
SAYF(cLRD "\n Stop location : " cRST "%s(), %s:%u\n\n", __func__, \
__FILE__, __LINE__); \
abort(); \
@@ -249,7 +309,7 @@
\
fflush(stdout); \
SAYF(bSTOP RESET_G1 CURSOR_SHOW cRST cLRD \
- "\n[-] SYSTEM ERROR : " cRST x); \
+ "\n[-] SYSTEM ERROR : " cRST x); \
SAYF(cLRD "\n Stop location : " cRST "%s(), %s:%u\n", __func__, \
__FILE__, __LINE__); \
SAYF(cLRD " OS message : " cRST "%s\n", strerror(errno)); \