summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/msg.fbs3
-rw-r--r--src/msg_util.rs9
-rw-r--r--src/ops.rs6
3 files changed, 14 insertions, 4 deletions
diff --git a/src/msg.fbs b/src/msg.fbs
index 9cdb628a1..b576d0f23 100644
--- a/src/msg.fbs
+++ b/src/msg.fbs
@@ -106,6 +106,9 @@ enum ErrorKind: byte {
HttpParse,
HttpOther,
TooLarge,
+
+ // custom errors
+ InvalidUri,
}
table Cwd {}
diff --git a/src/msg_util.rs b/src/msg_util.rs
index a78074ab1..ae5e2dc51 100644
--- a/src/msg_util.rs
+++ b/src/msg_util.rs
@@ -1,5 +1,7 @@
// Copyright 2018 the Deno authors. All rights reserved. MIT license.
// Helpers for serialization.
+use errors;
+use errors::DenoResult;
use flatbuffers;
use http::header::HeaderName;
use http::uri::Uri;
@@ -94,13 +96,14 @@ pub fn serialize_http_response<'bldr>(
pub fn deserialize_request(
header_msg: msg::HttpHeader,
body: Body,
-) -> Request<Body> {
+) -> DenoResult<Request<Body>> {
let mut r = Request::new(body);
assert!(header_msg.is_request());
let u = header_msg.url().unwrap();
- let u = Uri::from_str(u).unwrap();
+ let u = Uri::from_str(u)
+ .map_err(|e| errors::new(msg::ErrorKind::InvalidUri, e.to_string()))?;
*r.uri_mut() = u;
if let Some(method) = header_msg.method() {
@@ -119,5 +122,5 @@ pub fn deserialize_request(
headers.insert(name, v);
}
}
- r
+ Ok(r)
}
diff --git a/src/ops.rs b/src/ops.rs
index 44c1f8702..1ec46e445 100644
--- a/src/ops.rs
+++ b/src/ops.rs
@@ -408,7 +408,11 @@ fn op_fetch(
hyper::Body::from(Vec::from(&*data))
};
- let req = msg_util::deserialize_request(header, body);
+ let maybe_req = msg_util::deserialize_request(header, body);
+ if let Err(e) = maybe_req {
+ return odd_future(e);
+ }
+ let req = maybe_req.unwrap();
if let Err(e) = state.check_net(url) {
return odd_future(e);