Skip to content

Commit 20b509a

Browse files
author
bors-servo
authored
Auto merge of servo#129 - ak1t0:escape-between-U+0001-to-U+001f, r=SimonSapin
Character between U+0001 ~ U+001F in string should be escaped when serialized Fixes [servo/servo#15947](servo/servo#15947) <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/rust-cssparser/129) <!-- Reviewable:end -->
2 parents 0caaba1 + 8214af3 commit 20b509a

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/serializer.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -251,15 +251,19 @@ impl<'a, W> fmt::Write for CssStringWriter<'a, W> where W: fmt::Write {
251251
let mut chunk_start = 0;
252252
for (i, b) in s.bytes().enumerate() {
253253
let escaped = match b {
254-
b'"' => "\\\"",
255-
b'\\' => "\\\\",
256-
b'\n' => "\\A ",
257-
b'\r' => "\\D ",
258-
b'\x0C' => "\\C ",
254+
b'"' => Some("\\\""),
255+
b'\\' => Some("\\\\"),
256+
b'\n' => Some("\\A "),
257+
b'\r' => Some("\\D "),
258+
b'\0' => Some("\u{FFFD}"),
259+
b'\x01'...b'\x1F' | b'\x7F' => None,
259260
_ => continue,
260261
};
261262
try!(self.inner.write_str(&s[chunk_start..i]));
262-
try!(self.inner.write_str(escaped));
263+
match escaped {
264+
Some(x) => try!(self.inner.write_str(x)),
265+
None => try!(write!(self.inner, "\\{:x} ", b)),
266+
};
263267
chunk_start = i + 1;
264268
}
265269
self.inner.write_str(&s[chunk_start..])

0 commit comments

Comments
 (0)