summaryrefslogtreecommitdiff
path: root/ext/fetch/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'ext/fetch/lib.rs')
-rw-r--r--ext/fetch/lib.rs8
1 files changed, 7 insertions, 1 deletions
diff --git a/ext/fetch/lib.rs b/ext/fetch/lib.rs
index c19336e7d..ac71e2a3d 100644
--- a/ext/fetch/lib.rs
+++ b/ext/fetch/lib.rs
@@ -31,7 +31,7 @@ use deno_core::ResourceId;
use deno_core::ZeroCopyBuf;
use deno_tls::rustls::RootCertStore;
use deno_tls::Proxy;
-use http::header::CONTENT_LENGTH;
+use http::{header::CONTENT_LENGTH, Uri};
use reqwest::header::HeaderMap;
use reqwest::header::HeaderName;
use reqwest::header::HeaderValue;
@@ -252,6 +252,12 @@ where
let permissions = state.borrow_mut::<FP>();
permissions.check_net_url(&url, "fetch()")?;
+ // Make sure that we have a valid URI early, as reqwest's `RequestBuilder::send`
+ // internally uses `expect_uri`, which panics instead of returning a usable `Result`.
+ if url.as_str().parse::<Uri>().is_err() {
+ return Err(type_error("Invalid URL"));
+ }
+
let mut request = client.request(method.clone(), url);
let request_body_rid = if has_body {