commit 2b8042eb00d2e9abc21981185403d875283cf67f parent 76ecbc0e47abeb920c55b13e9479da1ec4ab8636 Author: Max Leonard Inden <mail@max-inden.de> Date: Wed, 29 Oct 2025 13:22:47 +0000 Bug 1996290 - update to neqo v0.18.0 r=necko-reviewers,supply-chain-reviewers,sunil Differential Revision: https://phabricator.services.mozilla.com/D270189 Diffstat:
27 files changed, 272 insertions(+), 114 deletions(-)
diff --git a/.cargo/config.toml.in b/.cargo/config.toml.in @@ -110,9 +110,9 @@ git = "https://github.com/mozilla/mp4parse-rust" rev = "f955be5d2a04a631c0f1777d6f35370ea1a99e2d" replace-with = "vendored-sources" -[source."git+https://github.com/mozilla/neqo?tag=v0.17.0"] +[source."git+https://github.com/mozilla/neqo?tag=v0.18.0"] git = "https://github.com/mozilla/neqo" -tag = "v0.17.0" +tag = "v0.18.0" replace-with = "vendored-sources" [source."git+https://github.com/rust-lang/rust-bindgen?rev=9366e0af8da529c958b4cd4fcbe492d951c86f5c"] diff --git a/Cargo.lock b/Cargo.lock @@ -4714,7 +4714,7 @@ dependencies = [ [[package]] name = "mtu" version = "0.2.9" -source = "git+https://github.com/mozilla/neqo?tag=v0.17.0#0f8a822da1766cd397a4b0687f23da096d762733" +source = "git+https://github.com/mozilla/neqo?tag=v0.18.0#57ef3bd8f67023a168734a154e0ef273e9ddc7f1" dependencies = [ "bindgen 0.69.999", "cfg_aliases", @@ -4758,8 +4758,8 @@ dependencies = [ [[package]] name = "neqo-bin" -version = "0.17.0" -source = "git+https://github.com/mozilla/neqo?tag=v0.17.0#0f8a822da1766cd397a4b0687f23da096d762733" +version = "0.18.0" +source = "git+https://github.com/mozilla/neqo?tag=v0.18.0#57ef3bd8f67023a168734a154e0ef273e9ddc7f1" dependencies = [ "clap", "clap-verbosity-flag", @@ -4782,8 +4782,8 @@ dependencies = [ [[package]] name = "neqo-common" -version = "0.17.0" -source = "git+https://github.com/mozilla/neqo?tag=v0.17.0#0f8a822da1766cd397a4b0687f23da096d762733" +version = "0.18.0" +source = "git+https://github.com/mozilla/neqo?tag=v0.18.0#57ef3bd8f67023a168734a154e0ef273e9ddc7f1" dependencies = [ "enum-map", "env_logger", @@ -4796,8 +4796,8 @@ dependencies = [ [[package]] name = "neqo-crypto" -version = "0.17.0" -source = "git+https://github.com/mozilla/neqo?tag=v0.17.0#0f8a822da1766cd397a4b0687f23da096d762733" +version = "0.18.0" +source = "git+https://github.com/mozilla/neqo?tag=v0.18.0#57ef3bd8f67023a168734a154e0ef273e9ddc7f1" dependencies = [ "bindgen 0.69.999", "enum-map", @@ -4814,8 +4814,8 @@ dependencies = [ [[package]] name = "neqo-http3" -version = "0.17.0" -source = "git+https://github.com/mozilla/neqo?tag=v0.17.0#0f8a822da1766cd397a4b0687f23da096d762733" +version = "0.18.0" +source = "git+https://github.com/mozilla/neqo?tag=v0.18.0#57ef3bd8f67023a168734a154e0ef273e9ddc7f1" dependencies = [ "enumset", "log", @@ -4833,8 +4833,8 @@ dependencies = [ [[package]] name = "neqo-qpack" -version = "0.17.0" -source = "git+https://github.com/mozilla/neqo?tag=v0.17.0#0f8a822da1766cd397a4b0687f23da096d762733" +version = "0.18.0" +source = "git+https://github.com/mozilla/neqo?tag=v0.18.0#57ef3bd8f67023a168734a154e0ef273e9ddc7f1" dependencies = [ "log", "neqo-common", @@ -4847,8 +4847,8 @@ dependencies = [ [[package]] name = "neqo-transport" -version = "0.17.0" -source = "git+https://github.com/mozilla/neqo?tag=v0.17.0#0f8a822da1766cd397a4b0687f23da096d762733" +version = "0.18.0" +source = "git+https://github.com/mozilla/neqo?tag=v0.18.0#57ef3bd8f67023a168734a154e0ef273e9ddc7f1" dependencies = [ "enum-map", "enumset", @@ -4867,8 +4867,8 @@ dependencies = [ [[package]] name = "neqo-udp" -version = "0.17.0" -source = "git+https://github.com/mozilla/neqo?tag=v0.17.0#0f8a822da1766cd397a4b0687f23da096d762733" +version = "0.18.0" +source = "git+https://github.com/mozilla/neqo?tag=v0.18.0#57ef3bd8f67023a168734a154e0ef273e9ddc7f1" dependencies = [ "cfg_aliases", "libc", diff --git a/netwerk/socket/neqo_glue/Cargo.toml b/netwerk/socket/neqo_glue/Cargo.toml @@ -10,11 +10,11 @@ name = "neqo_glue" [dependencies] firefox-on-glean = { path = "../../../toolkit/components/glean/api" } -neqo-udp = { tag= "v0.17.0", git = "https://github.com/mozilla/neqo" } -neqo-http3 = { tag= "v0.17.0", git = "https://github.com/mozilla/neqo" } -neqo-transport = { tag= "v0.17.0", git = "https://github.com/mozilla/neqo", features = ["gecko"] } -neqo-common = { tag= "v0.17.0", git = "https://github.com/mozilla/neqo" } -neqo-qpack = { tag= "v0.17.0", git = "https://github.com/mozilla/neqo" } +neqo-udp = { tag = "v0.18.0", git = "https://github.com/mozilla/neqo" } +neqo-http3 = { tag = "v0.18.0", git = "https://github.com/mozilla/neqo" } +neqo-transport = { tag = "v0.18.0", git = "https://github.com/mozilla/neqo", features = ["gecko"] } +neqo-common = { tag = "v0.18.0", git = "https://github.com/mozilla/neqo" } +neqo-qpack = { tag = "v0.18.0", git = "https://github.com/mozilla/neqo" } nserror = { path = "../../../xpcom/rust/nserror" } nsstring = { path = "../../../xpcom/rust/nsstring" } xpcom = { path = "../../../xpcom/rust/xpcom" } @@ -31,7 +31,7 @@ zlib-rs = "0.4.2" winapi = {version = "0.3", features = ["ws2def"] } [dependencies.neqo-crypto] -tag= "v0.17.0" +tag = "v0.18.0" git = "https://github.com/mozilla/neqo" default-features = false features = ["gecko"] diff --git a/netwerk/socket/neqo_glue/src/lib.rs b/netwerk/socket/neqo_glue/src/lib.rs @@ -1082,15 +1082,16 @@ pub extern "C" fn neqo_http3conn_process_output_and_send( conn.datagram_size_sent.accumulate(dg.data().len() as u64); conn.datagram_segments_sent .accumulate(dg.num_datagrams() as u64); - if dg.datagram_size() > 0 { - for _ in 0..(dg.data().len() / dg.datagram_size()) { - conn.datagram_segment_size_sent - .accumulate(dg.datagram_size() as u64); - } - if let Some(remainder) = dg.data().len().checked_rem(dg.datagram_size()) { - conn.datagram_segment_size_sent.accumulate(remainder as u64); - } + for _ in 0..(dg.data().len() / dg.datagram_size()) { + conn.datagram_segment_size_sent + .accumulate(dg.datagram_size().get() as u64); } + conn.datagram_segment_size_sent.accumulate( + dg.data() + .len() + .checked_rem(dg.datagram_size().get()) + .expect("datagram_size is a NonZeroUsize") as u64, + ); } OutputBatch::Callback(to) => { let timeout = if to.is_zero() { diff --git a/netwerk/test/http3server/Cargo.toml b/netwerk/test/http3server/Cargo.toml @@ -6,11 +6,11 @@ edition = "2021" license = "MPL-2.0" [dependencies] -neqo-bin = { tag= "v0.17.0", git = "https://github.com/mozilla/neqo" } -neqo-transport = { tag= "v0.17.0", git = "https://github.com/mozilla/neqo", features = ["gecko"] } -neqo-common = { tag= "v0.17.0", git = "https://github.com/mozilla/neqo" } -neqo-http3 = { tag= "v0.17.0", git = "https://github.com/mozilla/neqo" } -neqo-qpack = { tag= "v0.17.0", git = "https://github.com/mozilla/neqo" } +neqo-bin = { tag = "v0.18.0", git = "https://github.com/mozilla/neqo" } +neqo-transport = { tag = "v0.18.0", git = "https://github.com/mozilla/neqo", features = ["gecko"] } +neqo-common = { tag = "v0.18.0", git = "https://github.com/mozilla/neqo" } +neqo-http3 = { tag = "v0.18.0", git = "https://github.com/mozilla/neqo" } +neqo-qpack = { tag = "v0.18.0", git = "https://github.com/mozilla/neqo" } log = "0.4.0" base64 = "0.22" cfg-if = "1.0" @@ -21,7 +21,7 @@ tokio = { version = "1", features = ["rt-multi-thread"] } mozilla-central-workspace-hack = { version = "0.1", features = ["http3server"], optional = true } [dependencies.neqo-crypto] -tag= "v0.17.0" +tag = "v0.18.0" git = "https://github.com/mozilla/neqo" default-features = false features = ["gecko"] diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml @@ -4227,7 +4227,7 @@ delta = "0.2.6 -> 0.2.9" [[audits.mtu]] who = "Max Leonard Inden <mail@max-inden.de>" criteria = "safe-to-deploy" -delta = "0.2.9 -> 0.2.9@git:0f8a822da1766cd397a4b0687f23da096d762733" +delta = "0.2.9 -> 0.2.9@git:57ef3bd8f67023a168734a154e0ef273e9ddc7f1" importable = false [[audits.naga]] diff --git a/third_party/rust/neqo-bin/.cargo-checksum.json b/third_party/rust/neqo-bin/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"ecd47a2455990f50241cd928d64830bd8d5d292e96107008f91af81f430db7e4","benches/main.rs":"6b7bd05c718020f9180a630a2fe1a13066245ad90ee9b9bf72b7aa9f74709764","src/bin/client.rs":"9df4af3b25159adccfca36d6001443cf295993351fec51f833827d91ebb67fd4","src/bin/server.rs":"f55f26c8f0a34de415ede8c4865b845b3d755c3f5fe4f5574b5ee7f3a3601598","src/client/http09.rs":"7ee588c1a8317f70f8a45cdaf0fdfc49419340dd4b41700de1219e8f5ab6c097","src/client/http3.rs":"0084e2671e761cc46ce18e856f193ebe875386d6bbc4f2dc88f2bd563ca865c9","src/client/mod.rs":"ab34c80769e4996d02f930c136c9c832d130209f435845b68d7ab89fe789fe29","src/lib.rs":"ef20c29297d978a192011371e6af12be26d57063b616d3e21fb3d2750987ce88","src/send_data.rs":"ef8ad949e8b787f77f091a4705672b9801dc79c863d9d54a5296e0839789802e","src/server/http09.rs":"6f8f9bec9c2b8d524f2c331fc0db81c17f71c8c8ac00d50e4b6670c3e226b2b2","src/server/http3.rs":"bc58cd9a11498d574d56e2f7aa80853ed5eca4828065f0841509fdb9bfb576c4","src/server/mod.rs":"3897044c5b690360cf1a872d90f467ff4e629e9283a56bdf633045c2a1a730b0","src/udp.rs":"a0f456178f353fcd91013b3fab46dac14863f979930305c9d5bd5471d953e144"},"package":null} -\ No newline at end of file +{"files":{"Cargo.toml":"0f352c3841d58a8621d52a11ff0d1d26b1c7d5f6b9a3f7a37a7e3f6afcfb2e89","benches/main.rs":"6b7bd05c718020f9180a630a2fe1a13066245ad90ee9b9bf72b7aa9f74709764","src/bin/client.rs":"9df4af3b25159adccfca36d6001443cf295993351fec51f833827d91ebb67fd4","src/bin/server.rs":"f55f26c8f0a34de415ede8c4865b845b3d755c3f5fe4f5574b5ee7f3a3601598","src/client/http09.rs":"7ee588c1a8317f70f8a45cdaf0fdfc49419340dd4b41700de1219e8f5ab6c097","src/client/http3.rs":"0084e2671e761cc46ce18e856f193ebe875386d6bbc4f2dc88f2bd563ca865c9","src/client/mod.rs":"ab34c80769e4996d02f930c136c9c832d130209f435845b68d7ab89fe789fe29","src/lib.rs":"ef20c29297d978a192011371e6af12be26d57063b616d3e21fb3d2750987ce88","src/send_data.rs":"ef8ad949e8b787f77f091a4705672b9801dc79c863d9d54a5296e0839789802e","src/server/http09.rs":"6f8f9bec9c2b8d524f2c331fc0db81c17f71c8c8ac00d50e4b6670c3e226b2b2","src/server/http3.rs":"e090c81154a39a7a77b69321cba782752796953f3db8a9685cb147874205d9de","src/server/mod.rs":"3897044c5b690360cf1a872d90f467ff4e629e9283a56bdf633045c2a1a730b0","src/udp.rs":"a0f456178f353fcd91013b3fab46dac14863f979930305c9d5bd5471d953e144"},"package":null} +\ No newline at end of file diff --git a/third_party/rust/neqo-bin/Cargo.toml b/third_party/rust/neqo-bin/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" rust-version = "1.81.0" name = "neqo-bin" -version = "0.17.0" +version = "0.18.0" authors = ["The Neqo Authors <necko@mozilla.com>"] build = false autolib = false diff --git a/third_party/rust/neqo-bin/src/server/http3.rs b/third_party/rust/neqo-bin/src/server/http3.rs @@ -30,7 +30,8 @@ pub struct HttpServer { server: Http3Server, /// Progress writing to each stream. remaining_data: HashMap<StreamId, SendData>, - posts: HashMap<Http3OrWebTransportStream, usize>, + /// Tracks POST requests: (bytes received, optional response size from path) + posts: HashMap<Http3OrWebTransportStream, (usize, Option<usize>)>, is_qns_test: bool, } @@ -104,7 +105,10 @@ impl super::HttpServer for HttpServer { qdebug!("Headers (request={stream} fin={fin}): {headers:?}"); if headers.contains_header(":method", "POST") { - self.posts.insert(stream, 0); + let response_size = headers + .find_header(":path") + .and_then(|path| path.value().trim_matches('/').parse::<usize>().ok()); + self.posts.insert(stream, (0, response_size)); continue; } @@ -162,17 +166,28 @@ impl super::HttpServer for HttpServer { } Http3ServerEvent::Data { stream, data, fin } => { - if let Some(received) = self.posts.get_mut(&stream) { + if let Some((received, _)) = self.posts.get_mut(&stream) { *received += data.len(); } if fin { - if let Some(received) = self.posts.remove(&stream) { - let msg = received.to_string().as_bytes().to_vec(); + if let Some((received, response_size)) = self.posts.remove(&stream) { + let mut response = response_size.map_or_else( + || SendData::from(received.to_string().into_bytes()), + SendData::zeroes, + ); + stream - .send_headers(&[Header::new(":status", "200")]) + .send_headers(&[ + Header::new(":status", "200"), + Header::new("content-length", response.len().to_string()), + ]) .unwrap(); - stream.send_data(&msg, now).unwrap(); - stream.stream_close_send(now).unwrap(); + let done = response.send(|chunk| stream.send_data(chunk, now).unwrap()); + if done { + stream.stream_close_send(now).unwrap(); + } else { + self.remaining_data.insert(stream.stream_id(), response); + } } } } diff --git a/third_party/rust/neqo-common/.cargo-checksum.json b/third_party/rust/neqo-common/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"5a8714e512c102e8bb9c212c67303bb5ab367e515b736328ce1162a281b1c4a6","benches/decoder.rs":"9a5e780ff68f180d7597e9d56b6d0ae609594a4558e4010babb2f33660ddddbe","build.rs":"d9accad1f92a1d82aff73a588269342db882918173e8d9b2b914c514e42e2839","src/bytes.rs":"b9ce44977af8d0731b51798fa9bd752fa4be437603a08446eb55889c2348281c","src/codec.rs":"1d5a036147a0bd4789eb4caa545f82ee0d18eca25ad1b6bdfd2fad58d99ae29e","src/datagram.rs":"b36bcfa4134aee3841e0210dc01aae410e1e6b4cf37163bb81a6276b7af007fd","src/event.rs":"289cf8e265c33e7cded58820ac81e5b575e3f84dd52fa18b0761f4094fb361c0","src/fuzz.rs":"9e0f2dca1832ef49b93b214e8d5f1ca2f5f8cb84a856fead344f62a722c370db","src/header.rs":"7f5d82577a5e1020ff237143e3aaa7e671403466a5a87f633b4c75f9d4e90aa9","src/hrtime.rs":"fd1fbf9ddd38c77e92abe25d7ab9e62872c1cd62ffae8743835bf94f76b6ddc8","src/incrdecoder.rs":"62f61d2600dafb1eec7d6cc85b3c7b07aba0ccd1149892b1dfa1a441f30927a3","src/lib.rs":"2bb6289a73dc07edfd2bc5bccda9542d403066656f41042116ed31f4fc4725ca","src/log.rs":"61a9b24bf6bf1493da67082bcf7fef8fe55f0a23d7f2a9ad13748982c54c85e2","src/qlog.rs":"2c072bb9ad31aad99c1f41421f162fbc48fbd4a17f4e554187b41267afef144b","src/tos.rs":"e09a69a20d54178a4c74b63596c607dbe8ace4ae0758a65f9878ea63d40e3c80","tests/log.rs":"c73187e390ee1a7c4a72266cb7ce5c326e862803dbcf86c2b9a892462fa22356"},"package":null} -\ No newline at end of file +{"files":{"Cargo.toml":"040088e3a044f56f5e39fb30a6e499743ed6a298f143a61c29e4502fa3273105","benches/decoder.rs":"9a5e780ff68f180d7597e9d56b6d0ae609594a4558e4010babb2f33660ddddbe","build.rs":"d9accad1f92a1d82aff73a588269342db882918173e8d9b2b914c514e42e2839","src/bytes.rs":"b9ce44977af8d0731b51798fa9bd752fa4be437603a08446eb55889c2348281c","src/codec.rs":"1d5a036147a0bd4789eb4caa545f82ee0d18eca25ad1b6bdfd2fad58d99ae29e","src/datagram.rs":"2ad1a6e1f8a157a0361b7b4e7c161d62c7bf742c4247190507b9d050d113a923","src/event.rs":"289cf8e265c33e7cded58820ac81e5b575e3f84dd52fa18b0761f4094fb361c0","src/fuzz.rs":"9e0f2dca1832ef49b93b214e8d5f1ca2f5f8cb84a856fead344f62a722c370db","src/header.rs":"7f5d82577a5e1020ff237143e3aaa7e671403466a5a87f633b4c75f9d4e90aa9","src/hrtime.rs":"fd1fbf9ddd38c77e92abe25d7ab9e62872c1cd62ffae8743835bf94f76b6ddc8","src/incrdecoder.rs":"62f61d2600dafb1eec7d6cc85b3c7b07aba0ccd1149892b1dfa1a441f30927a3","src/lib.rs":"2bb6289a73dc07edfd2bc5bccda9542d403066656f41042116ed31f4fc4725ca","src/log.rs":"61a9b24bf6bf1493da67082bcf7fef8fe55f0a23d7f2a9ad13748982c54c85e2","src/qlog.rs":"2c072bb9ad31aad99c1f41421f162fbc48fbd4a17f4e554187b41267afef144b","src/tos.rs":"e09a69a20d54178a4c74b63596c607dbe8ace4ae0758a65f9878ea63d40e3c80","tests/log.rs":"c73187e390ee1a7c4a72266cb7ce5c326e862803dbcf86c2b9a892462fa22356"},"package":null} +\ No newline at end of file diff --git a/third_party/rust/neqo-common/Cargo.toml b/third_party/rust/neqo-common/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" rust-version = "1.81.0" name = "neqo-common" -version = "0.17.0" +version = "0.18.0" authors = ["The Neqo Authors <necko@mozilla.com>"] build = "build.rs" autolib = false diff --git a/third_party/rust/neqo-common/src/datagram.rs b/third_party/rust/neqo-common/src/datagram.rs @@ -7,11 +7,15 @@ use std::{ fmt::{self, Debug, Formatter}, net::SocketAddr, + num::NonZeroUsize, ops::{Deref, DerefMut}, }; use crate::{hex_with_len, Bytes, Tos}; +/// A UDP datagram. +/// +/// Guaranteed to not be empty. #[derive(Clone, PartialEq, Eq)] pub struct Datagram<D = Vec<u8>> { src: SocketAddr, @@ -86,14 +90,14 @@ impl<D: AsMut<[u8]> + AsRef<[u8]>> AsMut<[u8]> for Datagram<D> { } impl Datagram<Vec<u8>> { + /// # Panics + /// + /// Panics if `d` converts to an empty vector. #[must_use] pub fn new<V: Into<Vec<u8>>>(src: SocketAddr, dst: SocketAddr, tos: Tos, d: V) -> Self { - Self { - src, - dst, - tos, - d: d.into(), - } + let d = d.into(); + assert!(!d.is_empty(), "Datagram data cannot be empty"); + Self { src, dst, tos, d } } } @@ -124,15 +128,23 @@ impl<D: AsRef<[u8]>> Debug for Datagram<D> { } impl<'a> Datagram<&'a mut [u8]> { + /// # Panics + /// + /// Panics if the data is empty. #[must_use] pub fn from_slice(src: SocketAddr, dst: SocketAddr, tos: Tos, d: &'a mut [u8]) -> Self { + assert!(!d.is_empty(), "Datagram data cannot be empty"); Self { src, dst, tos, d } } } impl Datagram<Bytes> { + /// # Panics + /// + /// Panics if the data is empty. #[must_use] - pub const fn from_bytes(src: SocketAddr, dst: SocketAddr, tos: Tos, d: Bytes) -> Self { + pub fn from_bytes(src: SocketAddr, dst: SocketAddr, tos: Tos, d: Bytes) -> Self { + assert!(!d.is_empty(), "Datagram data cannot be empty"); Self { src, dst, tos, d } } } @@ -152,7 +164,7 @@ pub struct DatagramBatch { src: SocketAddr, dst: SocketAddr, tos: Tos, - datagram_size: usize, + datagram_size: NonZeroUsize, d: Vec<u8>, } @@ -176,7 +188,8 @@ impl From<Datagram<Vec<u8>>> for DatagramBatch { src: d.src, dst: d.dst, tos: d.tos, - datagram_size: d.d.len(), + datagram_size: NonZeroUsize::new(d.d.len()) + .expect("Datagram is guaranteed to be non-empty"), d: d.d, } } @@ -188,7 +201,7 @@ impl DatagramBatch { src: SocketAddr, dst: SocketAddr, tos: Tos, - datagram_size: usize, + datagram_size: NonZeroUsize, d: Vec<u8>, ) -> Self { Self { @@ -220,7 +233,7 @@ impl DatagramBatch { } #[must_use] - pub const fn datagram_size(&self) -> usize { + pub const fn datagram_size(&self) -> NonZeroUsize { self.datagram_size } @@ -236,11 +249,11 @@ impl DatagramBatch { #[must_use] pub fn num_datagrams(&self) -> usize { - self.d.len().div_ceil(self.datagram_size) + self.d.len().div_ceil(self.datagram_size.get()) } pub fn iter(&self) -> impl Iterator<Item = Datagram<&[u8]>> { - self.d.chunks(self.datagram_size).map(|d| Datagram { + self.d.chunks(self.datagram_size.get()).map(|d| Datagram { src: self.src, dst: self.dst, tos: self.tos, @@ -249,23 +262,28 @@ impl DatagramBatch { } pub fn iter_mut(&mut self) -> impl Iterator<Item = Datagram<&mut [u8]>> { - self.d.chunks_mut(self.datagram_size).map(|d| Datagram { - src: self.src, - dst: self.dst, - tos: self.tos, - d, - }) + self.d + .chunks_mut(self.datagram_size.get()) + .map(|d| Datagram { + src: self.src, + dst: self.dst, + tos: self.tos, + d, + }) } } #[cfg(test)] #[cfg_attr(coverage_nightly, coverage(off))] mod tests { - use std::net::{IpAddr, Ipv6Addr, SocketAddr}; + use std::{ + net::{IpAddr, Ipv6Addr, SocketAddr}, + num::NonZeroUsize, + }; - use test_fixture::datagram; + use test_fixture::{datagram, DEFAULT_ADDR}; - use crate::{DatagramBatch, Ecn, Tos}; + use crate::{Datagram, DatagramBatch, Ecn, Tos}; #[test] fn fmt_datagram() { @@ -277,10 +295,21 @@ mod tests { } #[test] - fn is_empty() { - let d = datagram(vec![]); - assert_eq!(d.len(), 0); - assert!(d.is_empty()); + #[should_panic(expected = "Datagram data cannot be empty")] + fn new_empty() { + let _d = Datagram::new(DEFAULT_ADDR, DEFAULT_ADDR, Ecn::Ect0.into(), vec![]); + } + + #[test] + #[should_panic(expected = "Datagram data cannot be empty")] + fn from_slice_empty() { + let _d = Datagram::from_slice(DEFAULT_ADDR, DEFAULT_ADDR, Ecn::Ect0.into(), &mut []); + } + + #[test] + #[should_panic(expected = "Datagram data cannot be empty")] + fn from_bytes_empty() { + let _d = Datagram::from_bytes(DEFAULT_ADDR, DEFAULT_ADDR, Ecn::Ect0.into(), vec![].into()); } #[test] @@ -290,19 +319,19 @@ mod tests { let tos = Tos::default(); // 10 bytes, segment size 4 -> 3 datagrams (4+4+2) - let batch = DatagramBatch::new(src, dst, tos, 4, vec![0u8; 10]); + let batch = DatagramBatch::new(src, dst, tos, NonZeroUsize::new(4).unwrap(), vec![0u8; 10]); assert_eq!(batch.num_datagrams(), 3); // 8 bytes, segment size 4 -> 2 datagrams (4+4) - let batch = DatagramBatch::new(src, dst, tos, 4, vec![0u8; 8]); + let batch = DatagramBatch::new(src, dst, tos, NonZeroUsize::new(4).unwrap(), vec![0u8; 8]); assert_eq!(batch.num_datagrams(), 2); // 5 bytes, segment size 5 -> 1 datagram - let batch = DatagramBatch::new(src, dst, tos, 5, vec![0u8; 5]); + let batch = DatagramBatch::new(src, dst, tos, NonZeroUsize::new(5).unwrap(), vec![0u8; 5]); assert_eq!(batch.num_datagrams(), 1); // 6 bytes, segment size 5 -> 2 datagrams (5+1) - let batch = DatagramBatch::new(src, dst, tos, 5, vec![0u8; 6]); + let batch = DatagramBatch::new(src, dst, tos, NonZeroUsize::new(5).unwrap(), vec![0u8; 6]); assert_eq!(batch.num_datagrams(), 2); } @@ -312,7 +341,7 @@ mod tests { SocketAddr::new(IpAddr::V6(Ipv6Addr::LOCALHOST), 1234), SocketAddr::new(IpAddr::V6(Ipv6Addr::LOCALHOST), 5678), Tos::default(), - 4, + NonZeroUsize::new(4).unwrap(), vec![0u8; 10], ); batch.set_tos(Ecn::Ce.into()); @@ -324,7 +353,13 @@ mod tests { let src = SocketAddr::new(IpAddr::V6(Ipv6Addr::LOCALHOST), 1234); let dst = SocketAddr::new(IpAddr::V6(Ipv6Addr::LOCALHOST), 5678); let tos = Tos::default(); - let batch = DatagramBatch::new(src, dst, tos, 4, vec![1, 2, 3, 4, 5, 6, 7, 8, 9]); + let batch = DatagramBatch::new( + src, + dst, + tos, + NonZeroUsize::new(4).unwrap(), + vec![1, 2, 3, 4, 5, 6, 7, 8, 9], + ); let datagrams: Vec<_> = batch.iter().collect(); assert_eq!(datagrams.len(), 3); assert_eq!(datagrams[0].d, &[1, 2, 3, 4]); @@ -343,7 +378,13 @@ mod tests { let src = SocketAddr::new(IpAddr::V6(Ipv6Addr::LOCALHOST), 1234); let dst = SocketAddr::new(IpAddr::V6(Ipv6Addr::LOCALHOST), 5678); let tos = Tos::default(); - let mut batch = DatagramBatch::new(src, dst, tos, 3, vec![10, 20, 30, 40, 50, 60, 70]); + let mut batch = DatagramBatch::new( + src, + dst, + tos, + NonZeroUsize::new(3).unwrap(), + vec![10, 20, 30, 40, 50, 60, 70], + ); for datagram in batch.iter_mut() { assert_eq!(datagram.source(), src); assert_eq!(datagram.destination(), dst); diff --git a/third_party/rust/neqo-crypto/.cargo-checksum.json b/third_party/rust/neqo-crypto/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"d3fd943b240ab7c2514f82362cc972619bbc5f03787ee5430ee02d7582a7f9d3","bindings/bindings.toml":"edffd81bae5081805f92fd527fd1fb474abf07a96c7b1536629ed0b2a328b638","bindings/nspr_err.h":"2d5205d017b536c2d838bcf9bc4ec79f96dd50e7bb9b73892328781f1ee6629d","bindings/nspr_error.h":"e41c03c77b8c22046f8618832c9569fbcc7b26d8b9bbc35eea7168f35e346889","bindings/nspr_io.h":"085b289849ef0e77f88512a27b4d9bdc28252bd4d39c6a17303204e46ef45f72","bindings/nspr_time.h":"2e637fd338a5cf0fd3fb0070a47f474a34c2a7f4447f31b6875f5a9928d0a261","bindings/nss_ciphers.h":"95ec6344a607558b3c5ba8510f463b6295f3a2fb3f538a01410531045a5f62d1","bindings/nss_init.h":"ef49045063782fb612aff459172cc6a89340f15005808608ade5320ca9974310","bindings/nss_p11.h":"0b81e64fe6db49b2ecff94edd850be111ef99ec11220e88ceb1c67be90143a78","bindings/nss_secerr.h":"713e8368bdae5159af7893cfa517dabfe5103cede051dee9c9557c850a2defc6","bindings/nss_ssl.h":"af222fb957b989e392e762fa2125c82608a0053aff4fb97e556691646c88c335","bindings/nss_sslerr.h":"24b97f092183d8486f774cdaef5030d0249221c78343570d83a4ee5b594210ae","bindings/nss_sslopt.h":"b7807eb7abdad14db6ad7bc51048a46b065a0ea65a4508c95a12ce90e59d1eea","build.rs":"7b121a109b0c2e32ecb04768d6d6d2f8a04a081aaafce765c4632253239ce44a","min_version.txt":"0f9ddf9ddaeb5137a5ab3d238d06286822f9579b1f46ba76312a8c6d76176500","src/aead.rs":"7f627f7dcb08444891b4898a8ab8c0bc4984c035212572547323046ec46e4bb1","src/aead_null.rs":"e8946edbff657763885dd52ccc5516726f316286b6e0c84671458d02a3c7e44a","src/agent.rs":"69e2d99c47c12bf24d4659e723fb85096d6286d134ced65054c40631e88c7c0c","src/agentio.rs":"eb13376f2aed4b0b822784d43d341709b3a33f6ba52560ff48ca3e339d1e86da","src/auth.rs":"bbba836237b0c5d079f1348a96bc46b5bb6fb3cd34ca568581c9f7f8800444d1","src/cert.rs":"afecc277b918e9123d6099fc2b7f5a4ef58c9c3c1b3ca9d4790bda0a46665fe3","src/constants.rs":"83606aeb646b2833a8094f9d980c266ecc3e8cb40c93a4820da221988319dd1a","src/ech.rs":"cf6670ce7ceaaa67c8b0f93b5063cf4a0b92a0b176bbbb664b0a58f1b922b710","src/err.rs":"40658d015ac45cdd29b3bc34540c93b80a20baf5d470e0c59754fc45ce6af204","src/exp.rs":"70549c53ce8df99d62d3343697abd2a177d67ff56703a3d26048bdcdc8b87a0d","src/ext.rs":"7082cd7b44ba97275a8aefe0c31c2419d750f9621486c9c017864c82a7580423","src/hkdf.rs":"76c5abc8b2d6ee12d8a86cd730af2cf47a59b2fbfd3b8a635a1826636156794d","src/hp.rs":"04a461676c02d308f1f851b975846f83daa50ee08de9e573b4136ce4d54b4473","src/lib.rs":"42bdd28c9cd22178e2a0ab1736a0ea49cb240c78cc924d26296086d469a1f2fe","src/min_version.rs":"c6e1f98b9f56db0622ac38c1be131c55acf4a0f09ed0d6283f4d6308e2d1301a","src/p11.rs":"dda7025c61987caffbb9acd38c3e4169a45692a96c3f23025612a4ef4a035157","src/prio.rs":"1858088afd2668e8fbff56959765b7d4df09342371b9282ade27bb4d7bd6ce69","src/replay.rs":"7bf84ce1964658e69d81a810f3b8d71d36d5a7fc336d83c04fb585a6a98e6d33","src/result.rs":"27067d9aba61e8162fb92bca03f9a462cf4fe2f0a259d52696b63e1f6a959a5c","src/secrets.rs":"b021c91b9c1b63373474c39e817a7d9083681be13b5466c4d2b776db9a65b9f8","src/selfencrypt.rs":"2cdca9ec879057ef76bbef168fea0750c34eeaea8dd370e8c192469b377168ad","src/ssl.rs":"49f4339e665959bd3a0fbd0e192611928fdeab986c4f539a4be2ab9cb6d60b8b","src/time.rs":"c4c9987bfe273f19a2f5ef09920ccfe384ab1c1eaf2b2281eb4b02aa8d3b9970","tests/aead.rs":"2e99fba2f155aa8442709c4847f171f0cdfc179b2a7cd2afd853b550d02f7792","tests/agent.rs":"81266b780a40f1d8d31edbe1f43a37fd641f2cb44f75365c67b068c0d3442bb3","tests/ext.rs":"40e3bb0e5ea00fe411cfaf1a006fd4b11a22503f66d3738423361a8b7f80fe13","tests/handshake.rs":"7c6dbdf1b2ae74d15f0a3242d9969abf04ea9839eddcf1aae73379142f33a433","tests/hkdf.rs":"1d2098dc8398395864baf13e4886cfd1da6d36118727c3b264f457ee3da6b048","tests/hp.rs":"dab2631fb5a4f47227e05f508eaca4b4aa225bafced60e703e6fd1c329ac6ab1","tests/init.rs":"3cfe8411ca31ad7dfb23822bb1570e1a5b2b334857173bdd7df086b65b81d95a","tests/selfencrypt.rs":"2e0b548fc84f388b0b2367fb8d9e3e0bd25c4814a1e997b13b7849a54a529703"},"package":null} -\ No newline at end of file +{"files":{"Cargo.toml":"cb62a951b24da13ea265aeb73a74066c71e2464f2e153805ed4a28280784c84d","bindings/bindings.toml":"edffd81bae5081805f92fd527fd1fb474abf07a96c7b1536629ed0b2a328b638","bindings/nspr_err.h":"2d5205d017b536c2d838bcf9bc4ec79f96dd50e7bb9b73892328781f1ee6629d","bindings/nspr_error.h":"e41c03c77b8c22046f8618832c9569fbcc7b26d8b9bbc35eea7168f35e346889","bindings/nspr_io.h":"085b289849ef0e77f88512a27b4d9bdc28252bd4d39c6a17303204e46ef45f72","bindings/nspr_time.h":"2e637fd338a5cf0fd3fb0070a47f474a34c2a7f4447f31b6875f5a9928d0a261","bindings/nss_ciphers.h":"95ec6344a607558b3c5ba8510f463b6295f3a2fb3f538a01410531045a5f62d1","bindings/nss_init.h":"ef49045063782fb612aff459172cc6a89340f15005808608ade5320ca9974310","bindings/nss_p11.h":"0b81e64fe6db49b2ecff94edd850be111ef99ec11220e88ceb1c67be90143a78","bindings/nss_secerr.h":"713e8368bdae5159af7893cfa517dabfe5103cede051dee9c9557c850a2defc6","bindings/nss_ssl.h":"af222fb957b989e392e762fa2125c82608a0053aff4fb97e556691646c88c335","bindings/nss_sslerr.h":"24b97f092183d8486f774cdaef5030d0249221c78343570d83a4ee5b594210ae","bindings/nss_sslopt.h":"b7807eb7abdad14db6ad7bc51048a46b065a0ea65a4508c95a12ce90e59d1eea","build.rs":"7b121a109b0c2e32ecb04768d6d6d2f8a04a081aaafce765c4632253239ce44a","min_version.txt":"0f9ddf9ddaeb5137a5ab3d238d06286822f9579b1f46ba76312a8c6d76176500","src/aead.rs":"7f627f7dcb08444891b4898a8ab8c0bc4984c035212572547323046ec46e4bb1","src/aead_null.rs":"e8946edbff657763885dd52ccc5516726f316286b6e0c84671458d02a3c7e44a","src/agent.rs":"69e2d99c47c12bf24d4659e723fb85096d6286d134ced65054c40631e88c7c0c","src/agentio.rs":"eb13376f2aed4b0b822784d43d341709b3a33f6ba52560ff48ca3e339d1e86da","src/auth.rs":"bbba836237b0c5d079f1348a96bc46b5bb6fb3cd34ca568581c9f7f8800444d1","src/cert.rs":"afecc277b918e9123d6099fc2b7f5a4ef58c9c3c1b3ca9d4790bda0a46665fe3","src/constants.rs":"83606aeb646b2833a8094f9d980c266ecc3e8cb40c93a4820da221988319dd1a","src/ech.rs":"cf6670ce7ceaaa67c8b0f93b5063cf4a0b92a0b176bbbb664b0a58f1b922b710","src/err.rs":"40658d015ac45cdd29b3bc34540c93b80a20baf5d470e0c59754fc45ce6af204","src/exp.rs":"70549c53ce8df99d62d3343697abd2a177d67ff56703a3d26048bdcdc8b87a0d","src/ext.rs":"7082cd7b44ba97275a8aefe0c31c2419d750f9621486c9c017864c82a7580423","src/hkdf.rs":"76c5abc8b2d6ee12d8a86cd730af2cf47a59b2fbfd3b8a635a1826636156794d","src/hp.rs":"04a461676c02d308f1f851b975846f83daa50ee08de9e573b4136ce4d54b4473","src/lib.rs":"42bdd28c9cd22178e2a0ab1736a0ea49cb240c78cc924d26296086d469a1f2fe","src/min_version.rs":"c6e1f98b9f56db0622ac38c1be131c55acf4a0f09ed0d6283f4d6308e2d1301a","src/p11.rs":"dda7025c61987caffbb9acd38c3e4169a45692a96c3f23025612a4ef4a035157","src/prio.rs":"1858088afd2668e8fbff56959765b7d4df09342371b9282ade27bb4d7bd6ce69","src/replay.rs":"7bf84ce1964658e69d81a810f3b8d71d36d5a7fc336d83c04fb585a6a98e6d33","src/result.rs":"27067d9aba61e8162fb92bca03f9a462cf4fe2f0a259d52696b63e1f6a959a5c","src/secrets.rs":"b021c91b9c1b63373474c39e817a7d9083681be13b5466c4d2b776db9a65b9f8","src/selfencrypt.rs":"2cdca9ec879057ef76bbef168fea0750c34eeaea8dd370e8c192469b377168ad","src/ssl.rs":"49f4339e665959bd3a0fbd0e192611928fdeab986c4f539a4be2ab9cb6d60b8b","src/time.rs":"c4c9987bfe273f19a2f5ef09920ccfe384ab1c1eaf2b2281eb4b02aa8d3b9970","tests/aead.rs":"2e99fba2f155aa8442709c4847f171f0cdfc179b2a7cd2afd853b550d02f7792","tests/agent.rs":"81266b780a40f1d8d31edbe1f43a37fd641f2cb44f75365c67b068c0d3442bb3","tests/ext.rs":"40e3bb0e5ea00fe411cfaf1a006fd4b11a22503f66d3738423361a8b7f80fe13","tests/handshake.rs":"7c6dbdf1b2ae74d15f0a3242d9969abf04ea9839eddcf1aae73379142f33a433","tests/hkdf.rs":"1d2098dc8398395864baf13e4886cfd1da6d36118727c3b264f457ee3da6b048","tests/hp.rs":"dab2631fb5a4f47227e05f508eaca4b4aa225bafced60e703e6fd1c329ac6ab1","tests/init.rs":"3cfe8411ca31ad7dfb23822bb1570e1a5b2b334857173bdd7df086b65b81d95a","tests/selfencrypt.rs":"2e0b548fc84f388b0b2367fb8d9e3e0bd25c4814a1e997b13b7849a54a529703"},"package":null} +\ No newline at end of file diff --git a/third_party/rust/neqo-crypto/Cargo.toml b/third_party/rust/neqo-crypto/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" rust-version = "1.81.0" name = "neqo-crypto" -version = "0.17.0" +version = "0.18.0" authors = ["The Neqo Authors <necko@mozilla.com>"] build = "build.rs" autolib = false diff --git a/third_party/rust/neqo-http3/.cargo-checksum.json b/third_party/rust/neqo-http3/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"4abb2ce74071147cd1486ffc673d1c99a8928eef3c6ff65b38154c16f2d08cce","benches/streams.rs":"99109260f4fbca61b4ac624a4162ba305f476f4fa8de7c3c4a54edf0935f3125","src/buffered_send_stream.rs":"3eb0520b3a207597d6e7e232df8a7fc2c7bce65997af5bf92dbac2f6350d06ca","src/client_events.rs":"6e4b5a3e3a7038ca8a1cae33bf6e050f402c1e415cd53670058d6d99ae9e1b26","src/conn_params.rs":"3994bc99dc2ef77c01cc37e59b7ca91c463b228603958612497313251021a9fa","src/connection.rs":"3a61818868f518e66044b8840c6d7a0bb71236e757f36f8a6e5b1bc3af85e52d","src/connection_client.rs":"8a3be6b03f0496ddf4d6c9d9b7532ca0f141acb09decf583ad06937dbfa3d52b","src/connection_server.rs":"7c49dd96095770258e281a680e1c34af3e1eb46510d0a0b15013de626076bd8b","src/control_stream_local.rs":"df0f7b272897f30dd2fcec9d13895cb8e8b1b453a96e8983fef05a8c878e7bc1","src/control_stream_remote.rs":"652e2bfcc3e020f7a9f4e3a107557e291757a7fc2e30cf9fe95c966d2be8c122","src/features/extended_connect/connect_udp_session.rs":"4a72424b06972f0ef265f33ad93cb008af16746a700c56bca4d95099a8dab26c","src/features/extended_connect/mod.rs":"edb2e04806052a899adb316b06596f1d23a40c8fa847dd2d931bc40332b505b2","src/features/extended_connect/session.rs":"36f3af4b38a18198aacdf81e4dd3d99c98abdfe900211ac3a991083d097be70b","src/features/extended_connect/tests/mod.rs":"fd6aee37243713e80fc526552f21f0222338cec9890409b6575a2a637b17ec1f","src/features/extended_connect/tests/webtransport/datagrams.rs":"16a69b41aaada5339b85153b7194d2c1e9151ce9f25b29e02b0f24bb9500b331","src/features/extended_connect/tests/webtransport/mod.rs":"235101fed8d5c3fddd3e797f724c3013752e02462733f12298d7c9a82f666e3b","src/features/extended_connect/tests/webtransport/negotiation.rs":"b0083f8737bdea9bc0de1940c627d497fee8b79ebc218bbcea0a562ae530527f","src/features/extended_connect/tests/webtransport/sessions.rs":"7bd9fdf099cbe794ed438dc3c85f254c975e319ed2d984214c6a0c29829136d5","src/features/extended_connect/tests/webtransport/streams.rs":"e84374071268ecec302bc1c3e825bc2b7219dc11a7b88043061565f256c48542","src/features/extended_connect/webtransport_session.rs":"de19ee1daa77e83ad7ac3b858602967dcad01acca55cf6de59cc650664fa2423","src/features/extended_connect/webtransport_streams.rs":"4704ab559df3c0dad0602cd887d4cb13a17d812bf2005202ed57bfd4a8f96f8b","src/features/mod.rs":"7424e5f1939324953ed6acce76c5774f2bdfae3d1dfbdd938a4eded8a94d5c9e","src/frames/connect_udp_frame.rs":"112a8b1f848b7f0b1fc0d54aaf3e35560cd54e1ffdc1f1bc01028d798fbd45df","src/frames/hframe.rs":"8fb1e83571df12860e05b47d3e59e4c7815da56186ce6c52fb7a11c58012c513","src/frames/mod.rs":"109b49747bcb9676e8186adc770388abc3c32181430479197172ff8ca6f572b7","src/frames/reader.rs":"468a2f3199b22feda9f8ae937d17c99c89123beb0f7e48b9bb1950e8a61e34b6","src/frames/tests/hframe.rs":"43a7735fc859692633e7f3c031710a9fb635611756cb4b9f387bac0a38c0fa09","src/frames/tests/mod.rs":"3ee262c649cd0ea0120da78943dfcab5b9a08064f433076d70ac399ccf489325","src/frames/tests/reader.rs":"060e2a746fc8bb473da6dca68108048ee428d19b1502ed6c819f5969363f9281","src/frames/tests/wtframe.rs":"c6598d24f5e12972f02de6e1394362671633982db637a07e1c0bb9b56d93ea2a","src/frames/wtframe.rs":"1d6dd2d1270346992cacd72e458bc7c5fe13ba7760d360287842d7e63493fdfe","src/headers_checks.rs":"1ea31e81a501d08f6efdd9ee34a290215166af43c82c6eedb89077ab58672808","src/lib.rs":"814e61abffe9d32c88ed5d63941970bcb6802b02a7b64742aa6d0fe4a7523ae9","src/priority.rs":"5fa28fe1a235c4ffb0ab9a4506e979d7bd1a7d0136f2d525ca083bb81733db96","src/push_controller.rs":"cd05db6143b39b8913ca871bbcd00bb43271b9c9dd8ef53610313b929bbae80a","src/push_id.rs":"bf931466d0490cbe8977cd7a732d1d4970e16220f331899f5e7dab8873ece5de","src/qlog.rs":"9ae732d611f74b99fee124faed5d883ec130b1bd991c4af38608bc5bff274cc6","src/qpack_decoder_receiver.rs":"6f6ce0cf5946688f9811bc09ea69a6c02d7b173ba3a64cac31b4daa970f3004b","src/qpack_encoder_receiver.rs":"db30ea43d4cdb5f0fde2dc49e7d8b8ba12e38acbcb8b4417fe68d2551cefa2ea","src/recv_message.rs":"d008459fc7e75b39f23ef63c5c88bd194c784fbc8902e6dd66bb5439f77fcfe4","src/request_target.rs":"01f05026ea7ad47085ffe462df08401ccd162737e3b7a995e8dece31dd46ada6","src/send_message.rs":"916d93bcf4b38f68ea5fb5dfaea7555aa43a82f946124c85423caf67f74ee3b5","src/server.rs":"3448df84f6af734356e81f5896d2501a399195c85246884499ef3452fc23f68d","src/server_connection_events.rs":"22de5284446d663940d97bbcffb031ea616d6125680eaee8b5bf49b1280e1b26","src/server_events.rs":"8814a8ea3cb68218d05903eb64da7dea1fa5a7f4932ef887daae956b45a9d041","src/settings.rs":"88616d45069d942e08fe0a8ea0e52d5eff7f91998df67aa12d9484bb6f50ec5d","src/stream_type_reader.rs":"5ac672dc9d1faa2781b718016732d2bd9c7d8850989fc2756ae32c9bf29ee186","tests/classic_connect.rs":"bdbc3dece193778f30e8a4df2492eb0efc3ac066ffb18b1d5cb96671dc45da82","tests/connect_udp.rs":"9c45bd7dc96201b42b4fe2bfd6c394d10a599f2162104898d639d7920be2004d","tests/httpconn.rs":"bbf72898d2b06ded382fd5f48e1d48a2f6724a44d752929980910a6ce844b0b6","tests/priority.rs":"b641c791e95e21713697c511a0f15d69ee141f017e1ffc7d9b46caa5ed47737c","tests/send_message.rs":"eabb424f1d068e84c5d53a8e0c04a019720e4ac6e969c175de7d8aba3dbd6ae5","tests/webtransport.rs":"b503cce443ec5212c79ed273b31eee7bf01bfd81ab41c9ac99f3846ad54bcfec"},"package":null} -\ No newline at end of file +{"files":{"Cargo.toml":"c622a836613a865409f5786464dd0e45dab98460a7231f2915253c16d993fca6","benches/streams.rs":"99109260f4fbca61b4ac624a4162ba305f476f4fa8de7c3c4a54edf0935f3125","src/buffered_send_stream.rs":"3eb0520b3a207597d6e7e232df8a7fc2c7bce65997af5bf92dbac2f6350d06ca","src/client_events.rs":"6e4b5a3e3a7038ca8a1cae33bf6e050f402c1e415cd53670058d6d99ae9e1b26","src/conn_params.rs":"3994bc99dc2ef77c01cc37e59b7ca91c463b228603958612497313251021a9fa","src/connection.rs":"3a61818868f518e66044b8840c6d7a0bb71236e757f36f8a6e5b1bc3af85e52d","src/connection_client.rs":"8a3be6b03f0496ddf4d6c9d9b7532ca0f141acb09decf583ad06937dbfa3d52b","src/connection_server.rs":"7c49dd96095770258e281a680e1c34af3e1eb46510d0a0b15013de626076bd8b","src/control_stream_local.rs":"df0f7b272897f30dd2fcec9d13895cb8e8b1b453a96e8983fef05a8c878e7bc1","src/control_stream_remote.rs":"652e2bfcc3e020f7a9f4e3a107557e291757a7fc2e30cf9fe95c966d2be8c122","src/features/extended_connect/connect_udp_session.rs":"4a72424b06972f0ef265f33ad93cb008af16746a700c56bca4d95099a8dab26c","src/features/extended_connect/mod.rs":"edb2e04806052a899adb316b06596f1d23a40c8fa847dd2d931bc40332b505b2","src/features/extended_connect/session.rs":"36f3af4b38a18198aacdf81e4dd3d99c98abdfe900211ac3a991083d097be70b","src/features/extended_connect/tests/mod.rs":"fd6aee37243713e80fc526552f21f0222338cec9890409b6575a2a637b17ec1f","src/features/extended_connect/tests/webtransport/datagrams.rs":"16a69b41aaada5339b85153b7194d2c1e9151ce9f25b29e02b0f24bb9500b331","src/features/extended_connect/tests/webtransport/mod.rs":"235101fed8d5c3fddd3e797f724c3013752e02462733f12298d7c9a82f666e3b","src/features/extended_connect/tests/webtransport/negotiation.rs":"b0083f8737bdea9bc0de1940c627d497fee8b79ebc218bbcea0a562ae530527f","src/features/extended_connect/tests/webtransport/sessions.rs":"7bd9fdf099cbe794ed438dc3c85f254c975e319ed2d984214c6a0c29829136d5","src/features/extended_connect/tests/webtransport/streams.rs":"e84374071268ecec302bc1c3e825bc2b7219dc11a7b88043061565f256c48542","src/features/extended_connect/webtransport_session.rs":"de19ee1daa77e83ad7ac3b858602967dcad01acca55cf6de59cc650664fa2423","src/features/extended_connect/webtransport_streams.rs":"4704ab559df3c0dad0602cd887d4cb13a17d812bf2005202ed57bfd4a8f96f8b","src/features/mod.rs":"7424e5f1939324953ed6acce76c5774f2bdfae3d1dfbdd938a4eded8a94d5c9e","src/frames/connect_udp_frame.rs":"112a8b1f848b7f0b1fc0d54aaf3e35560cd54e1ffdc1f1bc01028d798fbd45df","src/frames/hframe.rs":"8fb1e83571df12860e05b47d3e59e4c7815da56186ce6c52fb7a11c58012c513","src/frames/mod.rs":"109b49747bcb9676e8186adc770388abc3c32181430479197172ff8ca6f572b7","src/frames/reader.rs":"468a2f3199b22feda9f8ae937d17c99c89123beb0f7e48b9bb1950e8a61e34b6","src/frames/tests/hframe.rs":"43a7735fc859692633e7f3c031710a9fb635611756cb4b9f387bac0a38c0fa09","src/frames/tests/mod.rs":"3ee262c649cd0ea0120da78943dfcab5b9a08064f433076d70ac399ccf489325","src/frames/tests/reader.rs":"060e2a746fc8bb473da6dca68108048ee428d19b1502ed6c819f5969363f9281","src/frames/tests/wtframe.rs":"c6598d24f5e12972f02de6e1394362671633982db637a07e1c0bb9b56d93ea2a","src/frames/wtframe.rs":"1d6dd2d1270346992cacd72e458bc7c5fe13ba7760d360287842d7e63493fdfe","src/headers_checks.rs":"1ea31e81a501d08f6efdd9ee34a290215166af43c82c6eedb89077ab58672808","src/lib.rs":"814e61abffe9d32c88ed5d63941970bcb6802b02a7b64742aa6d0fe4a7523ae9","src/priority.rs":"5fa28fe1a235c4ffb0ab9a4506e979d7bd1a7d0136f2d525ca083bb81733db96","src/push_controller.rs":"cd05db6143b39b8913ca871bbcd00bb43271b9c9dd8ef53610313b929bbae80a","src/push_id.rs":"bf931466d0490cbe8977cd7a732d1d4970e16220f331899f5e7dab8873ece5de","src/qlog.rs":"9ae732d611f74b99fee124faed5d883ec130b1bd991c4af38608bc5bff274cc6","src/qpack_decoder_receiver.rs":"6f6ce0cf5946688f9811bc09ea69a6c02d7b173ba3a64cac31b4daa970f3004b","src/qpack_encoder_receiver.rs":"db30ea43d4cdb5f0fde2dc49e7d8b8ba12e38acbcb8b4417fe68d2551cefa2ea","src/recv_message.rs":"d008459fc7e75b39f23ef63c5c88bd194c784fbc8902e6dd66bb5439f77fcfe4","src/request_target.rs":"01f05026ea7ad47085ffe462df08401ccd162737e3b7a995e8dece31dd46ada6","src/send_message.rs":"916d93bcf4b38f68ea5fb5dfaea7555aa43a82f946124c85423caf67f74ee3b5","src/server.rs":"3448df84f6af734356e81f5896d2501a399195c85246884499ef3452fc23f68d","src/server_connection_events.rs":"22de5284446d663940d97bbcffb031ea616d6125680eaee8b5bf49b1280e1b26","src/server_events.rs":"8814a8ea3cb68218d05903eb64da7dea1fa5a7f4932ef887daae956b45a9d041","src/settings.rs":"88616d45069d942e08fe0a8ea0e52d5eff7f91998df67aa12d9484bb6f50ec5d","src/stream_type_reader.rs":"5ac672dc9d1faa2781b718016732d2bd9c7d8850989fc2756ae32c9bf29ee186","tests/classic_connect.rs":"bdbc3dece193778f30e8a4df2492eb0efc3ac066ffb18b1d5cb96671dc45da82","tests/connect_udp.rs":"9c45bd7dc96201b42b4fe2bfd6c394d10a599f2162104898d639d7920be2004d","tests/httpconn.rs":"bbf72898d2b06ded382fd5f48e1d48a2f6724a44d752929980910a6ce844b0b6","tests/priority.rs":"b641c791e95e21713697c511a0f15d69ee141f017e1ffc7d9b46caa5ed47737c","tests/send_message.rs":"eabb424f1d068e84c5d53a8e0c04a019720e4ac6e969c175de7d8aba3dbd6ae5","tests/webtransport.rs":"b503cce443ec5212c79ed273b31eee7bf01bfd81ab41c9ac99f3846ad54bcfec"},"package":null} +\ No newline at end of file diff --git a/third_party/rust/neqo-http3/Cargo.toml b/third_party/rust/neqo-http3/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" rust-version = "1.81.0" name = "neqo-http3" -version = "0.17.0" +version = "0.18.0" authors = ["The Neqo Authors <necko@mozilla.com>"] build = false autolib = false diff --git a/third_party/rust/neqo-qpack/.cargo-checksum.json b/third_party/rust/neqo-qpack/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"01d72f086015ac3fad0dd8e9e601551413adac9bea5b91151aa6d73446cd6eb8","src/decoder.rs":"1c5321b14c250bb53dc5435f0cb1b6e3c27029f3bcb149f00e1146702bc1e9ca","src/decoder_instructions.rs":"6b36eea01fdf92088ddac6b6988a239c28ddeb3cc7ecb16abf302f5d1ca8191a","src/encoder.rs":"f3e8002fdf690e820a850013fe288ba9c3279aa0034992a3547e060af8bd4f17","src/encoder_instructions.rs":"1cf1ba5ab2bbfc8f77ecfbc2bc59e40f77e12f85af5c10d0db2652000a8ff102","src/header_block.rs":"6c25b488a72864d8e0ad756af56607020b80bade8e660f701b3271d2e9d4a75f","src/huffman.rs":"c3740084c71580a5270c73cae4b7c5035fae913f533474f4a9cbc39b1f29adb7","src/huffman_decode_helper.rs":"c799b85c7738cdf6a1f6ea039062d2ea5ce0b4f08789d64e90a8712d57040d2b","src/huffman_table.rs":"aaa9ee17b8bceb47877d41fdf12fd29d49662a12db183acdb6b06c6e2ad182d9","src/lib.rs":"7b357e2ac248c392415f19b916373979272c33fa082d9158be4dd1ef5240cc1a","src/prefix.rs":"31bfb11d334a6df619bcc2720621e44a656be2514fad9033531a712d47dbe672","src/qlog.rs":"1ca9bdbc974024b32515af6b6529f5a69e80eae3f7d74445af304dc341a0eda1","src/qpack_send_buf.rs":"cec9b34cc0f2cd3a38eb15111c5f0418e31875d3ee20ecc1ed14f076da80979d","src/reader.rs":"6d698e21260d94c742b929c4112151b2ef6f2250f13564586e0ca0b9082115b5","src/static_table.rs":"6e5ec26e2b6bd63375d2d77e72748151d430d1629a8e497ec0d0ea21c078524a","src/stats.rs":"cb01723249f60e15a5cd7efd9cbab409fddc588d1df655ed06ba8c80e3d5d28e","src/table.rs":"f19b3016bffee54f8e3f52034e2eb36fc8f83a04b203074a8d4cec65367d3c32"},"package":null} -\ No newline at end of file +{"files":{"Cargo.toml":"8c35ea662ab6be4f72bb6d7e1c6e4a22611736ff9e95b4f765b5c9fc7f7046b5","src/decoder.rs":"1c5321b14c250bb53dc5435f0cb1b6e3c27029f3bcb149f00e1146702bc1e9ca","src/decoder_instructions.rs":"6b36eea01fdf92088ddac6b6988a239c28ddeb3cc7ecb16abf302f5d1ca8191a","src/encoder.rs":"f3e8002fdf690e820a850013fe288ba9c3279aa0034992a3547e060af8bd4f17","src/encoder_instructions.rs":"1cf1ba5ab2bbfc8f77ecfbc2bc59e40f77e12f85af5c10d0db2652000a8ff102","src/header_block.rs":"6c25b488a72864d8e0ad756af56607020b80bade8e660f701b3271d2e9d4a75f","src/huffman.rs":"c3740084c71580a5270c73cae4b7c5035fae913f533474f4a9cbc39b1f29adb7","src/huffman_decode_helper.rs":"c799b85c7738cdf6a1f6ea039062d2ea5ce0b4f08789d64e90a8712d57040d2b","src/huffman_table.rs":"aaa9ee17b8bceb47877d41fdf12fd29d49662a12db183acdb6b06c6e2ad182d9","src/lib.rs":"7b357e2ac248c392415f19b916373979272c33fa082d9158be4dd1ef5240cc1a","src/prefix.rs":"31bfb11d334a6df619bcc2720621e44a656be2514fad9033531a712d47dbe672","src/qlog.rs":"1ca9bdbc974024b32515af6b6529f5a69e80eae3f7d74445af304dc341a0eda1","src/qpack_send_buf.rs":"cec9b34cc0f2cd3a38eb15111c5f0418e31875d3ee20ecc1ed14f076da80979d","src/reader.rs":"6d698e21260d94c742b929c4112151b2ef6f2250f13564586e0ca0b9082115b5","src/static_table.rs":"6e5ec26e2b6bd63375d2d77e72748151d430d1629a8e497ec0d0ea21c078524a","src/stats.rs":"cb01723249f60e15a5cd7efd9cbab409fddc588d1df655ed06ba8c80e3d5d28e","src/table.rs":"f19b3016bffee54f8e3f52034e2eb36fc8f83a04b203074a8d4cec65367d3c32"},"package":null} +\ No newline at end of file diff --git a/third_party/rust/neqo-qpack/Cargo.toml b/third_party/rust/neqo-qpack/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" rust-version = "1.81.0" name = "neqo-qpack" -version = "0.17.0" +version = "0.18.0" authors = ["The Neqo Authors <necko@mozilla.com>"] build = false autolib = false diff --git a/third_party/rust/neqo-transport/.cargo-checksum.json b/third_party/rust/neqo-transport/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"18d6d094175cae157be8f05543dd2b2d9347d2817894a8596865b1ec0647e333","benches/min_bandwidth.rs":"73f9a222b9eb8edac291d1957df61a516bb9491fa6bd81a4cb5546184b76b94d","benches/range_tracker.rs":"37a921fa4aa6375ff9cb785adde24df537a18ab624afda6478bbf848c58b0e8d","benches/rx_stream_orderer.rs":"a40e50b0f4e28465b1b65ebcf95570a116c2635eea790d4196fb73f1b3977e63","benches/sent_packets.rs":"aa9f67da4cd54bca1f69030ed3359ee0c77b31e07a586d59ece933d11fcc88b3","benches/transfer.rs":"de2c47025256db1d9af3622b52a5232f7c36683605b273db16089d3bd9c28aac","build.rs":"78ec79c93bf13c3a40ceef8bba1ea2eada61c8f2dfc15ea7bf117958d367949c","src/ackrate.rs":"08f7f4777b7ac1ec85afb4c8cd1cab99a39bd2cb023628193e99325c8c0e34e2","src/addr_valid.rs":"1290915bae733962952f8f92300593587dc4372fce3520dedfe05e51e533275a","src/cc/classic_cc.rs":"f34b06504e030225b3c024d4d7c149cd643950326cd7b28ce8a44c53d4a9b961","src/cc/cubic.rs":"d33721578a236c3cad13410b1baac33439f1bab70e826211341ecb19e2976764","src/cc/mod.rs":"af7b073e05769c2dee7a7f1346c4287ed498c9fb276f03eed49a151b86aed20d","src/cc/new_reno.rs":"278e6caa6164e69a30e84f1eb32358d5f4fac05a05addfa129cc6006c1e856c9","src/cc/tests/cubic.rs":"e6121b610a9e18463ae7d38a933db2f1151ce873586fcf4d67ad985e0f2a41ff","src/cc/tests/mod.rs":"017bf402a9a8c71b5c43343677635644babb57a849d81d0affc328b4b4b9cebb","src/cc/tests/new_reno.rs":"34899c87b6175fe9bf8d0f3f9bb1164a0fbab1f9435840f07f56e21ca467762f","src/cid.rs":"caf814af49d25891a9b79e1f97c741fac41d4062c3e923e4b0e0d5ed0d471077","src/connection/idle.rs":"7fffb026530f17604ac41b28c71cf3b3554e6b1958db96436478d9332b65217c","src/connection/mod.rs":"23e9d68604da238427f0b19d0058a00021e6661253d089a17e0077765d565249","src/connection/params.rs":"c15fbdf4ad42487d6a93285529f6fb74d854d338df236ae75ca9b5e4a27f887c","src/connection/state.rs":"76d1bbe9b6230c88ff948b631feefd9b1e556d57fc5e3eee4f2e7e4151278c20","src/connection/test_internal.rs":"25814d143b745c50c67708cd82aeecbc1e6f123e067b69c5021b9ba653c0c6c2","src/connection/tests/ackrate.rs":"4b7325b5798817d971c14f76ca79c1d7f677aee8e579c97623f49eb87727bd6f","src/connection/tests/cc.rs":"7b113bb1713d440a03bf34bcd42b146dd201c2110140650ee1d98b136d7cec48","src/connection/tests/close.rs":"4c266cf15fe2ad2ae3a7ef77e44586ec5cc6c3c79239184fcf32dd67146ec810","src/connection/tests/datagram.rs":"38e76aaf790d9091e0c50fb875458e8702cae904619c37cfff8fda5e4fb04448","src/connection/tests/ecn.rs":"df46cc993abb99d8d7a2187bb80bc5528763929ee1a888db5a0f53069c9d60bd","src/connection/tests/handshake.rs":"aa55e7bfb03fad6b813709a2874d5c92b2d4e5797f25fb671d7d4e898837716e","src/connection/tests/idle.rs":"903c3b45b89df9bd7cefa216e58df09f24e9f6a5b42b6de2762a5b737f7c7632","src/connection/tests/keys.rs":"c3f93b5410d1b402901d8d18bfbf673fd4ca473136ac2777ede61bdd94e7e29c","src/connection/tests/migration.rs":"c8abfd6577662b7b549b004173fb3d2ab2499a1974f576e92c5e124c31ecf754","src/connection/tests/mod.rs":"5613c937845552291d70811120135ea3c57534fcac0d0ca4f3c0402fd0256c84","src/connection/tests/null.rs":"d39d34c895c40ea88bcc137cba43c34386ef9759c6f66f3487ffd41a5099feb8","src/connection/tests/pmtud.rs":"e9ea01eaf021720ebd656e49c94bb7665e624609dd6914cbf8299d71b9a2291f","src/connection/tests/priority.rs":"00fb90881299fb93b9ad628840585852422676a6db0dbeee348a51ea3029456d","src/connection/tests/recovery.rs":"f3d148f48c7d67982fdf6a1f30428efbc39859d2d51c9d0698fbb0e4d350013c","src/connection/tests/resumption.rs":"93ec8439d8cc05df77e21566b06c2948ab7ea4e8c7518228de328bc19a88815b","src/connection/tests/stream.rs":"771296f838e06337bf7e7b29b14fe68c99e31b21dc028da75b2f337c576158d4","src/connection/tests/vn.rs":"a2e69ad687ebc433e849c6dbb125eec25e5ac2a4f3945af94d9ef04034d2b1fb","src/connection/tests/zerortt.rs":"94a5a705283c31f50f68a74c49d4bba4ba2a51d8122d9e50a14a831a902f8578","src/crypto.rs":"9cb60f094f3c8051e1b0048648e19cda3e642592bc813716a55ecfb8216a3d2f","src/ecn.rs":"66411888a79d3fbe7445418cafcc1ad7c1ca2a466341fb8de6240ff2cef25a77","src/events.rs":"17cff113f464cf44d49a6a1f958a6d709252657ac6d6c0bad73ef1fdfc2e061b","src/fc.rs":"fc37c8cb9cf35657810f104b7803b7951633e8d97bc5fbb88749229abac978fd","src/frame.rs":"caad40490f7f12e4b6eed911a7525468bdda74af504deb3c1f6a1414dae1c18b","src/lib.rs":"51b26e65e15e0f1e25db6e2761f8dfc7b0d0100d6b8b0fbf62ea610144abc9a5","src/pace.rs":"e6be7801d2e4ee0c4883716564a3717a3bf14e9782c9fc1470d78ed78c50ead7","src/packet/metadata.rs":"7a3f520af2932e1ba26197df37bcc706293600cf94c7b559a5192a6f05f6b728","src/packet/mod.rs":"d9500d8972e0b9df85e5c834f515812e117c0b2abe915cbed43b5d0b366c3d95","src/packet/retry.rs":"df1c7874ff3d3c478ca95a6c7adcb9b1d988894bf6467cee9afe9607ef0a7a20","src/path.rs":"d1b9c08d82153f7bdc331ee1c8f8642b1938a248dd515eefb42113a65dd4eceb","src/pmtud.rs":"ecbcad8aa2262672271612fa984c183ebbd5a8b859a1fd23fc377656a4eb33b0","src/qlog.rs":"e5a0a93f19959b235dab7f741b088d4a37aabde62b18d54493eac1418bae6321","src/quic_datagrams.rs":"fd2a665f1febc211571cb4505729f1639eb4b76e8f1a0588749c16f2b646fd5e","src/recovery/mod.rs":"25fcbd567d3a8f77cfbcb8ecbcc26a84d2cf4b8ccf85321c8b17a692dad1d1c8","src/recovery/sent.rs":"c84643c5929c3a8db954500fc859054cfc19770c851354152ddfce292d0be28c","src/recovery/token.rs":"667c827df3d321ee61689e6cda78d9c27656525ab2978282754a78b2370a9a2f","src/recv_stream.rs":"019664ee7b77c679a8ce6fb3743b86fb0da66eb9ddd527baba6aaf967c423722","src/rtt.rs":"ab74c7618f1c200c095bb6f9feda5e8e164738de9196561673d0ea52e7117c90","src/saved.rs":"55c0d1c415079138674974a46d8c6ecbcda49ce4070bf0920286b1401c161078","src/send_stream.rs":"941616ce02608d9a9278f07eda8231a9dda3c9e8b2a2c9e6c6c7bcd1531e3f9a","src/sender.rs":"d49b4d014e27b7120e0c3edc3ce43edbc25acea8394cd7cf15e460cf25cde225","src/server.rs":"bda1165f157cfdc4c7b9a02f8e2c32775cdb6a8b2962ee2524ae242869e378e6","src/sni.rs":"34361fd7a19fa7c8b33519ba1bdefc32a2cadec0b9cbcf1073a2e75f0c1730ae","src/stats.rs":"1e7a212af18c86093e6e25a76c806da701a6bb5c42c61d67b0af8a3ddef426da","src/stream_id.rs":"a6a44d6f02967feeed3250dadc658861f20e00373a0f239685776b2fa72a59e4","src/streams.rs":"17bea7b2f899e096f7a72aeafb74349f27cebc655ff6d304226f1006e90fe024","src/tparams.rs":"0c401dc2d825150b804690d64b2b0e75de22026f876af140a6dd3abf5c88f896","src/tracking.rs":"f81786cf0cdbc84e5e4c196e0e575a1a465928160a0c9c0ecd4896213eefbe55","src/version.rs":"76b8d3ec0464a749849280756b5acd243543e8cb43185936802ba552a207aeca","tests/common/mod.rs":"d1f96c024543cab68d09e2847990ffdf83568835c6ac740bf9cb765e7a661e1d","tests/conn_vectors.rs":"0e4a1b92c02b527842c127b789e70f6c4372c2b61b1a59a8e695f744ce155e2a","tests/connection.rs":"db4ef75e8e73e2c67307f9c445c7a89bdf4b048b1b69ab86e0c39d8ffe4280ae","tests/network.rs":"2173d8347543d457a236817d219d2865315dbd005e1d19c2277e3a34d5cca759","tests/retry.rs":"0343ac640ea785655678f8d66ef5ce7c95b8dc584065ae1d606293a0860cb92b","tests/server.rs":"2dc921b4973d6c7875cd52874857526873d4cbcf5ebc2b2a60debcde7791bf4c","tests/sni.rs":"5cf5c6ec0601712596fdfd589eb346af599e45c80849adf31879ba4ba3640f38","tests/stats.rs":"af8c1da46e984b55b172118aff4ad33be2375443f405e297d40981e65eb4d0cf"},"package":null} -\ No newline at end of file +{"files":{"Cargo.toml":"5c87c9bdbc4d2b5cd11644ba50eb0482ec34a76cbf2f544514b684855bc136d6","benches/min_bandwidth.rs":"73f9a222b9eb8edac291d1957df61a516bb9491fa6bd81a4cb5546184b76b94d","benches/range_tracker.rs":"37a921fa4aa6375ff9cb785adde24df537a18ab624afda6478bbf848c58b0e8d","benches/rx_stream_orderer.rs":"a40e50b0f4e28465b1b65ebcf95570a116c2635eea790d4196fb73f1b3977e63","benches/sent_packets.rs":"aa9f67da4cd54bca1f69030ed3359ee0c77b31e07a586d59ece933d11fcc88b3","benches/transfer.rs":"de2c47025256db1d9af3622b52a5232f7c36683605b273db16089d3bd9c28aac","build.rs":"78ec79c93bf13c3a40ceef8bba1ea2eada61c8f2dfc15ea7bf117958d367949c","src/ackrate.rs":"08f7f4777b7ac1ec85afb4c8cd1cab99a39bd2cb023628193e99325c8c0e34e2","src/addr_valid.rs":"1290915bae733962952f8f92300593587dc4372fce3520dedfe05e51e533275a","src/cc/classic_cc.rs":"f34b06504e030225b3c024d4d7c149cd643950326cd7b28ce8a44c53d4a9b961","src/cc/cubic.rs":"d33721578a236c3cad13410b1baac33439f1bab70e826211341ecb19e2976764","src/cc/mod.rs":"af7b073e05769c2dee7a7f1346c4287ed498c9fb276f03eed49a151b86aed20d","src/cc/new_reno.rs":"278e6caa6164e69a30e84f1eb32358d5f4fac05a05addfa129cc6006c1e856c9","src/cc/tests/cubic.rs":"e6121b610a9e18463ae7d38a933db2f1151ce873586fcf4d67ad985e0f2a41ff","src/cc/tests/mod.rs":"017bf402a9a8c71b5c43343677635644babb57a849d81d0affc328b4b4b9cebb","src/cc/tests/new_reno.rs":"34899c87b6175fe9bf8d0f3f9bb1164a0fbab1f9435840f07f56e21ca467762f","src/cid.rs":"caf814af49d25891a9b79e1f97c741fac41d4062c3e923e4b0e0d5ed0d471077","src/connection/idle.rs":"7fffb026530f17604ac41b28c71cf3b3554e6b1958db96436478d9332b65217c","src/connection/mod.rs":"23e9d68604da238427f0b19d0058a00021e6661253d089a17e0077765d565249","src/connection/params.rs":"c15fbdf4ad42487d6a93285529f6fb74d854d338df236ae75ca9b5e4a27f887c","src/connection/state.rs":"76d1bbe9b6230c88ff948b631feefd9b1e556d57fc5e3eee4f2e7e4151278c20","src/connection/test_internal.rs":"25814d143b745c50c67708cd82aeecbc1e6f123e067b69c5021b9ba653c0c6c2","src/connection/tests/ackrate.rs":"4b7325b5798817d971c14f76ca79c1d7f677aee8e579c97623f49eb87727bd6f","src/connection/tests/cc.rs":"7b113bb1713d440a03bf34bcd42b146dd201c2110140650ee1d98b136d7cec48","src/connection/tests/close.rs":"4c266cf15fe2ad2ae3a7ef77e44586ec5cc6c3c79239184fcf32dd67146ec810","src/connection/tests/datagram.rs":"38e76aaf790d9091e0c50fb875458e8702cae904619c37cfff8fda5e4fb04448","src/connection/tests/ecn.rs":"df46cc993abb99d8d7a2187bb80bc5528763929ee1a888db5a0f53069c9d60bd","src/connection/tests/handshake.rs":"aa55e7bfb03fad6b813709a2874d5c92b2d4e5797f25fb671d7d4e898837716e","src/connection/tests/idle.rs":"903c3b45b89df9bd7cefa216e58df09f24e9f6a5b42b6de2762a5b737f7c7632","src/connection/tests/keys.rs":"c3f93b5410d1b402901d8d18bfbf673fd4ca473136ac2777ede61bdd94e7e29c","src/connection/tests/migration.rs":"c8abfd6577662b7b549b004173fb3d2ab2499a1974f576e92c5e124c31ecf754","src/connection/tests/mod.rs":"5613c937845552291d70811120135ea3c57534fcac0d0ca4f3c0402fd0256c84","src/connection/tests/null.rs":"d39d34c895c40ea88bcc137cba43c34386ef9759c6f66f3487ffd41a5099feb8","src/connection/tests/pmtud.rs":"39e9aa38c4d5ecfe8d3040ce268ce33fa63ad87a774f7cad45f5dcc6e43aaf82","src/connection/tests/priority.rs":"00fb90881299fb93b9ad628840585852422676a6db0dbeee348a51ea3029456d","src/connection/tests/recovery.rs":"f3d148f48c7d67982fdf6a1f30428efbc39859d2d51c9d0698fbb0e4d350013c","src/connection/tests/resumption.rs":"93ec8439d8cc05df77e21566b06c2948ab7ea4e8c7518228de328bc19a88815b","src/connection/tests/stream.rs":"771296f838e06337bf7e7b29b14fe68c99e31b21dc028da75b2f337c576158d4","src/connection/tests/vn.rs":"a2e69ad687ebc433e849c6dbb125eec25e5ac2a4f3945af94d9ef04034d2b1fb","src/connection/tests/zerortt.rs":"94a5a705283c31f50f68a74c49d4bba4ba2a51d8122d9e50a14a831a902f8578","src/crypto.rs":"9cb60f094f3c8051e1b0048648e19cda3e642592bc813716a55ecfb8216a3d2f","src/ecn.rs":"66411888a79d3fbe7445418cafcc1ad7c1ca2a466341fb8de6240ff2cef25a77","src/events.rs":"17cff113f464cf44d49a6a1f958a6d709252657ac6d6c0bad73ef1fdfc2e061b","src/fc.rs":"fc37c8cb9cf35657810f104b7803b7951633e8d97bc5fbb88749229abac978fd","src/frame.rs":"caad40490f7f12e4b6eed911a7525468bdda74af504deb3c1f6a1414dae1c18b","src/lib.rs":"51b26e65e15e0f1e25db6e2761f8dfc7b0d0100d6b8b0fbf62ea610144abc9a5","src/pace.rs":"e6be7801d2e4ee0c4883716564a3717a3bf14e9782c9fc1470d78ed78c50ead7","src/packet/metadata.rs":"7a3f520af2932e1ba26197df37bcc706293600cf94c7b559a5192a6f05f6b728","src/packet/mod.rs":"9f023d6611caab33664bd02f580d839dcf4222e61c6d73ce8c4790a01345f6cc","src/packet/retry.rs":"df1c7874ff3d3c478ca95a6c7adcb9b1d988894bf6467cee9afe9607ef0a7a20","src/path.rs":"c9c0534dbf8898390a49d5068abbee8b2395fa95173023ebba1c9e98735ec3fe","src/pmtud.rs":"ecbcad8aa2262672271612fa984c183ebbd5a8b859a1fd23fc377656a4eb33b0","src/qlog.rs":"e5a0a93f19959b235dab7f741b088d4a37aabde62b18d54493eac1418bae6321","src/quic_datagrams.rs":"fd2a665f1febc211571cb4505729f1639eb4b76e8f1a0588749c16f2b646fd5e","src/recovery/mod.rs":"25fcbd567d3a8f77cfbcb8ecbcc26a84d2cf4b8ccf85321c8b17a692dad1d1c8","src/recovery/sent.rs":"c84643c5929c3a8db954500fc859054cfc19770c851354152ddfce292d0be28c","src/recovery/token.rs":"667c827df3d321ee61689e6cda78d9c27656525ab2978282754a78b2370a9a2f","src/recv_stream.rs":"019664ee7b77c679a8ce6fb3743b86fb0da66eb9ddd527baba6aaf967c423722","src/rtt.rs":"ab74c7618f1c200c095bb6f9feda5e8e164738de9196561673d0ea52e7117c90","src/saved.rs":"55c0d1c415079138674974a46d8c6ecbcda49ce4070bf0920286b1401c161078","src/send_stream.rs":"941616ce02608d9a9278f07eda8231a9dda3c9e8b2a2c9e6c6c7bcd1531e3f9a","src/sender.rs":"d49b4d014e27b7120e0c3edc3ce43edbc25acea8394cd7cf15e460cf25cde225","src/server.rs":"bda1165f157cfdc4c7b9a02f8e2c32775cdb6a8b2962ee2524ae242869e378e6","src/sni.rs":"34361fd7a19fa7c8b33519ba1bdefc32a2cadec0b9cbcf1073a2e75f0c1730ae","src/stats.rs":"1e7a212af18c86093e6e25a76c806da701a6bb5c42c61d67b0af8a3ddef426da","src/stream_id.rs":"a6a44d6f02967feeed3250dadc658861f20e00373a0f239685776b2fa72a59e4","src/streams.rs":"17bea7b2f899e096f7a72aeafb74349f27cebc655ff6d304226f1006e90fe024","src/tparams.rs":"0c401dc2d825150b804690d64b2b0e75de22026f876af140a6dd3abf5c88f896","src/tracking.rs":"f81786cf0cdbc84e5e4c196e0e575a1a465928160a0c9c0ecd4896213eefbe55","src/version.rs":"76b8d3ec0464a749849280756b5acd243543e8cb43185936802ba552a207aeca","tests/common/mod.rs":"d1f96c024543cab68d09e2847990ffdf83568835c6ac740bf9cb765e7a661e1d","tests/conn_vectors.rs":"0e4a1b92c02b527842c127b789e70f6c4372c2b61b1a59a8e695f744ce155e2a","tests/connection.rs":"93c1982a6f049f735634ba5cfee6677f919a5f59694b6375e118efb20a69c09f","tests/network.rs":"2173d8347543d457a236817d219d2865315dbd005e1d19c2277e3a34d5cca759","tests/retry.rs":"0343ac640ea785655678f8d66ef5ce7c95b8dc584065ae1d606293a0860cb92b","tests/server.rs":"2dc921b4973d6c7875cd52874857526873d4cbcf5ebc2b2a60debcde7791bf4c","tests/sni.rs":"5cf5c6ec0601712596fdfd589eb346af599e45c80849adf31879ba4ba3640f38","tests/stats.rs":"af8c1da46e984b55b172118aff4ad33be2375443f405e297d40981e65eb4d0cf"},"package":null} +\ No newline at end of file diff --git a/third_party/rust/neqo-transport/Cargo.toml b/third_party/rust/neqo-transport/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" rust-version = "1.81.0" name = "neqo-transport" -version = "0.17.0" +version = "0.18.0" authors = ["The Neqo Authors <necko@mozilla.com>"] build = "build.rs" autolib = false diff --git a/third_party/rust/neqo-transport/src/connection/tests/pmtud.rs b/third_party/rust/neqo-transport/src/connection/tests/pmtud.rs @@ -44,11 +44,11 @@ fn gso_with_max_mtu() { .process_multiple_output(now(), 2.try_into().unwrap()) .dgram() .unwrap(); - if pkts.datagram_size() == 65507 { + if pkts.datagram_size().get() == 65507 { // Success. It reached the maximum IPv4 UDP MTU. break; } - assert!(pkts.datagram_size() < 65507); + assert!(pkts.datagram_size().get() < 65507); server.process_multiple_input(pkts.iter_mut(), now()); let ack = server.process_output(now()).dgram(); diff --git a/third_party/rust/neqo-transport/src/packet/mod.rs b/third_party/rust/neqo-transport/src/packet/mod.rs @@ -42,6 +42,8 @@ const PACKET_HP_MASK_SHORT: u8 = 0x1f; const SAMPLE_SIZE: usize = 16; const SAMPLE_OFFSET: usize = 4; const MAX_PACKET_NUMBER_LEN: usize = 4; +/// The length of a long packet length field. +const LONG_PACKET_LENGTH_LEN: usize = 2; pub mod metadata; mod retry; @@ -383,15 +385,20 @@ impl<B: Buffer> Builder<B> { /// /// This will panic if the packet number length is too large. pub fn pn(&mut self, pn: Number, pn_len: usize) { - if self.remaining() < 4 { + if self.remaining() < MAX_PACKET_NUMBER_LEN { self.limit = 0; return; } // Reserve space for a length in long headers. if self.is_long() { + if self.remaining() < LONG_PACKET_LENGTH_LEN + MAX_PACKET_NUMBER_LEN { + self.limit = 0; + return; + } + self.offsets.len = self.encoder.len(); - self.encoder.encode(&[0; 2]); + self.encoder.encode(&[0; LONG_PACKET_LENGTH_LEN]); } // This allows the input to be >4, which is absurd, but we can eat that. @@ -411,7 +418,7 @@ impl<B: Buffer> Builder<B> { #[expect(clippy::cast_possible_truncation, reason = "AND'ing makes this safe.")] fn write_len(&mut self, expansion: usize) { - let len = self.encoder.len() - (self.offsets.len + 2) + expansion; + let len = self.encoder.len() - (self.offsets.len + LONG_PACKET_LENGTH_LEN) + expansion; self.encoder.as_mut()[self.offsets.len] = 0x40 | ((len >> 8) & 0x3f) as u8; self.encoder.as_mut()[self.offsets.len + 1] = (len & 0xff) as u8; } @@ -421,6 +428,14 @@ impl<B: Buffer> Builder<B> { // The length of the packet number plus the payload length needs to // be at least 4 (MAX_PACKET_NUMBER_LEN) plus any amount by which // the header protection sample exceeds the AEAD expansion. + // + // > To ensure that sufficient data is available for sampling, packets + // > are padded so that the combined lengths of the encoded packet number + // > and protected payload is at least 4 bytes longer than the sample + // > required for header protection. + // + // <https://datatracker.ietf.org/doc/html/rfc9001#section-5.4.2> + let crypto_pad = crypto.extra_padding(); self.encoder.pad_to( self.offsets.pn.start + MAX_PACKET_NUMBER_LEN + crypto_pad, @@ -454,7 +469,12 @@ impl<B: Buffer> Builder<B> { pub fn build(mut self, crypto: &mut CryptoDxState) -> Res<Encoder<B>> { if self.len() > self.limit { qwarn!("Packet contents are more than the limit"); - debug_assert!(false); + debug_assert!( + false, + "Builder length ({}) is larger than limit ({}).", + self.len(), + self.limit + ); return Err(Error::Internal); } @@ -966,7 +986,7 @@ mod tests { Builder, Public, Type, PACKET_BIT_FIXED_QUIC, PACKET_BIT_LONG, PACKET_BIT_SPIN, PACKET_LIMIT, }, - ConnectionId, EmptyConnectionIdGenerator, RandomConnectionIdGenerator, Version, + ConnectionId, EmptyConnectionIdGenerator, Error, RandomConnectionIdGenerator, Version, }; const CLIENT_CID: &[u8] = &[0x83, 0x94, 0xc8, 0xf0, 0x3e, 0x51, 0x57, 0x08]; @@ -1297,6 +1317,78 @@ mod tests { assert_eq!(builder.abort(), encoder_copy); } + /// Given an encoder that already contains some QUIC packet(s), i.e. is + /// filled close to the MTU, attempt to use the remaining insufficient space + /// for another QUIC packet. + /// + /// Details in <https://github.com/mozilla/neqo/issues/3046>. + #[test] + fn build_insufficient_space_for_dummy_length_and_pn() { + const MTU: usize = 1280; + const FIRST_QUIC_PACKET: usize = 1236; + fixture_init(); + let crypto = CryptoDxState::test_default(); + + let mut encoder = Encoder::new(); + encoder.pad_to(FIRST_QUIC_PACKET, 0); + + // Builder::long should add 1 (first byte) + 4 (version) + 2 + // (dcid+scid length) + 8 (dcid) + 8 (scid) = 23 bytes. + let mut builder = Builder::long( + encoder, + Type::Initial, + Version::default(), + Some(SERVER_CID), + Some(CLIENT_CID), + MTU - crypto.expansion(), + ); + assert_eq!(builder.len() - FIRST_QUIC_PACKET, 23); + + // Given the FIRST_QUIC_PACKET and the partial header from + // Builder::long, the builder should have 5 bytes remaining. + assert_eq!(builder.remaining(), 5); + + // Builder::pn needs 2 bytes for the dummy packet length and 4 bytes for + // the maximum packet number, but only 5 bytes remain. The builder + // should now be full and needs to be aborted. + builder.pn(0, 1); + assert!(builder.is_full()); + } + + #[test] + #[cfg_attr( + debug_assertions, + should_panic(expected = "Builder length (30) is larger than limit (20)") + )] + fn build_insufficient_space_error() { + const SMALL_LIMIT: usize = 20; + fixture_init(); + + // Set up a builder with a very small limit + let mut builder = Builder::short( + Encoder::new(), + false, + Some(ConnectionId::from(SERVER_CID)), + SMALL_LIMIT, + ); + builder.pn(0, 1); + + // Add more data than the limit allows. This will exceed the limit when + // combined with header. + let large_payload = vec![0u8; SMALL_LIMIT]; + builder.encode(&large_payload); + + // Verify that the length exceeds the limit. + assert!(builder.is_full()); + + // Building should trigger the debug_assert in debug mode, returning + // internal error in release mode. + assert_eq!( + builder.build(&mut CryptoDxState::test_default()), + Err(Error::Internal) + ); + } + const SAMPLE_RETRY_V2: &[u8] = &[ 0xcf, 0x6b, 0x33, 0x43, 0xcf, 0x00, 0x08, 0xf0, 0x67, 0xa5, 0x50, 0x2a, 0x42, 0x62, 0xb5, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0xc8, 0x64, 0x6c, 0xe8, 0xbf, 0xe3, 0x39, 0x52, 0xd9, 0x55, diff --git a/third_party/rust/neqo-transport/src/path.rs b/third_party/rust/neqo-transport/src/path.rs @@ -8,6 +8,7 @@ use std::{ cell::RefCell, fmt::{self, Display}, net::SocketAddr, + num::NonZeroUsize, rc::Rc, time::{Duration, Instant}, }; @@ -707,7 +708,13 @@ impl Path { // update the ECN state and can hence change it - this packet should still be sent // with the current value. self.ecn_info.on_packet_sent(num_datagrams, stats); - DatagramBatch::new(self.local, self.remote, tos, datagram_size, payload) + DatagramBatch::new( + self.local, + self.remote, + tos, + NonZeroUsize::new(datagram_size).expect("datagram size cannot be zero"), + payload, + ) } /// Get local address as `SocketAddr` diff --git a/third_party/rust/neqo-transport/tests/connection.rs b/third_party/rust/neqo-transport/tests/connection.rs @@ -37,8 +37,8 @@ fn gso() { .dgram() .unwrap(); - assert_eq!(out.datagram_size(), 1232); - assert!(out.data().len() > out.datagram_size()); + assert_eq!(out.datagram_size().get(), 1232); + assert!(out.data().len() > out.datagram_size().get()); } #[test] diff --git a/third_party/rust/neqo-udp/.cargo-checksum.json b/third_party/rust/neqo-udp/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"c44c53983661e7656b23b78b0eb7457f41e610ee3e456c957c137b75e7e882b9","build.rs":"bf57cd35a78f636c14c442c1926abc2deca3d137e9d207e4f2f960f5b8363b07","src/lib.rs":"18a9dafa4372d99ed26e2d8a2fde5060e587150630d8eedba4f5f6d4d9af916e"},"package":null} -\ No newline at end of file +{"files":{"Cargo.toml":"3c1085e0f4bfd691ce7e3af2361b79a88602f742b0f84b4d33b4d33e4aef259c","build.rs":"bf57cd35a78f636c14c442c1926abc2deca3d137e9d207e4f2f960f5b8363b07","src/lib.rs":"bb87c16ab8587eb2e3a68b948de6cc0d36a469194f243bfd6b33fcf31c9e6a2d"},"package":null} +\ No newline at end of file diff --git a/third_party/rust/neqo-udp/Cargo.toml b/third_party/rust/neqo-udp/Cargo.toml @@ -13,7 +13,7 @@ edition = "2021" rust-version = "1.81.0" name = "neqo-udp" -version = "0.17.0" +version = "0.18.0" authors = ["The Neqo Authors <necko@mozilla.com>"] build = "build.rs" autolib = false diff --git a/third_party/rust/neqo-udp/src/lib.rs b/third_party/rust/neqo-udp/src/lib.rs @@ -64,7 +64,7 @@ pub fn send_inner( destination: d.destination(), ecn: EcnCodepoint::from_bits(Into::<u8>::into(d.tos())), contents: d.data(), - segment_size: Some(d.datagram_size()), + segment_size: Some(d.datagram_size().get()), src_ip: None, }; @@ -75,7 +75,7 @@ pub fn send_inner( "Failed to send datagram of size {} bytes, in {} segments, each {} bytes, from {} to {}. PMTUD probe? Ignoring error: {}", d.data().len(), d.num_datagrams(), - d.datagram_size(), + d.datagram_size().get(), d.source(), d.destination(), e @@ -89,7 +89,7 @@ pub fn send_inner( "sent {} bytes, in {} segments, each {} bytes, from {} to {} ", d.data().len(), d.num_datagrams(), - d.datagram_size(), + d.datagram_size().get(), d.source(), d.destination(), ); @@ -356,6 +356,8 @@ mod tests { ignore = "GRO not available" )] fn many_datagrams_through_gso_gro() -> Result<(), io::Error> { + use std::num::NonZeroUsize; + const SEGMENT_SIZE: usize = 128; let sender = socket()?; @@ -368,7 +370,7 @@ mod tests { sender.inner.local_addr()?, receiver.inner.local_addr()?, Tos::from((Dscp::Le, Ecn::Ect0)), - SEGMENT_SIZE, + NonZeroUsize::new(SEGMENT_SIZE).expect("SEGMENT_SIZE cannot be zero"), msg, );