Skip to content

Commit 066de4a

Browse files
authored
csv-core: fix Reader::reset not resetting output_pos
FIxes BurntSushi#382, PR BurntSushi#383
1 parent 95a5e1a commit 066de4a

File tree

1 file changed

+24
-0
lines changed

1 file changed

+24
-0
lines changed

csv-core/src/reader.rs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,7 @@ impl Reader {
487487
self.nfa_state = NfaState::StartRecord;
488488
self.line = 1;
489489
self.has_read = false;
490+
self.output_pos = 0;
490491
}
491492

492493
/// Return the current line number as measured by the number of occurrences
@@ -2002,4 +2003,27 @@ mod tests {
20022003

20032004
assert_read_record!(rdr, &inp, out, ends, 0, 0, 0, End);
20042005
}
2006+
2007+
#[test]
2008+
fn reset_input_partial() {
2009+
use crate::ReadRecordResult::*;
2010+
2011+
let inp = b("foo,bar\nbaz");
2012+
let out = &mut [0; 1024];
2013+
let ends = &mut [0; 10];
2014+
let mut rdr = Reader::new();
2015+
2016+
assert_read_record!(rdr, &inp, out, ends, 8, 6, 2, Record);
2017+
2018+
// Try to read incomplete record.
2019+
let (result, _, _, _) = rdr.read_record(&inp[8..], out, ends);
2020+
assert_eq!(result, InputEmpty);
2021+
2022+
rdr.reset();
2023+
2024+
let inp = b("baz,raz\n");
2025+
let (result, _, _, _) = rdr.read_record(inp, out, ends);
2026+
assert_eq!(result, Record);
2027+
assert_eq!(ends[0], 3);
2028+
}
20052029
}

0 commit comments

Comments
 (0)