authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-02-22 16:55:26-08:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2025-02-22 17:09:20-08:00
logc0c911bfa78ea2968cd110ad64a4ba0d70ca93e5
treeb2bb3bc307ec55ab0f12c5633b9263574a881031
parented55b2ef1723c29edf53ba332e7cb18c1c738bff

zig fmt: fix invalid alignment on frees


2 files changed, 13 insertions(+), 12 deletions(-)

lib/std/zig.zig+12-12
......@@ -535,16 +535,12 @@ test isUnderscore {
535535 try std.testing.expect(!isUnderscore("\\x5f"));
536536}
537537
538pub fn readSourceFileToEndAlloc(
539 allocator: Allocator,
540 input: std.fs.File,
541 size_hint: ?usize,
542) ![:0]u8 {
538pub fn readSourceFileToEndAlloc(gpa: Allocator, input: std.fs.File, size_hint: ?usize) ![:0]u8 {
543539 const source_code = input.readToEndAllocOptions(
544 allocator,
540 gpa,
545541 max_src_size,
546542 size_hint,
547 @alignOf(u16),
543 @alignOf(u8),
548544 0,
549545 ) catch |err| switch (err) {
550546 error.ConnectionResetByPeer => unreachable,
......@@ -552,7 +548,7 @@ pub fn readSourceFileToEndAlloc(
552548 error.NotOpenForReading => unreachable,
553549 else => |e| return e,
554550 };
555 errdefer allocator.free(source_code);
551 errdefer gpa.free(source_code);
556552
557553 // Detect unsupported file types with their Byte Order Mark
558554 const unsupported_boms = [_][]const u8{
......@@ -568,15 +564,19 @@ pub fn readSourceFileToEndAlloc(
568564
569565 // If the file starts with a UTF-16 little endian BOM, translate it to UTF-8
570566 if (std.mem.startsWith(u8, source_code, "\xff\xfe")) {
571 const source_code_utf16_le = std.mem.bytesAsSlice(u16, source_code);
572 const source_code_utf8 = std.unicode.utf16LeToUtf8AllocZ(allocator, source_code_utf16_le) catch |err| switch (err) {
567 if (source_code.len % 2 != 0) return error.InvalidEncoding;
568 // TODO: after wrangle-writer-buffering branch is merged,
569 // avoid this unnecessary allocation
570 const aligned_copy = try gpa.alloc(u16, source_code.len / 2);
571 defer gpa.free(aligned_copy);
572 @memcpy(std.mem.sliceAsBytes(aligned_copy), source_code);
573 const source_code_utf8 = std.unicode.utf16LeToUtf8AllocZ(gpa, aligned_copy) catch |err| switch (err) {
573574 error.DanglingSurrogateHalf => error.UnsupportedEncoding,
574575 error.ExpectedSecondSurrogateHalf => error.UnsupportedEncoding,
575576 error.UnexpectedSecondSurrogateHalf => error.UnsupportedEncoding,
576577 else => |e| return e,
577578 };
578
579 allocator.free(source_code);
579 gpa.free(source_code);
580580 return source_code_utf8;
581581 }
582582
src/fmt.zig+1
......@@ -214,6 +214,7 @@ const FmtError = error{
214214 Unseekable,
215215 NotOpenForWriting,
216216 UnsupportedEncoding,
217 InvalidEncoding,
217218 ConnectionResetByPeer,
218219 SocketNotConnected,
219220 LockViolation,