| ... | @@ -17,7 +17,6 @@ const State = union(enum) { | ... | @@ -17,7 +17,6 @@ const State = union(enum) { |
| 17 | new_frame, | 17 | new_frame, |
| 18 | in_frame: InFrame, | 18 | in_frame: InFrame, |
| 19 | skipping_frame: usize, | 19 | skipping_frame: usize, |
| 20 | end, | | |
| 21 | | 20 | |
| 22 | const InFrame = struct { | 21 | const InFrame = struct { |
| 23 | frame: Frame, | 22 | frame: Frame, |
| ... | @@ -158,7 +157,18 @@ fn stream(r: *Reader, w: *Writer, limit: Limit) Reader.StreamError!usize { | ... | @@ -158,7 +157,18 @@ fn stream(r: *Reader, w: *Writer, limit: Limit) Reader.StreamError!usize { |
| 158 | | 157 | |
| 159 | switch (d.state) { | 158 | switch (d.state) { |
| 160 | .new_frame => { | 159 | .new_frame => { |
| 161 | // Allow error.EndOfStream only on the frame magic. | 160 | // Only return EndOfStream when there are exactly 0 bytes remaining on the |
| | 161 | // frame magic. Any partial magic bytes should be considered a failure. |
| | 162 | in.fill(@sizeOf(Frame.Magic)) catch |err| switch (err) { |
| | 163 | error.EndOfStream => { |
| | 164 | if (in.bufferedLen() != 0) { |
| | 165 | d.err = error.BadMagic; |
| | 166 | return error.ReadFailed; |
| | 167 | } |
| | 168 | return err; |
| | 169 | }, |
| | 170 | else => |e| return e, |
| | 171 | }; |
| 162 | const magic = try in.takeEnumNonexhaustive(Frame.Magic, .little); | 172 | const magic = try in.takeEnumNonexhaustive(Frame.Magic, .little); |
| 163 | initFrame(d, w.buffer.len, magic) catch |err| { | 173 | initFrame(d, w.buffer.len, magic) catch |err| { |
| 164 | d.err = err; | 174 | d.err = err; |
| ... | @@ -192,7 +202,6 @@ fn stream(r: *Reader, w: *Writer, limit: Limit) Reader.StreamError!usize { | ... | @@ -192,7 +202,6 @@ fn stream(r: *Reader, w: *Writer, limit: Limit) Reader.StreamError!usize { |
| 192 | if (remaining.* == 0) d.state = .new_frame; | 202 | if (remaining.* == 0) d.state = .new_frame; |
| 193 | return 0; | 203 | return 0; |
| 194 | }, | 204 | }, |
| 195 | .end => return error.EndOfStream, | | |
| 196 | } | 205 | } |
| 197 | } | 206 | } |
| 198 | | 207 | |