diff options
author | Igor Matuszewski <igor@sequoia-pgp.org> | 2020-03-17 19:04:41 +0100 |
---|---|---|
committer | Igor Matuszewski <igor@sequoia-pgp.org> | 2020-03-19 14:40:02 +0100 |
commit | b7885aca0468ff14c5910b7ce529368eee1d4a08 (patch) | |
tree | 13b667ecc2fc3764c91c51a810647b1e25719848 /ipc | |
parent | 131e963ac8847a7b50143e732bbb824b44b24c46 (diff) |
ipc: Merge unhappy paths in TCP connection
Diffstat (limited to 'ipc')
-rw-r--r-- | ipc/src/lib.rs | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/ipc/src/lib.rs b/ipc/src/lib.rs index fa44e722..623aa66d 100644 --- a/ipc/src/lib.rs +++ b/ipc/src/lib.rs @@ -150,18 +150,11 @@ impl Descriptor { let mut c = vec![]; file.read_to_end(&mut c)?; - if let Some((cookie, a)) = Cookie::extract(c) { - let addr = match String::from_utf8_lossy(&a).parse::<SocketAddr>() { - Ok(addr) => addr, - Err(..) => { - /* Malformed. Invalidate the cookie and try again. */ - file.set_len(0)?; - drop(file); - return self.connect(handle); - } - }; + if let Some((cookie, rest)) = Cookie::extract(c) { + let stream = String::from_utf8(rest).map_err(drop) + .and_then(|rest| rest.parse::<SocketAddr>().map_err(drop)) + .and_then(|addr| TcpStream::connect(addr).map_err(drop)); - let stream = TcpStream::connect(addr); if let Ok(s) = stream { do_connect(cookie, s) } else { |