std: decode even numbered non-BMP planes in the UTF-16 decoder.

Fixes #12318.
This commit is contained in:
Huon Wilson
2014-02-17 00:57:16 +11:00
parent a96cea4f5a
commit 35b1b62ddf

View File

@@ -881,7 +881,7 @@ impl<'a> Iterator<UTF16Item> for UTF16Items<'a> {
}
// all ok, so lets decode it.
let c = (u - 0xD800) as u32 << 10 | (u2 - 0xDC00) as u32 | 0x1_0000;
let c = ((u - 0xD800) as u32 << 10 | (u2 - 0xDC00) as u32) + 0x1_0000;
Some(ScalarValue(unsafe {cast::transmute(c)}))
}
}
@@ -3824,7 +3824,10 @@ mod tests {
0xdc9c_u16, 0xd801_u16, 0xdc92_u16, 0xd801_u16,
0xdc96_u16, 0xd801_u16, 0xdc86_u16, 0x0020_u16,
0xd801_u16, 0xdc95_u16, 0xd801_u16, 0xdc86_u16,
0x000a_u16 ]) ];
0x000a_u16 ]),
// Issue #12318, even-numbered non-BMP planes
(~"\U00020000",
~[0xD840, 0xDC00])];
for p in pairs.iter() {
let (s, u) = (*p).clone();