commit 737207265c3f886fe87a06552f89cc7bdc1654db from: mtmn date: Tue Jun 9 23:40:09 2026 UTC fix: consume newline on reading memcached response commit - 42bf945818946a95a481c92fb101235a2945396a commit + 737207265c3f886fe87a06552f89cc7bdc1654db blob - fbdd49d0015baeb3e9eccea8e7c4ee40535834ea blob + c0bf997c71213570fffb7bde2052c56fab5fbbca --- src/memcached.zig +++ src/memcached.zig @@ -90,12 +90,14 @@ pub const Memcached = struct { } fn readLine(self: *Memcached, buf: []u8) !?[]const u8 { - const line = self.r().takeDelimiterExclusive('\n') catch |err| switch (err) { + // Inclusive so the '\n' is consumed from the stream; exclusive would + // leave it buffered and desync the following `readExact`. + const line = self.r().takeDelimiterInclusive('\n') catch |err| switch (err) { error.EndOfStream => return null, error.StreamTooLong => return error.LineTooLong, else => |e| return e, }; - const trimmed = std.mem.trim(u8, line, "\r"); + const trimmed = std.mem.trim(u8, line, "\r\n"); if (buf.len < trimmed.len) return error.BufferTooSmall; @memcpy(buf[0..trimmed.len], trimmed); return buf[0..trimmed.len];