brainfuck interpreter
brainfuck cli rust
5

Configure Feed

Select the types of activity you want to include in your feed.

fix: read_ascii now consumes excess characters to prevent input leakage

- updated repeat test to account for new behavior

digi.rip (Jun 2, 2026, 11:21 PM EDT) 2b255662 ad7d3efc

+14 -2
+14 -2
src/evaluator.rs
··· 176 176 Ok(()) 177 177 } 178 178 179 - fn read_ascii<R: std::io::Read>(&mut self, input: &mut R) -> Result<(), RuntimeError> { 179 + fn read_ascii<R: std::io::BufRead>(&mut self, input: &mut R) -> Result<(), RuntimeError> { 180 180 let mut buffer = [0u8; 1]; 181 181 182 182 input 183 183 .read_exact(&mut buffer) 184 184 .map_err(RuntimeError::IoError)?; 185 185 self.tape[self.data_pointer] = buffer[0]; 186 + 187 + loop { 188 + match input.fill_buf() { 189 + Err(e) => return Err(RuntimeError::IoError(e)), 190 + Ok(r) if r.is_empty() => break, 191 + Ok(r) if r[0].is_ascii_alphanumeric() => input.consume(1), 192 + Ok(_) => { 193 + input.consume(1); 194 + break; 195 + } 196 + } 197 + } 186 198 187 199 Ok(()) 188 200 } ··· 485 497 let map = parse_brackets(&tokens).unwrap(); 486 498 let mut machine = VM::builder().build(); 487 499 let mut capture_buffer: Vec<u8> = Vec::new(); 488 - let fake_input = std::io::Cursor::new(b"AB"); 500 + let fake_input = std::io::Cursor::new(b"A\nB"); 489 501 let expected = b"A".repeat(66); 490 502 491 503 machine