From ff7b7b3a6f9ef774e69d723a46ce0a1dfaea36e7 Mon Sep 17 00:00:00 2001 From: Philippe Teuwen Date: Fri, 8 May 2020 18:12:10 +0200 Subject: [PATCH] proper filtering of RL markers --- client/src/proxmark3.c | 5 ++++- client/src/ui.c | 17 +++++++++++++---- client/src/ui.h | 1 + 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/client/src/proxmark3.c b/client/src/proxmark3.c index a592503de..53cef9067 100644 --- a/client/src/proxmark3.c +++ b/client/src/proxmark3.c @@ -331,7 +331,10 @@ check_script: } char prompt[PROXPROMPT_MAX_SIZE] = {0}; prompt_compose(prompt, sizeof(prompt), prompt_ctx, prompt_dev); - PrintAndLogEx(NORMAL, "%s%s", prompt, cmd); + // always filter RL magic separators if not using readline + char prompt_filtered[PROXPROMPT_MAX_SIZE] = {0}; + memcpy_filter_rlmarkers(prompt_filtered, prompt, sizeof(prompt_filtered)); + PrintAndLogEx(NORMAL, "%s%s", prompt_filtered, cmd); g_printAndLog = PRINTANDLOG_PRINT | PRINTANDLOG_LOG; // add to history if not from a script diff --git a/client/src/ui.c b/client/src/ui.c index f4e9ec9a6..5d5b84743 100644 --- a/client/src/ui.c +++ b/client/src/ui.c @@ -351,6 +351,19 @@ void SetFlushAfterWrite(bool value) { flushAfterWrite = value; } +void memcpy_filter_rlmarkers(void *dest, const void *src, size_t n) { + uint8_t *rdest = (uint8_t *)dest; + uint8_t *rsrc = (uint8_t *)src; + uint16_t si = 0; + for (uint16_t i = 0; i < n; i++) { + if ((i < n) + && ((rsrc[i] == '\001') || (rsrc[i] == '\002'))) + // skip readline special markers + continue; + rdest[si++] = rsrc[i]; + } +} + void memcpy_filter_ansi(void *dest, const void *src, size_t n, bool filter) { if (filter) { // Filter out ANSI sequences on these OS @@ -358,10 +371,6 @@ void memcpy_filter_ansi(void *dest, const void *src, size_t n, bool filter) { uint8_t *rsrc = (uint8_t *)src; uint16_t si = 0; for (uint16_t i = 0; i < n; i++) { - if ((i < n) - && ((rsrc[i] == '\001') || (rsrc[i] == '\002'))) - // skip readline special markers - continue; if ((i < n - 1) && (rsrc[i] == '\x1b') && (rsrc[i + 1] >= 0x40) diff --git a/client/src/ui.h b/client/src/ui.h index 7a2c90659..20b5a3619 100644 --- a/client/src/ui.h +++ b/client/src/ui.h @@ -56,6 +56,7 @@ void PrintAndLogOptions(const char *str[][2], size_t size, size_t space); void PrintAndLogEx(logLevel_t level, const char *fmt, ...); void SetFlushAfterWrite(bool value); void memcpy_filter_ansi(void *dest, const void *src, size_t n, bool filter); +void memcpy_filter_rlmarkers(void *dest, const void *src, size_t n); void memcpy_filter_emoji(void *dest, const void *src, size_t n, emojiMode_t mode); int searchHomeFilePath(char **foundpath, const char *filename, bool create_home);