linux-ext4.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eric Biggers <ebiggers@kernel.org>
To: linux-ext4@vger.kernel.org
Subject: [PATCH] debugfs: avoid ambiguity when printing filenames
Date: Mon, 22 Apr 2019 13:27:15 -0700	[thread overview]
Message-ID: <20190422202715.167750-1-ebiggers@kernel.org> (raw)

From: Eric Biggers <ebiggers@google.com>

The way debugfs escapes filenames is ambiguous because a sequence like
M-A can mean either the byte 'A' + 128 == 0xc1 or the three bytes
{'M', '-', 'A'}.  Similarly, ^A can mean either the byte
'A' ^ 0x40 == 0x01 or the two bytes {'^', 'A'}.

Fix this and simplify the code by switching to a simpler strategy where
all bytes < 32, all bytes >= 127, and backslash are encoded with C-style
hex escape sequences.  E.g., the byte 0xc1 will now be encoded as \xc1
rather than M-A as it was before, while a filename consisting of the
three bytes {'M', '-', 'A'} will continue to be shown as M-A.

I want to fix this mainly because I want to use debugfs to retrieve raw
encrypted filenames for ciphertext verification tests.  But this doesn't
work if the returned filenames are ambiguous.

Fixes: 68a1de3df340 ("debugfs: pretty print encrypted filenames in the ls command")
Signed-off-by: Eric Biggers <ebiggers@google.com>
---
 debugfs/ls.c | 16 +++++-----------
 1 file changed, 5 insertions(+), 11 deletions(-)

diff --git a/debugfs/ls.c b/debugfs/ls.c
index 41af15d2..4f63bd3f 100644
--- a/debugfs/ls.c
+++ b/debugfs/ls.c
@@ -62,21 +62,15 @@ static int print_filename(FILE *f, struct ext2_dir_entry *dirent, int options)
 	}
 	while (len--) {
 		ch = *cp++;
-		if (ch > 128) {
+		if (ch < 32 || ch >= 127 || ch == '\\') {
 			if (f)
-				fputs("M-", f);
-			ch -= 128;
-			retlen += 2;
-		}
-		if ((ch < 32) || (ch == 0x7f)) {
+				fprintf(f, "\\x%02x", ch);
+			retlen += 4;
+		} else {
 			if (f)
-				fputc('^', f);
-			ch ^= 0x40; /* ^@, ^A, ^B; ^? for DEL */
+				fputc(ch, f);
 			retlen++;
 		}
-		if (f)
-			fputc(ch, f);
-		retlen++;
 	}
 	return retlen;
 }
-- 
2.21.0.593.g511ec345e18-goog


             reply	other threads:[~2019-04-22 20:29 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-22 20:27 Eric Biggers [this message]
2019-04-29  0:11 ` [PATCH] debugfs: avoid ambiguity when printing filenames Theodore Ts'o

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190422202715.167750-1-ebiggers@kernel.org \
    --to=ebiggers@kernel.org \
    --cc=linux-ext4@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).