diff options
| author | Hubert Figuière | 2015-12-25 00:07:50 -0500 |
|---|---|---|
| committer | Hubert Figuière | 2015-12-25 00:07:50 -0500 |
| commit | e9ed32888a4d5493521e5d4d3c0abe437304a972 (patch) | |
| tree | 826a2c420c8387a1d978c8cd7f742a693e75a048 /src/binary/reader.rs | |
| parent | d28b8ea296cfbc36e0fa29552f4ec3ae70b314ab (diff) | |
| download | rust-plist-e9ed32888a4d5493521e5d4d3c0abe437304a972.tar.bz2 | |
Fix UTF-16 decoding.
Diffstat (limited to 'src/binary/reader.rs')
| -rw-r--r-- | src/binary/reader.rs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/binary/reader.rs b/src/binary/reader.rs index f983efe..0504e13 100644 --- a/src/binary/reader.rs +++ b/src/binary/reader.rs @@ -216,7 +216,8 @@ impl<R: Read + Seek> EventReader<R> { } (0x6, n) => { // UTF-16 string - let len = try!(self.read_object_len(n)); + // n is the length of code units (16 bits), not bytes. + let len = try!(self.read_object_len(n * 2)); let raw = try!(self.read_data(len)); let mut cursor = Cursor::new(raw); @@ -333,4 +334,14 @@ mod tests { assert_eq!(events, comparison); } + + #[test] + fn utf16_plist() { + use PlistEvent::*; + + 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[39], StringValue("\u{2605} or better".to_owned())); + } } |
