Radish alpha
h
Radicle Heartwood Protocol & Stack
Radicle
Git (anonymous pull)
Log in to clone via SSH
node: Make sure to only read packet-line header
Alexis Sellier committed 3 years ago
commit 88c545bfdda8bae8a1ad463730a8ce99b0fc7c37
parent c46bc0cc82472ef615d8c45de0e54da78925da42
1 file changed +11 -1
modified radicle-node/src/worker.rs
@@ -174,7 +174,7 @@ impl<G: Signer + Ecdh + 'static> Worker<G> {
                        log::debug!(target: "worker", "Waiting for `done` packet from remote..");

                        let mut header = [0; pktline::HEADER_LEN];
-
                        if let Ok(pktline::Packetline::Done) = pktline_r.read_pktline(&mut header) {
+
                        if let Ok(()) = pktline_r.read_done_pktline(&mut header) {
                            (WireSession::from_split_io(stream_r, stream_w), Err(err))
                        } else {
                            log::error!(
@@ -460,6 +460,16 @@ pub mod pktline {
            Ok((cmd, Vec::from(&pktline[..length])))
        }

+
        /// Parse a `done` packet-line.
+
        pub fn read_done_pktline(&mut self, buf: &mut [u8]) -> io::Result<()> {
+
            self.read_exact(&mut buf[..HEADER_LEN])?;
+

+
            if &buf[..HEADER_LEN] == DONE_PKT {
+
                return Ok(());
+
            }
+
            Err(io::ErrorKind::InvalidInput.into())
+
        }
+

        /// Parse a Git packet-line.
        pub fn read_pktline(&mut self, buf: &mut [u8]) -> io::Result<Packetline> {
            self.read_exact(&mut buf[..HEADER_LEN])?;