NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: bin/60154: sha256 and related checksum utilities fail to escape filenames printed to a terminal
The following reply was made to PR bin/60154; it has been noted by GNATS.
From: Martin Husemann <martin%duskware.de@localhost>
To: gnats-bugs%netbsd.org@localhost
Cc:
Subject: Re: bin/60154: sha256 and related checksum utilities fail to escape
filenames printed to a terminal
Date: Wed, 1 Apr 2026 12:41:09 +0200
Here is a suggested patch that seems to fix it for me.
Output from the "mal" file in this PR looks now like this:
(SHA256) \^[\[1\;1H\^[\[0J\^[\[30m: FAILED
Martin
Index: cksum.c
===================================================================
RCS file: /cvsroot/src/usr.bin/cksum/cksum.c,v
retrieving revision 1.52
diff -u -p -r1.52 cksum.c
--- cksum.c 25 Jun 2022 02:22:42 -0000 1.52
+++ cksum.c 1 Apr 2026 10:38:14 -0000
@@ -101,6 +101,7 @@ __RCSID("$NetBSD: cksum.c,v 1.52 2022/06
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
+#include <vis.h>
#include "extern.h"
@@ -289,6 +290,7 @@ main(int argc, char **argv)
char *s, *p_filename, *p_cksum;
int l_filename, l_cksum;
char filename[BUFSIZ];
+ char safe_filename[BUFSIZ*4+1];
char cksum[BUFSIZ];
int ok,cnt,badcnt;
@@ -420,6 +422,15 @@ main(int argc, char **argv)
strlcpy(filename, p_filename, l_filename+1);
strlcpy(cksum, p_cksum, l_cksum+1);
+ if (strnvis(safe_filename, sizeof(safe_filename),
+ filename, VIS_META|VIS_CSTYLE) == -1) {
+ if (check_warn)
+ warnx("strnvis failed, can not print "
+ "filename");
+ rval = 1;
+ continue;
+ }
+
if (hash) {
char *h;
@@ -432,7 +443,7 @@ main(int argc, char **argv)
} else {
if ((fd = open(filename, O_RDONLY, 0)) < 0) {
if (check_warn)
- warn("%s", filename);
+ warn("%s", safe_filename);
rval = 1;
ok = 0;
} else {
@@ -455,7 +466,7 @@ main(int argc, char **argv)
if (! ok) {
if (hash)
printf("(%s) ", hash->hashname);
- printf("%s: FAILED\n", filename);
+ printf("%s: FAILED\n", safe_filename);
badcnt++;
}
cnt++;
Home |
Main Index |
Thread Index |
Old Index