std: decode even numbered non-BMP planes in the UTF-16 decoder.
Fixes #12318.
This commit is contained in:
@@ -881,7 +881,7 @@ impl<'a> Iterator<UTF16Item> for UTF16Items<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// all ok, so lets decode it.
|
// 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)}))
|
Some(ScalarValue(unsafe {cast::transmute(c)}))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3824,7 +3824,10 @@ mod tests {
|
|||||||
0xdc9c_u16, 0xd801_u16, 0xdc92_u16, 0xd801_u16,
|
0xdc9c_u16, 0xd801_u16, 0xdc92_u16, 0xd801_u16,
|
||||||
0xdc96_u16, 0xd801_u16, 0xdc86_u16, 0x0020_u16,
|
0xdc96_u16, 0xd801_u16, 0xdc86_u16, 0x0020_u16,
|
||||||
0xd801_u16, 0xdc95_u16, 0xd801_u16, 0xdc86_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() {
|
for p in pairs.iter() {
|
||||||
let (s, u) = (*p).clone();
|
let (s, u) = (*p).clone();
|
||||||
|
|||||||
Reference in New Issue
Block a user