From e995433296c7e7d1e6c3269902d3bf0f4fcdd602 Mon Sep 17 00:00:00 2001 From: Jasper Bryant-Greene Date: Thu, 19 Sep 2019 16:18:04 +0900 Subject: [PATCH] Remove usage of smallvec due to safety concerns --- Cargo.toml | 1 - src/decompose.rs | 15 ++++----------- src/lib.rs | 2 -- src/recompose.rs | 7 +++---- 4 files changed, 7 insertions(+), 18 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index e4727c7..db77bfe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,4 +21,3 @@ Unicode Standard Annex #15. exclude = [ "target/*", "Cargo.lock", "scripts/tmp", "*.txt", "src/normalization_tests.rs", "src/test.rs" ] [dependencies] -smallvec = "0.6" \ No newline at end of file diff --git a/src/decompose.rs b/src/decompose.rs index b4ef386..66560bd 100644 --- a/src/decompose.rs +++ b/src/decompose.rs @@ -7,7 +7,6 @@ // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. -use smallvec::SmallVec; use std::fmt::{self, Write}; use std::iter::Fuse; use std::ops::Range; @@ -32,7 +31,7 @@ pub struct Decompositions { // 2) "Ready" characters which are sorted and ready to emit on demand; // 3) A "pending" block which stills needs more characters for us to be able // to sort in canonical order and is not safe to emit. - buffer: SmallVec<[(u8, char); 4]>, + buffer: Vec<(u8, char)>, ready: Range, } @@ -41,7 +40,7 @@ pub fn new_canonical>(iter: I) -> Decompositions { Decompositions { kind: self::DecompositionType::Canonical, iter: iter.fuse(), - buffer: SmallVec::new(), + buffer: Vec::with_capacity(4), ready: 0..0, } } @@ -51,7 +50,7 @@ pub fn new_compatible>(iter: I) -> Decompositions { Decompositions { kind: self::DecompositionType::Compatible, iter: iter.fuse(), - buffer: SmallVec::new(), + buffer: Vec::with_capacity(4), ready: 0..0, } } @@ -78,13 +77,7 @@ impl Decompositions { #[inline] fn reset_buffer(&mut self) { - // Equivalent to `self.buffer.drain(0..self.ready.end)` (if SmallVec - // supported this API) - let pending = self.buffer.len() - self.ready.end; - for i in 0..pending { - self.buffer[i] = self.buffer[i + self.ready.end]; - } - self.buffer.truncate(pending); + let _ = self.buffer.drain(0..self.ready.end).count(); self.ready = 0..0; } diff --git a/src/lib.rs b/src/lib.rs index 7a4b4e0..8ddb95d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -41,8 +41,6 @@ #![doc(html_logo_url = "https://unicode-rs.github.io/unicode-rs_sm.png", html_favicon_url = "https://unicode-rs.github.io/unicode-rs_sm.png")] -extern crate smallvec; - pub use tables::UNICODE_VERSION; pub use decompose::Decompositions; pub use quick_check::{ diff --git a/src/recompose.rs b/src/recompose.rs index 4c2bf97..04e862c 100644 --- a/src/recompose.rs +++ b/src/recompose.rs @@ -9,7 +9,6 @@ // except according to those terms. use decompose::Decompositions; -use smallvec::SmallVec; use std::fmt::{self, Write}; #[derive(Clone)] @@ -24,7 +23,7 @@ enum RecompositionState { pub struct Recompositions { iter: Decompositions, state: RecompositionState, - buffer: SmallVec<[char; 4]>, + buffer: Vec, composee: Option, last_ccc: Option, } @@ -34,7 +33,7 @@ pub fn new_canonical>(iter: I) -> Recompositions { Recompositions { iter: super::decompose::new_canonical(iter), state: self::RecompositionState::Composing, - buffer: SmallVec::new(), + buffer: Vec::with_capacity(4), composee: None, last_ccc: None, } @@ -45,7 +44,7 @@ pub fn new_compatible>(iter: I) -> Recompositions { Recompositions { iter: super::decompose::new_compatible(iter), state: self::RecompositionState::Composing, - buffer: SmallVec::new(), + buffer: Vec::with_capacity(4), composee: None, last_ccc: None, }