From d6728bca9594cc45703c299dca5db66d917c0388 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torbj=C3=B6rn=20L=C3=B6nnemark?= Date: Sat, 15 Oct 2022 21:00:17 +0200 Subject: [PATCH] Fix incorrect format string causing invalid export files Zig requires alignment to be specified when specifying a fill character, as otherwise digits specified after ':' are interpreted as part of the field width. The missing alignment specifier caused character codes < 0x10 to be serialized incorrectly, producing an export file ncdu could not import. For example, a character with code 1 would be serialized as '\u00 1' instead of '\u0001'. A directory of test files can be generated using: mkdir test_files; i=1; while [ $i -le 255 ]; do c="$(printf "$(printf "\\\\x%02xZ" "$i")")"; c="${c%Z}"; touch "test_files/$c"; i=$((i+1)); done --- src/scan.zig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scan.zig b/src/scan.zig index 68b74c8..b6a411b 100644 --- a/src/scan.zig +++ b/src/scan.zig @@ -96,7 +96,7 @@ fn writeJsonString(wr: anytype, s: []const u8) !void { 0xC => try wr.writeAll("\\f"), '\\' => try wr.writeAll("\\\\"), '"' => try wr.writeAll("\\\""), - 0...7, 0xB, 0xE...0x1F, 127 => try wr.print("\\u00{x:02}", .{ch}), + 0...7, 0xB, 0xE...0x1F, 127 => try wr.print("\\u00{x:0>2}", .{ch}), else => try wr.writeByte(ch) } }