aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/binary/reader.rs14
-rw-r--r--tests/data/utf16_bplist.plistbin3301 -> 1378 bytes
2 files changed, 10 insertions, 4 deletions
diff --git a/src/binary/reader.rs b/src/binary/reader.rs
index ffb0caf..5b26777 100644
--- a/src/binary/reader.rs
+++ b/src/binary/reader.rs
@@ -216,8 +216,9 @@ impl<R: Read + Seek> EventReader<R> {
}
(0x6, n) => {
// UTF-16 string
- // n is the length of code units (16 bits), not bytes.
- let len = try!(self.read_object_len(n * 2));
+ // n is the length of 16 bit code units
+ // len is the number of bytes
+ let len = try!(self.read_object_len(n)) * 2;
let raw = try!(self.read_data(len));
let mut cursor = Cursor::new(raw);
@@ -341,7 +342,12 @@ mod tests {
let reader = File::open(&Path::new("./tests/data/utf16_bplist.plist")).unwrap();
let streaming_parser = EventReader::new(reader);
- let events: Vec<PlistEvent> = streaming_parser.map(|e| e.unwrap()).collect();
- assert_eq!(events[38], StringValue("\u{2605} or better".to_owned()));
+ let mut events: Vec<PlistEvent> = streaming_parser.map(|e| e.unwrap()).collect();
+
+ assert_eq!(events[2], StringValue("\u{2605} or better".to_owned()));
+
+ let poem = if let StringValue(ref mut poem) = events[4] { poem } else { panic!("not a string") };
+ assert_eq!(poem.len(), 643);
+ assert_eq!(poem.pop().unwrap(), '\u{2605}');
}
}
diff --git a/tests/data/utf16_bplist.plist b/tests/data/utf16_bplist.plist
index b1a6856..a50477c 100644
--- a/tests/data/utf16_bplist.plist
+++ b/tests/data/utf16_bplist.plist
Binary files differ