Skip to content

Commit

Permalink
Add write permissions requirement to op_fetch_module_meta_data. (#1874
Browse files Browse the repository at this point in the history
)
  • Loading branch information
afinch7 authored and ry committed Mar 3, 2019
1 parent 1a695dd commit 2af04e6
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/compiler.rs
Expand Up @@ -52,7 +52,7 @@ fn lazy_start(parent_state: &Arc<IsolateState>) -> Resource {
let mut cell = C_RID.lock().unwrap(); let mut cell = C_RID.lock().unwrap();
let permissions = DenoPermissions { let permissions = DenoPermissions {
allow_read: AtomicBool::new(true), allow_read: AtomicBool::new(true),
allow_write: AtomicBool::new(false), allow_write: AtomicBool::new(true),
allow_env: AtomicBool::new(false), allow_env: AtomicBool::new(false),
allow_net: AtomicBool::new(true), allow_net: AtomicBool::new(true),
allow_run: AtomicBool::new(false), allow_run: AtomicBool::new(false),
Expand Down
48 changes: 47 additions & 1 deletion src/ops.rs
Expand Up @@ -374,11 +374,19 @@ fn op_fetch_module_meta_data(
let specifier = inner.specifier().unwrap(); let specifier = inner.specifier().unwrap();
let referrer = inner.referrer().unwrap(); let referrer = inner.referrer().unwrap();


// Check for allow read since this operation could be used to read from the file system.
if !isolate.permissions.allow_read.load(Ordering::SeqCst) { if !isolate.permissions.allow_read.load(Ordering::SeqCst) {
debug!("No read permission for fetch_module_meta_data"); debug!("No read permission for fetch_module_meta_data");
return odd_future(permission_denied()); return odd_future(permission_denied());
} }


// Check for allow write since this operation could be used to write to the file system.
if !isolate.permissions.allow_write.load(Ordering::SeqCst) {
debug!("No network permission for fetch_module_meta_data");
return odd_future(permission_denied());
}

// Check for allow net since this operation could be used to make https/http requests.
if !isolate.permissions.allow_net.load(Ordering::SeqCst) { if !isolate.permissions.allow_net.load(Ordering::SeqCst) {
debug!("No network permission for fetch_module_meta_data"); debug!("No network permission for fetch_module_meta_data");
return odd_future(permission_denied()); return odd_future(permission_denied());
Expand Down Expand Up @@ -1843,6 +1851,44 @@ mod tests {
} }
} }


#[test]
fn fetch_module_meta_fails_without_write() {
let state = IsolateState::mock();
let snapshot = libdeno::deno_buf::empty();
let permissions = DenoPermissions {
allow_read: AtomicBool::new(true),
allow_write: AtomicBool::new(false),
allow_env: AtomicBool::new(true),
allow_net: AtomicBool::new(true),
allow_run: AtomicBool::new(true),
};
let isolate = Isolate::new(snapshot, state, dispatch, permissions);
let builder = &mut FlatBufferBuilder::new();
let fetch_msg_args = msg::FetchModuleMetaDataArgs {
specifier: Some(builder.create_string("./somefile")),
referrer: Some(builder.create_string(".")),
};
let inner = msg::FetchModuleMetaData::create(builder, &fetch_msg_args);
let base_args = msg::BaseArgs {
inner: Some(inner.as_union_value()),
inner_type: msg::Any::FetchModuleMetaData,
..Default::default()
};
let base = msg::Base::create(builder, &base_args);
msg::finish_base_buffer(builder, base);
let data = builder.finished_data();
let final_msg = msg::get_root_as_base(&data);
let fetch_result = op_fetch_module_meta_data(
&isolate,
&final_msg,
libdeno::deno_buf::empty(),
).wait();
match fetch_result {
Ok(_) => assert!(true),
Err(e) => assert_eq!(e.to_string(), permission_denied().to_string()),
}
}

#[test] #[test]
fn fetch_module_meta_fails_without_net() { fn fetch_module_meta_fails_without_net() {
let state = IsolateState::mock(); let state = IsolateState::mock();
Expand Down Expand Up @@ -1887,7 +1933,7 @@ mod tests {
let snapshot = libdeno::deno_buf::empty(); let snapshot = libdeno::deno_buf::empty();
let permissions = DenoPermissions { let permissions = DenoPermissions {
allow_read: AtomicBool::new(true), allow_read: AtomicBool::new(true),
allow_write: AtomicBool::new(false), allow_write: AtomicBool::new(true),
allow_env: AtomicBool::new(false), allow_env: AtomicBool::new(false),
allow_net: AtomicBool::new(true), allow_net: AtomicBool::new(true),
allow_run: AtomicBool::new(false), allow_run: AtomicBool::new(false),
Expand Down

0 comments on commit 2af04e6

Please sign in to comment.