* [PATCH] debugfs: avoid ambiguity when printing filenames
@ 2019-04-22 20:27 Eric Biggers
2019-04-29 0:11 ` Theodore Ts'o
0 siblings, 1 reply; 2+ messages in thread
From: Eric Biggers @ 2019-04-22 20:27 UTC (permalink / raw)
To: linux-ext4
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
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] debugfs: avoid ambiguity when printing filenames
2019-04-22 20:27 [PATCH] debugfs: avoid ambiguity when printing filenames Eric Biggers
@ 2019-04-29 0:11 ` Theodore Ts'o
0 siblings, 0 replies; 2+ messages in thread
From: Theodore Ts'o @ 2019-04-29 0:11 UTC (permalink / raw)
To: Eric Biggers; +Cc: linux-ext4
On Mon, Apr 22, 2019 at 01:27:15PM -0700, Eric Biggers wrote:
> 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>
Thanks, applied.
- Ted
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-04-29 0:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-04-22 20:27 [PATCH] debugfs: avoid ambiguity when printing filenames Eric Biggers
2019-04-29 0:11 ` Theodore Ts'o
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).