From a3852a6cb1c69f629e3728d68716129c2e50b620 Mon Sep 17 00:00:00 2001 From: Arun Prakash Jana Date: Wed, 3 May 2017 23:10:52 +0530 Subject: [PATCH] Retain control chars when invoking external utils --- nnn.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/nnn.c b/nnn.c index 8c884973..31b0e948 100644 --- a/nnn.c +++ b/nnn.c @@ -1103,7 +1103,9 @@ show_stats(char* fpath, char* fname, struct stat *sb) if (S_ISREG(sb->st_mode)) { /* Show file(1) output */ - sprintf(buf, "file -b \"%s\" 2>&1", fpath); + strcpy(buf, "file -b \""); + xstrlcpy(buf + strlen(buf), fpath, strlen(fpath) + 1); + strcat(buf, "\" 2>&1"); p = get_output(buf, PATH_MAX + 16); if (p) { dprintf(fd, "\n\n "); @@ -1135,14 +1137,17 @@ show_mediainfo(const char* fpath, int full) { static char buf[MAX_CMD_LEN]; - snprintf(buf, MAX_CMD_LEN, "which mediainfo"); + strcpy(buf, "which mediainfo"); if (get_output(buf, MAX_CMD_LEN) == NULL) return -1; + strcpy(buf, "mediainfo \""); + xstrlcpy(buf + strlen(buf), fpath, strlen(fpath) + 1); if (full) - sprintf(buf, "mediainfo -f \"%s\" 2>&1 | %s", fpath, xgetenv("PAGER", "less")); + strcat(buf, "\" -f "); else - sprintf(buf, "mediainfo \"%s\" 2>&1 | %s", fpath, xgetenv("PAGER", "less")); + strcat(buf, "\" "); + sprintf(buf + strlen(buf), "2>&1 | %s", xgetenv("PAGER", "less")); return system(buf); } @@ -1566,9 +1571,9 @@ nochange: /* If NNN_OPENER is set, use it */ if (opener) { - snprintf(cmd, MAX_CMD_LEN, - "%s \"%s\" > /dev/null 2>&1", - opener, newpath); + sprintf(cmd, "%s \"", opener); + xstrlcpy(cmd + strlen(cmd), newpath, strlen(newpath) + 1); + strcat(cmd, "\" > /dev/null 2>&1"); r = system(cmd); continue; } @@ -1576,8 +1581,9 @@ nochange: /* Play with nlay if identified */ mime = getmime(dents[cur].name); if (mime) { - snprintf(cmd, MAX_CMD_LEN, "nlay \"%s\" %s", - newpath, mime); + strcpy(cmd, "nlay \""); + xstrlcpy(cmd + strlen(cmd), newpath, strlen(newpath) + 1); + sprintf(cmd + strlen(cmd), "\" %s", mime); exitcurses(); r = system(cmd); initcurses(); @@ -1586,8 +1592,9 @@ nochange: /* If nlay doesn't handle it, open plain text files with vi, then try NNN_FALLBACK_OPENER */ - snprintf(cmd, MAX_CMD_LEN, - "file \"%s\"", newpath); + strcpy(cmd, "file -b \""); + xstrlcpy(cmd + strlen(cmd), newpath, strlen(newpath) + 1); + strcat(cmd, "\""); if (get_output(cmd, MAX_CMD_LEN) == NULL) continue; @@ -1598,8 +1605,9 @@ nochange: initcurses(); continue; } else if (fb_opener) { - snprintf(cmd, MAX_CMD_LEN, "%s \"%s\" > /dev/null 2>&1", - fb_opener, newpath); + sprintf(cmd, "%s \"", fb_opener); + xstrlcpy(cmd + strlen(cmd), newpath, strlen(newpath) + 1); + strcat(cmd, "\" > /dev/null 2>&1"); r = system(cmd); continue; }