Commit Diff


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];