From f81c7f10f68097e1dd3a7c65e82af63d65d678f9 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Tue, 20 Jun 2023 21:17:32 -0700 Subject: Fix crash with .env files that are exactly 159 bytes long (#3369) * Fix crash with .env files that are exactly 158 bytes and a newline character * Update env_loader.zig --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> --- src/env_loader.zig | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/env_loader.zig b/src/env_loader.zig index 7d506a04e..8a3838101 100644 --- a/src/env_loader.zig +++ b/src/env_loader.zig @@ -884,18 +884,21 @@ pub const Loader = struct { defer file.close(); const stat = try file.stat(); - if (stat.size == 0) { + const end = stat.size; + + if (end == 0) { @field(this, base) = logger.Source.initPathString(base, ""); return; } - var buf = try this.allocator.allocSentinel(u8, stat.size, 0); + var buf = try this.allocator.alloc(u8, end + 1); errdefer this.allocator.free(buf); - var contents = try file.readAll(buf); + const amount_read = try file.readAll(buf[0..end]); + + // The null byte here is mostly for debugging purposes. + buf[end] = 0; - // always sentinel - buf.ptr[contents + 1] = 0; - const source = logger.Source.initPathString(base, buf.ptr[0..contents :0]); + const source = logger.Source.initPathString(base, buf[0..amount_read]); Parser.parse( &source, -- cgit v1.2.3