diff --git a/flake.lock b/flake.lock index 2691ab4..a818690 100644 --- a/flake.lock +++ b/flake.lock @@ -37,7 +37,28 @@ "root": { "inputs": { "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "rust-overlay": "rust-overlay" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1766717007, + "narHash": "sha256-ZjLiHCHgoH2maP5ZAKn0anrHymbjGOS5/PZqfJUK8Ik=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "a18efe8a9112175e43397cf870fb6bc1ca480548", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" } }, "systems": { diff --git a/flake.nix b/flake.nix index 3d5210b..253537c 100644 --- a/flake.nix +++ b/flake.nix @@ -4,6 +4,10 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; flake-utils.url = "github:numtide/flake-utils"; + rust-overlay = { + url = "github:oxalica/rust-overlay"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = @@ -11,17 +15,27 @@ self, nixpkgs, flake-utils, + rust-overlay, + ... }: flake-utils.lib.eachDefaultSystem ( system: let - pkgs = import nixpkgs { inherit system; }; + pkgs = import nixpkgs { + inherit system; + overlays = [ (import rust-overlay) ]; + }; + + rust-toolchain = pkgs.rust-bin.stable.latest.default.override { + extensions = [ + "rust-src" + "rust-analyzer" + ]; + targets = [ "wasm32-unknown-unknown" ]; + }; tools = [ - pkgs.rustc - pkgs.cargo - pkgs.rustfmt - pkgs.clippy + rust-toolchain pkgs.cargo-shear pkgs.cargo-sort pkgs.cargo-edit @@ -40,7 +54,9 @@ packages = tools; shellHook = '' - export LD_LIBRARY_PATH=${pkgs.lib.makeLibraryPath [pkgs.llvmPackages.libclang.lib]}:$LD_LIBRARY_PATH + export LD_LIBRARY_PATH=${ + pkgs.lib.makeLibraryPath [ pkgs.llvmPackages.libclang.lib ] + }:$LD_LIBRARY_PATH ''; }; } diff --git a/web-transport-quiche/src/ez/recv.rs b/web-transport-quiche/src/ez/recv.rs index d4692f6..f7c61ce 100644 --- a/web-transport-quiche/src/ez/recv.rs +++ b/web-transport-quiche/src/ez/recv.rs @@ -282,11 +282,11 @@ impl RecvStream { }) .await? { - Some(n) => { + Some(n) if n > 0 => { unsafe { buf.advance_mut(n) }; Ok(Some(n)) } - None => Ok(None), + _ => Ok(None), } } diff --git a/web-transport-trait/src/lib.rs b/web-transport-trait/src/lib.rs index 94bfb09..fe9a5d2 100644 --- a/web-transport-trait/src/lib.rs +++ b/web-transport-trait/src/lib.rs @@ -195,8 +195,8 @@ pub trait RecvStream: MaybeSend { std::mem::transmute::<&mut bytes::buf::UninitSlice, &mut [u8]>(buf.chunk_mut()) }; let size = match self.read(dst).await? { - Some(size) => size, - None => return Ok(None), + Some(size) if size > 0 => size, + _ => return Ok(None), }; unsafe { buf.advance_mut(size) }; @@ -253,8 +253,8 @@ pub trait RecvStream: MaybeSend { let mut size = 0; while buf.has_remaining_mut() { match self.read_buf(buf).await? { - Some(n) => size += n, - None => break, + Some(n) if n > 0 => size += n, + _ => break, } } Ok(size) diff --git a/web-transport-wasm/src/recv.rs b/web-transport-wasm/src/recv.rs index eec4d76..4b1d351 100644 --- a/web-transport-wasm/src/recv.rs +++ b/web-transport-wasm/src/recv.rs @@ -55,8 +55,8 @@ impl RecvStream { /// Advances the buffer by the number of bytes read. pub async fn read_buf(&mut self, buf: &mut B) -> Result, Error> { let chunk = match self.read(buf.remaining_mut()).await? { - Some(chunk) => chunk, - None => return Ok(None), + Some(chunk) if !chunk.is_empty() => chunk, + _ => return Ok(None), }; let size = chunk.len(); diff --git a/web-transport-ws/src/session.rs b/web-transport-ws/src/session.rs index 0fba9a6..0c316e6 100644 --- a/web-transport-ws/src/session.rs +++ b/web-transport-ws/src/session.rs @@ -701,12 +701,12 @@ impl generic::RecvStream for RecvStream { } Ok(match self.read_chunk(buf.remaining_mut()).await? { - Some(data) => { + Some(data) if !data.is_empty() => { let size = data.len(); buf.put(data); Some(size) } - None => None, + _ => None, }) } diff --git a/web-transport/src/quinn.rs b/web-transport/src/quinn.rs index 2207832..33355dd 100644 --- a/web-transport/src/quinn.rs +++ b/web-transport/src/quinn.rs @@ -259,8 +259,8 @@ impl RecvStream { let dst = unsafe { &mut *(dst as *mut _ as *mut [u8]) }; let size = match self.inner.read(dst).await? { - Some(size) => size, - None => return Ok(None), + Some(size) if size > 0 => size, + _ => return Ok(None), }; unsafe { buf.advance_mut(size) };