summaryrefslogtreecommitdiff
path: root/cli/ops
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2019-09-10 06:59:40 +0200
committerRyan Dahl <ry@tinyclouds.org>2019-09-10 00:59:40 -0400
commit2a83327a21e83180a21afd428b11aa03e3080346 (patch)
tree670ac1ca0644d3b082d1baffc8514ad9d9fe3ef4 /cli/ops
parent377966764636350c524b526da50c055243ab3005 (diff)
fix: replace bad rid panics with errors (#2870)
Diffstat (limited to 'cli/ops')
-rw-r--r--cli/ops/files.rs31
-rw-r--r--cli/ops/io.rs13
-rw-r--r--cli/ops/net.rs68
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)]