summaryrefslogtreecommitdiffstats
path: root/vendor/idna
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:25:56 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-06-19 09:25:56 +0000
commit018c4950b9406055dec02ef0fb52f132e2bb1e2c (patch)
treea835ebdf2088ef88fa681f8fad45f09922c1ae9a /vendor/idna
parentAdding debian version 1.75.0+dfsg1-5. (diff)
downloadrustc-018c4950b9406055dec02ef0fb52f132e2bb1e2c.tar.xz
rustc-018c4950b9406055dec02ef0fb52f132e2bb1e2c.zip
Merging upstream version 1.76.0+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/idna')
-rw-r--r--vendor/idna/.cargo-checksum.json2
-rw-r--r--vendor/idna/Cargo.toml5
-rw-r--r--vendor/idna/src/punycode.rs24
-rw-r--r--vendor/idna/src/uts46.rs3
-rw-r--r--vendor/idna/tests/bad_punycode_tests.json6
-rw-r--r--vendor/idna/tests/punycode.rs37
6 files changed, 68 insertions, 9 deletions
diff --git a/vendor/idna/.cargo-checksum.json b/vendor/idna/.cargo-checksum.json
index ccbcd7a9f..4f0508d7e 100644
--- a/vendor/idna/.cargo-checksum.json
+++ b/vendor/idna/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"Cargo.toml":"32d6c206ec373e92afd20d07a6337c45e069b00e4a80344c82f010e72eb22605","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"76e972ac0f4ddb116e86e10100132a783931a596e7b9872eaa31be15cd4d751d","benches/all.rs":"e734b9c9092ed66986725f86cfe90f3756cfddb058af308b796ba494f9beefc2","src/IdnaMappingTable.txt":"87d6553a4b86bc49dcade38bf26b745cd81800eb8af295dc3fb99b4729eaea38","src/lib.rs":"e7fd80070a7e52dfd1e9fe785bf092eddc9fb421fd0f9a1ba1c2189b8d40d3ed","src/make_uts46_mapping_table.py":"917055fa841f813de2bcf79cc79b595da3d5551559ee768db8660ab77cb26c34","src/punycode.rs":"0e4a879cffee5af747ab3042928b4ff682b1c4881b40f9f241511668109ae124","src/uts46.rs":"f2dc62e5d7472eba2676e073bf5c0a4c635da5487740d8dc4310f61831859702","src/uts46_mapping_table.rs":"942fff78147c61da942f5f3a7ff4e90f9d7a00a29285733ac3fc3357eb2ed06f","tests/IdnaTestV2.txt":"c6f3778b0545fd150c8063286c7f5adc901e16557eddccc3751213646d07593d","tests/punycode.rs":"cd55e1ba1150a3a2a05aec6617affd1fed38c53cb344024a6556918a02ced78d","tests/punycode_tests.json":"3d4ac0cf25984c37b9ce197f5df680a0136f728fb8ec82bc76624e42139eb3a8","tests/tests.rs":"d205a2bfb29dfee73e014faebd3207a55ef0d40121e6dbd52f5d611b37ac111e","tests/unit.rs":"be025a7d9bab3bd1ce134c87f9d848269e157b31ca5ba0ea03426c1ac736b69e","tests/uts46.rs":"06c97bf7dc20f5372b542fa46922d6dd63fe15e0aa34d799d08df9e3a241aa21"},"package":"7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c"} \ No newline at end of file
+{"files":{"Cargo.toml":"8be30a9748419aed461ce333e260ff4a461bf8166dfc7768307f32fcfc4fbea1","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"76e972ac0f4ddb116e86e10100132a783931a596e7b9872eaa31be15cd4d751d","benches/all.rs":"e734b9c9092ed66986725f86cfe90f3756cfddb058af308b796ba494f9beefc2","src/IdnaMappingTable.txt":"87d6553a4b86bc49dcade38bf26b745cd81800eb8af295dc3fb99b4729eaea38","src/lib.rs":"e7fd80070a7e52dfd1e9fe785bf092eddc9fb421fd0f9a1ba1c2189b8d40d3ed","src/make_uts46_mapping_table.py":"917055fa841f813de2bcf79cc79b595da3d5551559ee768db8660ab77cb26c34","src/punycode.rs":"3697674a70647d200853ac9d1910ffcb4796534332fe328de16c4bb1283e2ec1","src/uts46.rs":"4eee036b6448489002ac5190f3ac28834a4caa063c7cc77474ea6256199619ae","src/uts46_mapping_table.rs":"942fff78147c61da942f5f3a7ff4e90f9d7a00a29285733ac3fc3357eb2ed06f","tests/IdnaTestV2.txt":"c6f3778b0545fd150c8063286c7f5adc901e16557eddccc3751213646d07593d","tests/bad_punycode_tests.json":"ff0a15479ed2cb08f7b4b39465160da66d1ac7575e5d76990c17e7b76cb5e0f5","tests/punycode.rs":"0b0f315a8b124c1275a423a69169b13b19bcd7e9e6a5158bd0d642d01c6db145","tests/punycode_tests.json":"3d4ac0cf25984c37b9ce197f5df680a0136f728fb8ec82bc76624e42139eb3a8","tests/tests.rs":"d205a2bfb29dfee73e014faebd3207a55ef0d40121e6dbd52f5d611b37ac111e","tests/unit.rs":"be025a7d9bab3bd1ce134c87f9d848269e157b31ca5ba0ea03426c1ac736b69e","tests/uts46.rs":"06c97bf7dc20f5372b542fa46922d6dd63fe15e0aa34d799d08df9e3a241aa21"},"package":"634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"} \ No newline at end of file
diff --git a/vendor/idna/Cargo.toml b/vendor/idna/Cargo.toml
index 373951542..5d97e9eaf 100644
--- a/vendor/idna/Cargo.toml
+++ b/vendor/idna/Cargo.toml
@@ -13,7 +13,7 @@
edition = "2018"
rust-version = "1.51"
name = "idna"
-version = "0.4.0"
+version = "0.5.0"
authors = ["The rust-url developers"]
autotests = false
description = "IDNA (Internationalizing Domain Names in Applications) and Punycode."
@@ -21,6 +21,9 @@ categories = ["no_std"]
license = "MIT OR Apache-2.0"
repository = "https://github.com/servo/rust-url/"
+[package.metadata.docs.rs]
+rustdoc-args = ["--generate-link-to-definition"]
+
[lib]
doctest = false
diff --git a/vendor/idna/src/punycode.rs b/vendor/idna/src/punycode.rs
index faef379ca..b1afc96f7 100644
--- a/vendor/idna/src/punycode.rs
+++ b/vendor/idna/src/punycode.rs
@@ -215,6 +215,9 @@ impl<'a> ExactSizeIterator for Decode<'a> {
/// This is a convenience wrapper around `encode`.
#[inline]
pub fn encode_str(input: &str) -> Option<String> {
+ if input.len() > u32::MAX as usize {
+ return None;
+ }
let mut buf = String::with_capacity(input.len());
encode_into(input.chars(), &mut buf).ok().map(|()| buf)
}
@@ -224,6 +227,9 @@ pub fn encode_str(input: &str) -> Option<String> {
/// Return None on overflow, which can only happen on inputs that would take more than
/// 63 encoded bytes, the DNS limit on domain name labels.
pub fn encode(input: &[char]) -> Option<String> {
+ if input.len() > u32::MAX as usize {
+ return None;
+ }
let mut buf = String::with_capacity(input.len());
encode_into(input.iter().copied(), &mut buf)
.ok()
@@ -235,9 +241,9 @@ where
I: Iterator<Item = char> + Clone,
{
// Handle "basic" (ASCII) code points. They are encoded as-is.
- let (mut input_length, mut basic_length) = (0, 0);
+ let (mut input_length, mut basic_length) = (0u32, 0);
for c in input.clone() {
- input_length += 1;
+ input_length = input_length.checked_add(1).ok_or(())?;
if c.is_ascii() {
output.push(c);
basic_length += 1;
@@ -269,10 +275,7 @@ where
for c in input.clone() {
let c = c as u32;
if c < code_point {
- delta += 1;
- if delta == 0 {
- return Err(()); // Overflow
- }
+ delta = delta.checked_add(1).ok_or(())?;
}
if c == code_point {
// Represent delta as a generalized variable-length integer:
@@ -314,3 +317,12 @@ fn value_to_digit(value: u32) -> char {
_ => panic!(),
}
}
+
+#[test]
+#[ignore = "slow"]
+#[cfg(target_pointer_width = "64")]
+fn huge_encode() {
+ let mut buf = String::new();
+ assert!(encode_into(std::iter::repeat('ß').take(u32::MAX as usize + 1), &mut buf).is_err());
+ assert_eq!(buf.len(), 0);
+}
diff --git a/vendor/idna/src/uts46.rs b/vendor/idna/src/uts46.rs
index fb39c1512..b082416c8 100644
--- a/vendor/idna/src/uts46.rs
+++ b/vendor/idna/src/uts46.rs
@@ -453,7 +453,7 @@ impl Idna {
return Errors::default();
}
let mut errors = processing(domain, self.config, &mut self.normalized, out);
- self.output = std::mem::replace(out, String::with_capacity(out.len()));
+ self.output = core::mem::replace(out, String::with_capacity(out.len()));
let mut first = true;
for label in self.output.split('.') {
if !first {
@@ -509,6 +509,7 @@ impl Idna {
}
#[derive(Clone, Copy)]
+#[must_use]
pub struct Config {
use_std3_ascii_rules: bool,
transitional_processing: bool,
diff --git a/vendor/idna/tests/bad_punycode_tests.json b/vendor/idna/tests/bad_punycode_tests.json
new file mode 100644
index 000000000..c0115290c
--- /dev/null
+++ b/vendor/idna/tests/bad_punycode_tests.json
@@ -0,0 +1,6 @@
+[
+ {
+ "description": "issue 870",
+ "decoded": " 񠀷 󠀷 󠀷 󠀷 󠀷 󠀷 󠀷 󠀷 󠀷 󠀷 󠀷 󠀷 󠀷 󠀷 21日 ᄢ 21日 㩴 ᄢ 21日 ᄢ "
+ }
+]
diff --git a/vendor/idna/tests/punycode.rs b/vendor/idna/tests/punycode.rs
index 95674137a..2867e4966 100644
--- a/vendor/idna/tests/punycode.rs
+++ b/vendor/idna/tests/punycode.rs
@@ -10,6 +10,7 @@ use crate::test::TestFn;
use idna::punycode::{decode, encode_str};
use serde_json::map::Map;
use serde_json::Value;
+use std::panic::catch_unwind;
use std::str::FromStr;
fn one_test(decoded: &str, encoded: &str) {
@@ -39,6 +40,15 @@ fn one_test(decoded: &str, encoded: &str) {
}
}
+fn one_bad_test(encode: &str) {
+ let result = catch_unwind(|| encode_str(encode));
+ assert!(
+ matches!(&result, Ok(None)),
+ "Should neither panic nor return Some result, but got {:?}",
+ result
+ )
+}
+
fn get_string<'a>(map: &'a Map<String, Value>, key: &str) -> &'a str {
match map.get(&key.to_string()) {
Some(Value::String(s)) => s,
@@ -74,4 +84,31 @@ pub fn collect_tests<F: FnMut(String, TestFn)>(add_test: &mut F) {
}
other => panic!("{:?}", other),
}
+
+ match Value::from_str(include_str!("bad_punycode_tests.json")) {
+ Ok(Value::Array(tests)) => {
+ for (i, test) in tests.into_iter().enumerate() {
+ match test {
+ Value::Object(o) => {
+ let test_name = {
+ let desc = get_string(&o, "description");
+ if desc.is_empty() {
+ format!("Bad Punycode {}", i + 1)
+ } else {
+ format!("Bad Punycode {}: {}", i + 1, desc)
+ }
+ };
+ add_test(
+ test_name,
+ TestFn::DynTestFn(Box::new(move || {
+ one_bad_test(get_string(&o, "decoded"))
+ })),
+ )
+ }
+ _ => panic!(),
+ }
+ }
+ }
+ other => panic!("{:?}", other),
+ }
}