Properly use big endianness to parse font feature tags

This commit is contained in:
Anthony Ramine 2017-05-05 17:37:16 +02:00
parent 7fc01437f4
commit 7eb7fc7582
2 changed files with 7 additions and 7 deletions

View file

@ -1815,10 +1815,10 @@ ${helpers.single_keyword_system("font-variant-position",
impl ToCss for FeatureTagValue { impl ToCss for FeatureTagValue {
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write { fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
use std::str; use std::str;
use byteorder::{WriteBytesExt, NativeEndian}; use byteorder::{WriteBytesExt, BigEndian};
let mut raw: Vec<u8> = vec!(); let mut raw: Vec<u8> = vec!();
raw.write_u32::<NativeEndian>(self.tag).unwrap(); raw.write_u32::<BigEndian>(self.tag).unwrap();
let str_print = str::from_utf8(&raw).unwrap_or_default(); let str_print = str::from_utf8(&raw).unwrap_or_default();
match self.value { match self.value {
@ -1836,7 +1836,7 @@ ${helpers.single_keyword_system("font-variant-position",
use std::io::Cursor; use std::io::Cursor;
use std::str; use std::str;
use std::ops::Deref; use std::ops::Deref;
use byteorder::{ReadBytesExt, NativeEndian}; use byteorder::{ReadBytesExt, BigEndian};
let tag = try!(input.expect_string()); let tag = try!(input.expect_string());
@ -1848,7 +1848,7 @@ ${helpers.single_keyword_system("font-variant-position",
} }
let mut raw = Cursor::new(tag.as_bytes()); let mut raw = Cursor::new(tag.as_bytes());
let u_tag = raw.read_u32::<NativeEndian>().unwrap(); let u_tag = raw.read_u32::<BigEndian>().unwrap();
if let Ok(value) = input.try(|input| input.expect_integer()) { if let Ok(value) = input.try(|input| input.expect_integer()) {
// handle integer, throw if it is negative // handle integer, throw if it is negative

View file

@ -10,7 +10,7 @@ use style_traits::ToCss;
#[test] #[test]
fn font_feature_settings_should_parse_properly() { fn font_feature_settings_should_parse_properly() {
use byteorder::{ReadBytesExt, NativeEndian}; use byteorder::{ReadBytesExt, BigEndian};
use std::io::Cursor; use std::io::Cursor;
let normal = parse_longhand!(font_feature_settings, "normal"); let normal = parse_longhand!(font_feature_settings, "normal");
@ -20,8 +20,8 @@ fn font_feature_settings_should_parse_properly() {
let mut a_d_bytes = Cursor::new(b"abcd"); let mut a_d_bytes = Cursor::new(b"abcd");
let mut e_h_bytes = Cursor::new(b"efgh"); let mut e_h_bytes = Cursor::new(b"efgh");
let abcd = a_d_bytes.read_u32::<NativeEndian>().unwrap(); let abcd = a_d_bytes.read_u32::<BigEndian>().unwrap();
let efgh = e_h_bytes.read_u32::<NativeEndian>().unwrap(); let efgh = e_h_bytes.read_u32::<BigEndian>().unwrap();
let on = parse_longhand!(font_feature_settings, "\"abcd\" on"); let on = parse_longhand!(font_feature_settings, "\"abcd\" on");
let on_computed = computed_value::T::Tag(vec![ let on_computed = computed_value::T::Tag(vec![