diff options
| -rw-r--r-- | src/binary/reader.rs | 13 | ||||
| -rw-r--r-- | tests/data/utf16_bplist.plist | bin | 0 -> 3301 bytes | 
2 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())); +    }  } diff --git a/tests/data/utf16_bplist.plist b/tests/data/utf16_bplist.plistBinary files differ new file mode 100644 index 0000000..b1a6856 --- /dev/null +++ b/tests/data/utf16_bplist.plist | 
