| ... | @@ -636,6 +636,10 @@ fn parseFilename(allocator: Allocator, str: []const u8) error{ OutOfMemory, Inva | ... | @@ -636,6 +636,10 @@ fn parseFilename(allocator: Allocator, str: []const u8) error{ OutOfMemory, Inva |
| 636 | if (escape_val != 0) escape_val = std.math.mul(u8, @as(u8, @intCast(escape_val)), 16) catch return error.InvalidString; | 636 | if (escape_val != 0) escape_val = std.math.mul(u8, @as(u8, @intCast(escape_val)), 16) catch return error.InvalidString; |
| 637 | escape_val = std.math.add(u8, @as(u8, @intCast(escape_val)), digit) catch return error.InvalidString; | 637 | escape_val = std.math.add(u8, @as(u8, @intCast(escape_val)), digit) catch return error.InvalidString; |
| 638 | escape_len += 1; | 638 | escape_len += 1; |
| | 639 | if (escape_len == 2) { |
| | 640 | filename.appendAssumeCapacity(@intCast(escape_val)); |
| | 641 | state = .string; |
| | 642 | } |
| 639 | }, | 643 | }, |
| 640 | else => { | 644 | else => { |
| 641 | if (escape_len == 0) return error.InvalidString; | 645 | if (escape_len == 0) return error.InvalidString; |
| ... | @@ -706,6 +710,7 @@ fn testParseFilename(expected: []const u8, input: []const u8) !void { | ... | @@ -706,6 +710,7 @@ fn testParseFilename(expected: []const u8, input: []const u8) !void { |
| 706 | test parseFilename { | 710 | test parseFilename { |
| 707 | try testParseFilename("'\"?\\\t\n\r\x11", "\\'\\\"\\?\\\\\\t\\n\\r\\x11"); | 711 | try testParseFilename("'\"?\\\t\n\r\x11", "\\'\\\"\\?\\\\\\t\\n\\r\\x11"); |
| 708 | try testParseFilename("\xABz\x53", "\\xABz\\123"); | 712 | try testParseFilename("\xABz\x53", "\\xABz\\123"); |
| | 713 | try testParseFilename("\xABCDEF", "\\xABCDEF"); |
| 709 | try testParseFilename("⚡⚡", "\\u26A1\\U000026A1"); | 714 | try testParseFilename("⚡⚡", "\\u26A1\\U000026A1"); |
| 710 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\"")); | 715 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\"")); |
| 711 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\")); | 716 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\")); |
| ... | @@ -713,7 +718,6 @@ test parseFilename { | ... | @@ -713,7 +718,6 @@ test parseFilename { |
| 713 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\U")); | 718 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\U")); |
| 714 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\x")); | 719 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\x")); |
| 715 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\xZZ")); | 720 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\xZZ")); |
| 716 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\xABCDEF")); | | |
| 717 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\777")); | 721 | try std.testing.expectError(error.InvalidString, parseFilename(std.testing.allocator, "\\777")); |
| 718 | } | 722 | } |
| 719 | | 723 | |