diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-02-10 13:26:55 +0000 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-02-10 18:24:03 +0000 |
| commit | 625f985127fca32918f6dbdb9327bd5dd7a337d2 (patch) | |
| tree | 2d8ca2e322b82a6d0989562667f5736eb06ef3d9 | |
| parent | f6983e4254f51d4503fd56c52e1e330c644b9836 (diff) | |
| download | mullvadvpn-625f985127fca32918f6dbdb9327bd5dd7a337d2.tar.xz mullvadvpn-625f985127fca32918f6dbdb9327bd5dd7a337d2.zip | |
Use `htmlize` crate to escape XML entities
| -rw-r--r-- | Cargo.lock | 61 | ||||
| -rw-r--r-- | android/translations-converter/Cargo.toml | 1 | ||||
| -rw-r--r-- | android/translations-converter/src/android.rs | 19 |
3 files changed, 66 insertions, 15 deletions
diff --git a/Cargo.lock b/Cargo.lock index 0579b09ae3..aec551d796 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -815,6 +815,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "644f9158b2f133fd50f5fb3242878846d9eb792e445c893805ff0e3824006e35" [[package]] +name = "htmlize" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76afe6d2bfc32d303d6add823bdf8785fbcadab9bd63a7407e457a4e7684d9f5" +dependencies = [ + "phf", + "serde_json", +] + +[[package]] name = "http" version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1775,6 +1785,50 @@ dependencies = [ ] [[package]] +name = "phf" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12" +dependencies = [ + "phf_macros", + "phf_shared", + "proc-macro-hack", +] + +[[package]] +name = "phf_generator" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526" +dependencies = [ + "phf_shared", + "rand 0.7.3", +] + +[[package]] +name = "phf_macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "phf_shared" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7" +dependencies = [ + "siphasher", +] + +[[package]] name = "pin-project" version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2413,6 +2467,12 @@ dependencies = [ ] [[package]] +name = "siphasher" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa8f3741c7372e75519bd9346068370c9cdaabcc1f9599cbcf2a2719352286b7" + +[[package]] name = "slab" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -3104,6 +3164,7 @@ dependencies = [ name = "translations-converter" version = "0.1.0" dependencies = [ + "htmlize", "lazy_static", "regex", "serde", diff --git a/android/translations-converter/Cargo.toml b/android/translations-converter/Cargo.toml index fadfdc6396..a5f01aa386 100644 --- a/android/translations-converter/Cargo.toml +++ b/android/translations-converter/Cargo.toml @@ -8,6 +8,7 @@ edition = "2018" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +htmlize = "0.5" lazy_static = "1" regex = "1" serde = { version = "1", features = ["derive"] } diff --git a/android/translations-converter/src/android.rs b/android/translations-converter/src/android.rs index 8360b34f1d..9cd634b1b7 100644 --- a/android/translations-converter/src/android.rs +++ b/android/translations-converter/src/android.rs @@ -10,9 +10,6 @@ lazy_static! { static ref LINE_BREAKS: Regex = Regex::new(r"\s*\n\s*").unwrap(); static ref APOSTROPHES: Regex = Regex::new(r"\\'").unwrap(); static ref PARAMETERS: Regex = Regex::new(r"%[0-9]*\$").unwrap(); - static ref AMPERSANDS: Regex = Regex::new(r"&").unwrap(); - static ref LESS_THANS: Regex = Regex::new(r"<").unwrap(); - static ref GREATER_THANS: Regex = Regex::new(r">").unwrap(); } /// Contents of an Android string resources file. @@ -293,13 +290,10 @@ pub struct StringValue(String); impl From<&str> for StringValue { fn from(string: &str) -> Self { - let value_with_parameters = string + let value_with_parameters = htmlize::unescape(string) .replace(r"\", r"\\") .replace("\"", "\\\"") - .replace(r"'", r"\'") - .replace("&", "&") - .replace("<", "<") - .replace(">", ">"); + .replace(r"'", r"\'"); let mut parts = value_with_parameters.split("%"); let mut value = parts.next().unwrap().to_owned(); @@ -324,14 +318,9 @@ impl StringValue { let value = APOSTROPHES.replace_all(&value, "'"); // Mark where parameters are positioned, removing the parameter index let value = PARAMETERS.replace_all(&value, "%"); - // Unescape ampersands - let value = AMPERSANDS.replace_all(&value, "&"); - // Unescape less thans - let value = LESS_THANS.replace_all(&value, "<"); - // Unescape greater thans - let value = GREATER_THANS.replace_all(&value, ">"); - self.0 = value.into_owned(); + // Unescape XML characters + self.0 = htmlize::escape_text(value.as_bytes()); } /// Clones the internal string value. |
