mirror of
git://git.psyc.eu/libpsyc
synced 2024-08-15 03:19:02 +00:00
fixed bug in PacketId::from_bytes
This commit is contained in:
parent
5fb7482565
commit
2ca0949327
2 changed files with 19 additions and 6 deletions
|
@ -31,16 +31,16 @@ pub struct PacketId<'a> {
|
||||||
|
|
||||||
impl<'a> PacketId<'a> {
|
impl<'a> PacketId<'a> {
|
||||||
pub fn from_bytes(bytes: &'a [u8]) -> Option<Self> {
|
pub fn from_bytes(bytes: &'a [u8]) -> Option<Self> {
|
||||||
let mut parsed: Vec<Option<&'a [u8]>> = vec![None; 5];
|
let mut parsed: Vec<Option<&'a [u8]>> = Vec::with_capacity(5);
|
||||||
let mut parser = PsycListParser::new();
|
let mut parser = PsycListParser::new();
|
||||||
let mut parsing_error = false;
|
for _i in 0..5 {
|
||||||
for slice in &mut parsed {
|
|
||||||
match parser.parse(bytes) {
|
match parser.parse(bytes) {
|
||||||
Ok(PsycListParserResult::ListElement {value: v}) => *slice = Some(v),
|
Ok(PsycListParserResult::ListElement {value: b""}) => parsed.push(None),
|
||||||
_ => parsing_error = true
|
Ok(PsycListParserResult::ListElement {value: v}) => parsed.push(Some(v)),
|
||||||
|
_ => break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if parsing_error {
|
if parsed.len() < 5 {
|
||||||
None
|
None
|
||||||
} else {
|
} else {
|
||||||
let result = PacketId {
|
let result = PacketId {
|
||||||
|
|
|
@ -40,6 +40,19 @@ fn test_empty() {
|
||||||
assert_eq!(parser.parse(&test_data).unwrap(), PsycListParserResult::Complete);
|
assert_eq!(parser.parse(&test_data).unwrap(), PsycListParserResult::Complete);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_empty_element() {
|
||||||
|
let test_data = "|".to_string().into_bytes();
|
||||||
|
|
||||||
|
let mut parser = PsycListParser::new();
|
||||||
|
|
||||||
|
let expected = PsycListParserResult::ListElement {
|
||||||
|
value: b""
|
||||||
|
};
|
||||||
|
|
||||||
|
assert_eq!(parser.parse(&test_data).unwrap(), expected);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_incomplete() {
|
fn test_incomplete() {
|
||||||
let test_data1 = "|8 element".to_string().into_bytes();
|
let test_data1 = "|8 element".to_string().into_bytes();
|
||||||
|
|
Loading…
Reference in a new issue