iDo not null-terminate strings printed by snprintf - sacc - sacc(omys), simple console gopher client Err bitreich.org 70 hgit clone git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ URL:git://bitreich.org/sacc/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/sacc/ bitreich.org 70 1Log /scm/sacc/log.gph bitreich.org 70 1Files /scm/sacc/files.gph bitreich.org 70 1Refs /scm/sacc/refs.gph bitreich.org 70 1Tags /scm/sacc/tag bitreich.org 70 1LICENSE /scm/sacc/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 6272b9a65812c9f653d693941b3317fe2f98a028 /scm/sacc/commit/6272b9a65812c9f653d693941b3317fe2f98a028.gph bitreich.org 70 1parent 89d3a0bd06d2345ffa98675e356a17be24a61210 /scm/sacc/commit/89d3a0bd06d2345ffa98675e356a17be24a61210.gph bitreich.org 70 hAuthor: Quentin Rameau URL:mailto:quinq@fifth.space bitreich.org 70 iDate: Mon, 8 Nov 2021 23:44:06 +0100 Err bitreich.org 70 i Err bitreich.org 70 iDo not null-terminate strings printed by snprintf Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M ui_ti.c | 42 ++++++++++++++----------------- Err bitreich.org 70 i M ui_txt.c | 36 +++++++++++-------------------- Err bitreich.org 70 i Err bitreich.org 70 i2 files changed, 32 insertions(+), 46 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/ui_ti.c b/ui_ti.c /scm/sacc/file/ui_ti.c.gph bitreich.org 70 i@@ -75,9 +75,9 @@ uiprompt(char *fmt, ...) Err bitreich.org 70 i putp(tparm(enter_standout_mode, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i Err bitreich.org 70 i va_start(ap, fmt); Err bitreich.org 70 i- if (vsnprintf(bufout, sizeof(bufout), fmt, ap) >= sizeof(bufout)) Err bitreich.org 70 i- bufout[sizeof(bufout)-1] = '\0'; Err bitreich.org 70 i+ vsnprintf(bufout, sizeof(bufout), fmt, ap); Err bitreich.org 70 i va_end(ap); Err bitreich.org 70 i+ Err bitreich.org 70 i n = mbsprint(bufout, columns); Err bitreich.org 70 i Err bitreich.org 70 i putp(tparm(exit_standout_mode, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i@@ -110,9 +110,9 @@ uiprompt(char *fmt, ...) Err bitreich.org 70 i static void Err bitreich.org 70 i printitem(Item *item) Err bitreich.org 70 i { Err bitreich.org 70 i- if (snprintf(bufout, sizeof(bufout), "%s %s", typedisplay(item->type), Err bitreich.org 70 i- item->username) >= sizeof(bufout)) Err bitreich.org 70 i- bufout[sizeof(bufout)-1] = '\0'; Err bitreich.org 70 i+ snprintf(bufout, sizeof(bufout), "%s %s", Err bitreich.org 70 i+ typedisplay(item->type), item->username); Err bitreich.org 70 i+ Err bitreich.org 70 i mbsprint(bufout, columns); Err bitreich.org 70 i putchar('\r'); Err bitreich.org 70 i } Err bitreich.org 70 i@@ -163,13 +163,12 @@ uistatus(char *fmt, ...) Err bitreich.org 70 i va_end(ap); Err bitreich.org 70 i Err bitreich.org 70 i if (n < sizeof(bufout)-1) { Err bitreich.org 70 i- n += snprintf(bufout + n, sizeof(bufout) - n, Err bitreich.org 70 i- " [Press a key to continue \xe2\x98\x83]"); Err bitreich.org 70 i+ snprintf(bufout+n, sizeof(bufout)-n, Err bitreich.org 70 i+ " [Press a key to continue \xe2\x98\x83]"); Err bitreich.org 70 i } Err bitreich.org 70 i- if (n >= sizeof(bufout)) Err bitreich.org 70 i- bufout[sizeof(bufout)-1] = '\0'; Err bitreich.org 70 i Err bitreich.org 70 i- n = mbsprint(bufout, columns); Err bitreich.org 70 i+ mbsprint(bufout, columns); Err bitreich.org 70 i+ Err bitreich.org 70 i putp(tparm(exit_standout_mode, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i putp(tparm(clr_eol, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i Err bitreich.org 70 i@@ -184,22 +183,23 @@ displaystatus(Item *item) Err bitreich.org 70 i { Err bitreich.org 70 i Dir *dir = item->dat; Err bitreich.org 70 i char *fmt; Err bitreich.org 70 i- size_t n, nitems = dir ? dir->nitems : 0; Err bitreich.org 70 i+ size_t nitems = dir ? dir->nitems : 0; Err bitreich.org 70 i unsigned long long printoff = dir ? dir->printoff : 0; Err bitreich.org 70 i Err bitreich.org 70 i putp(tparm(save_cursor, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i Err bitreich.org 70 i putp(tparm(cursor_address, lines-1, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i putp(tparm(enter_standout_mode, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i+ Err bitreich.org 70 i fmt = (strcmp(item->port, "70") && strcmp(item->port, "gopher")) ? Err bitreich.org 70 i "%1$3lld%%| %2$s:%5$s/%3$c%4$s" : "%3lld%%| %s/%c%s"; Err bitreich.org 70 i- if (snprintf(bufout, sizeof(bufout), fmt, Err bitreich.org 70 i- (printoff + lines-1 >= nitems) ? 100 : Err bitreich.org 70 i- (printoff + lines-1) * 100 / nitems, Err bitreich.org 70 i- item->host, item->type, item->selector, item->port) Err bitreich.org 70 i- >= sizeof(bufout)) Err bitreich.org 70 i- bufout[sizeof(bufout)-1] = '\0'; Err bitreich.org 70 i- n = mbsprint(bufout, columns); Err bitreich.org 70 i+ snprintf(bufout, sizeof(bufout), fmt, Err bitreich.org 70 i+ (printoff + lines-1 >= nitems) ? 100 : Err bitreich.org 70 i+ (printoff + lines-1) * 100 / nitems, Err bitreich.org 70 i+ item->host, item->type, item->selector, item->port); Err bitreich.org 70 i+ Err bitreich.org 70 i+ mbsprint(bufout, columns); Err bitreich.org 70 i+ Err bitreich.org 70 i putp(tparm(exit_standout_mode, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i putp(tparm(clr_eol, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i Err bitreich.org 70 i@@ -210,8 +210,6 @@ displaystatus(Item *item) Err bitreich.org 70 i static void Err bitreich.org 70 i displayuri(Item *item) Err bitreich.org 70 i { Err bitreich.org 70 i- size_t n; Err bitreich.org 70 i- Err bitreich.org 70 i if (item->type == 0 || item->type == 'i') Err bitreich.org 70 i return; Err bitreich.org 70 i Err bitreich.org 70 i@@ -222,10 +220,8 @@ displayuri(Item *item) Err bitreich.org 70 i Err bitreich.org 70 i itemuri(item, bufout, sizeof(bufout)); Err bitreich.org 70 i Err bitreich.org 70 i- if (n >= sizeof(bufout)) Err bitreich.org 70 i- bufout[sizeof(bufout)-1] = '\0'; Err bitreich.org 70 i+ mbsprint(bufout, columns); Err bitreich.org 70 i Err bitreich.org 70 i- n = mbsprint(bufout, columns); Err bitreich.org 70 i putp(tparm(exit_standout_mode, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i putp(tparm(clr_eol, 0, 0, 0, 0, 0, 0, 0, 0, 0)); Err bitreich.org 70 i Err bitreich.org 70 1diff --git a/ui_txt.c b/ui_txt.c /scm/sacc/file/ui_txt.c.gph bitreich.org 70 i@@ -78,11 +78,9 @@ uistatus(char *fmt, ...) Err bitreich.org 70 i va_end(arg); Err bitreich.org 70 i Err bitreich.org 70 i if (n < sizeof(bufout)-1) { Err bitreich.org 70 i- n += snprintf(bufout + n, sizeof(bufout) - n, Err bitreich.org 70 i- " [Press Enter to continue \xe2\x98\x83]"); Err bitreich.org 70 i+ snprintf(bufout+n, sizeof(bufout)-n, Err bitreich.org 70 i+ " [Press Enter to continue \xe2\x98\x83]"); Err bitreich.org 70 i } Err bitreich.org 70 i- if (n >= sizeof(bufout)) Err bitreich.org 70 i- bufout[sizeof(bufout)-1] = '\0'; Err bitreich.org 70 i Err bitreich.org 70 i mbsprint(bufout, columns); Err bitreich.org 70 i fflush(stdout); Err bitreich.org 70 i@@ -101,12 +99,11 @@ printstatus(Item *item, char c) Err bitreich.org 70 i fmt = (strcmp(item->port, "70") && strcmp(item->port, "gopher")) ? Err bitreich.org 70 i "%1$3lld%%%*2$3$c %4$s:%8$s/%5$c%6$s [%7$c]: " : Err bitreich.org 70 i "%3lld%% %s/%c%s [%c]: "; Err bitreich.org 70 i- if (snprintf(bufout, sizeof(bufout), fmt, Err bitreich.org 70 i- (printoff + lines-1 >= nitems) ? 100 : Err bitreich.org 70 i- (printoff + lines) * 100 / nitems, Err bitreich.org 70 i- item->host, item->type, item->selector, c, item->port) Err bitreich.org 70 i- >= sizeof(bufout)) Err bitreich.org 70 i- bufout[sizeof(bufout)-1] = '\0'; Err bitreich.org 70 i+ snprintf(bufout, sizeof(bufout), fmt, Err bitreich.org 70 i+ (printoff + lines-1 >= nitems) ? 100 : Err bitreich.org 70 i+ (printoff + lines) * 100 / nitems, Err bitreich.org 70 i+ item->host, item->type, item->selector, c, item->port); Err bitreich.org 70 i+ Err bitreich.org 70 i mbsprint(bufout, columns); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -119,8 +116,7 @@ uiprompt(char *fmt, ...) Err bitreich.org 70 i ssize_t r; Err bitreich.org 70 i Err bitreich.org 70 i va_start(ap, fmt); Err bitreich.org 70 i- if (vsnprintf(bufout, sizeof(bufout), fmt, ap) >= sizeof(bufout)) Err bitreich.org 70 i- bufout[sizeof(bufout)-1] = '\0'; Err bitreich.org 70 i+ vsnprintf(bufout, sizeof(bufout), fmt, ap); Err bitreich.org 70 i va_end(ap); Err bitreich.org 70 i Err bitreich.org 70 i mbsprint(bufout, columns); Err bitreich.org 70 i@@ -158,11 +154,10 @@ uidisplay(Item *entry) Err bitreich.org 70 i nd = ndigits(nitems); Err bitreich.org 70 i Err bitreich.org 70 i for (i = dir->printoff; i < nitems && i < nlines; ++i) { Err bitreich.org 70 i- if (snprintf(bufout, sizeof(bufout), "%*zu %s %s", Err bitreich.org 70 i- nd, i+1, typedisplay(items[i].type), Err bitreich.org 70 i- items[i].username) Err bitreich.org 70 i- >= sizeof(bufout)) Err bitreich.org 70 i- bufout[sizeof(bufout)-1] = '\0'; Err bitreich.org 70 i+ snprintf(bufout, sizeof(bufout), "%*zu %s %s", Err bitreich.org 70 i+ nd, i+1,typedisplay(items[i].type), Err bitreich.org 70 i+ items[i].username); Err bitreich.org 70 i+ Err bitreich.org 70 i mbsprint(bufout, columns); Err bitreich.org 70 i putchar('\n'); Err bitreich.org 70 i } Err bitreich.org 70 i@@ -173,15 +168,10 @@ uidisplay(Item *entry) Err bitreich.org 70 i void Err bitreich.org 70 i printuri(Item *item, size_t i) Err bitreich.org 70 i { Err bitreich.org 70 i- int n; Err bitreich.org 70 i- Err bitreich.org 70 i if (!item || item->type == 0 || item->type == 'i') Err bitreich.org 70 i return; Err bitreich.org 70 i Err bitreich.org 70 i- n = itemuri(item, bufout, sizeof(bufout)); Err bitreich.org 70 i- Err bitreich.org 70 i- if (n >= sizeof(bufout)) Err bitreich.org 70 i- bufout[sizeof(bufout)-1] = '\0'; Err bitreich.org 70 i+ itemuri(item, bufout, sizeof(bufout)); Err bitreich.org 70 i Err bitreich.org 70 i mbsprint(bufout, columns); Err bitreich.org 70 i putchar('\n'); Err bitreich.org 70 .