diff options
| author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2019-09-10 06:59:40 +0200 |
|---|---|---|
| committer | Ryan Dahl <ry@tinyclouds.org> | 2019-09-10 00:59:40 -0400 |
| commit | 2a83327a21e83180a21afd428b11aa03e3080346 (patch) | |
| tree | 670ac1ca0644d3b082d1baffc8514ad9d9fe3ef4 /cli/ops | |
| parent | 377966764636350c524b526da50c055243ab3005 (diff) | |
fix: replace bad rid panics with errors (#2870)
Diffstat (limited to 'cli/ops')
| -rw-r--r-- | cli/ops/files.rs | 31 | ||||
| -rw-r--r-- | cli/ops/io.rs | 13 | ||||
| -rw-r--r-- | cli/ops/net.rs | 68 |
3 files changed, 49 insertions, 63 deletions
diff --git a/cli/ops/files.rs b/cli/ops/files.rs index 4afe00fc0..01abff3a9 100644 --- a/cli/ops/files.rs +++ b/cli/ops/files.rs @@ -1,6 +1,5 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. use super::dispatch_json::{Deserialize, JsonOp, Value}; -use crate::deno_error; use crate::fs as deno_fs; use crate::resources; use crate::state::ThreadSafeState; @@ -104,13 +103,9 @@ pub fn op_close( ) -> Result<JsonOp, ErrBox> { let args: CloseArgs = serde_json::from_value(args)?; - match resources::lookup(args.rid as u32) { - None => Err(deno_error::bad_resource()), - Some(resource) => { - resource.close(); - Ok(JsonOp::Sync(json!({}))) - } - } + let resource = resources::lookup(args.rid as u32)?; + resource.close(); + Ok(JsonOp::Sync(json!({}))) } #[derive(Deserialize)] @@ -129,17 +124,13 @@ pub fn op_seek( ) -> Result<JsonOp, ErrBox> { let args: SeekArgs = serde_json::from_value(args)?; - match resources::lookup(args.rid as u32) { - None => Err(deno_error::bad_resource()), - Some(resource) => { - let op = resources::seek(resource, args.offset, args.whence as u32) - .and_then(move |_| futures::future::ok(json!({}))); - if args.promise_id.is_none() { - let buf = op.wait()?; - Ok(JsonOp::Sync(buf)) - } else { - Ok(JsonOp::Async(Box::new(op))) - } - } + let resource = resources::lookup(args.rid as u32)?; + let op = resources::seek(resource, args.offset, args.whence as u32) + .and_then(move |_| futures::future::ok(json!({}))); + if args.promise_id.is_none() { + let buf = op.wait()?; + Ok(JsonOp::Sync(buf)) + } else { + Ok(JsonOp::Async(Box::new(op))) } } diff --git a/cli/ops/io.rs b/cli/ops/io.rs index 610238942..8b8520c35 100644 --- a/cli/ops/io.rs +++ b/cli/ops/io.rs @@ -1,6 +1,7 @@ use super::dispatch_minimal::MinimalOp; use crate::deno_error; use crate::resources; +use crate::tokio_read; use crate::tokio_write; use deno::ErrBox; use deno::PinnedBuf; @@ -14,10 +15,11 @@ pub fn op_read(rid: i32, zero_copy: Option<PinnedBuf>) -> Box<MinimalOp> { } Some(buf) => buf, }; + match resources::lookup(rid as u32) { - None => Box::new(futures::future::err(deno_error::bad_resource())), - Some(resource) => Box::new( - tokio::io::read(resource, zero_copy) + Err(e) => Box::new(futures::future::err(e)), + Ok(resource) => Box::new( + tokio_read::read(resource, zero_copy) .map_err(ErrBox::from) .and_then(move |(_resource, _buf, nread)| Ok(nread as i32)), ), @@ -32,9 +34,10 @@ pub fn op_write(rid: i32, zero_copy: Option<PinnedBuf>) -> Box<MinimalOp> { } Some(buf) => buf, }; + match resources::lookup(rid as u32) { - None => Box::new(futures::future::err(deno_error::bad_resource())), - Some(resource) => Box::new( + Err(e) => Box::new(futures::future::err(e)), + Ok(resource) => Box::new( tokio_write::write(resource, zero_copy) .map_err(ErrBox::from) .and_then(move |(_resource, _buf, nwritten)| Ok(nwritten as i32)), diff --git a/cli/ops/net.rs b/cli/ops/net.rs index a9a62b148..11bf410d1 100644 --- a/cli/ops/net.rs +++ b/cli/ops/net.rs @@ -1,6 +1,5 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. use super::dispatch_json::{Deserialize, JsonOp, Value}; -use crate::deno_error; use crate::resolve_addr::resolve_addr; use crate::resources; use crate::resources::Resource; @@ -28,28 +27,24 @@ pub fn op_accept( let args: AcceptArgs = serde_json::from_value(args)?; let server_rid = args.rid as u32; - match resources::lookup(server_rid) { - None => Err(deno_error::bad_resource()), - Some(server_resource) => { - let op = tokio_util::accept(server_resource) - .and_then(move |(tcp_stream, _socket_addr)| { - let local_addr = tcp_stream.local_addr()?; - let remote_addr = tcp_stream.peer_addr()?; - let tcp_stream_resource = resources::add_tcp_stream(tcp_stream); - Ok((tcp_stream_resource, local_addr, remote_addr)) - }) - .map_err(ErrBox::from) - .and_then(move |(tcp_stream_resource, local_addr, remote_addr)| { - futures::future::ok(json!({ - "rid": tcp_stream_resource.rid, - "localAddr": local_addr.to_string(), - "remoteAddr": remote_addr.to_string(), - })) - }); - - Ok(JsonOp::Async(Box::new(op))) - } - } + let server_resource = resources::lookup(server_rid)?; + let op = tokio_util::accept(server_resource) + .and_then(move |(tcp_stream, _socket_addr)| { + let local_addr = tcp_stream.local_addr()?; + let remote_addr = tcp_stream.peer_addr()?; + let tcp_stream_resource = resources::add_tcp_stream(tcp_stream); + Ok((tcp_stream_resource, local_addr, remote_addr)) + }) + .map_err(ErrBox::from) + .and_then(move |(tcp_stream_resource, local_addr, remote_addr)| { + futures::future::ok(json!({ + "rid": tcp_stream_resource.rid, + "localAddr": local_addr.to_string(), + "remoteAddr": remote_addr.to_string(), + })) + }); + + Ok(JsonOp::Async(Box::new(op))) } #[derive(Deserialize)] @@ -105,22 +100,19 @@ pub fn op_shutdown( ) -> Result<JsonOp, ErrBox> { let args: ShutdownArgs = serde_json::from_value(args)?; - let rid = args.rid; + let rid = args.rid as u32; let how = args.how; - match resources::lookup(rid as u32) { - None => Err(deno_error::bad_resource()), - Some(mut resource) => { - let shutdown_mode = match how { - 0 => Shutdown::Read, - 1 => Shutdown::Write, - _ => unimplemented!(), - }; - - // Use UFCS for disambiguation - Resource::shutdown(&mut resource, shutdown_mode)?; - Ok(JsonOp::Sync(json!({}))) - } - } + let mut resource = resources::lookup(rid)?; + + let shutdown_mode = match how { + 0 => Shutdown::Read, + 1 => Shutdown::Write, + _ => unimplemented!(), + }; + + // Use UFCS for disambiguation + Resource::shutdown(&mut resource, shutdown_mode)?; + Ok(JsonOp::Sync(json!({}))) } #[derive(Deserialize)] |
