diff options
author | Kevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com> | 2018-12-13 16:20:37 -0500 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-12-13 16:20:37 -0500 |
commit | 2cb52cc4d19b212c4a1095ca4f668fe62b237c7a (patch) | |
tree | e08f7714165fe2bff643dd25a987d4f0b4531d09 /src | |
parent | 40d6daf8240f9dc090c23f975488c424b88f120f (diff) |
Fix deno.open permission check (#1336)
Diffstat (limited to 'src')
-rw-r--r-- | src/ops.rs | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/ops.rs b/src/ops.rs index 3cf466d0d..3dc457aa6 100644 --- a/src/ops.rs +++ b/src/ops.rs @@ -576,15 +576,15 @@ fn op_chmod( } fn op_open( - _state: &IsolateState, + state: &IsolateState, base: &msg::Base, data: libdeno::deno_buf, ) -> Box<Op> { assert_eq!(data.len(), 0); let cmd_id = base.cmd_id(); let inner = base.inner_as_open().unwrap(); - let filename = PathBuf::from(inner.filename().unwrap()); - // let perm = inner.perm(); + let filename_str = inner.filename().unwrap(); + let filename = PathBuf::from(&filename_str); let mode = inner.mode().unwrap(); let mut open_options = tokio::fs::OpenOptions::new(); @@ -594,12 +594,21 @@ fn op_open( open_options.read(true); } "r+" => { + if let Err(e) = state.check_write(&filename_str) { + return odd_future(e); + } open_options.read(true).write(true); } "w" => { + if let Err(e) = state.check_write(&filename_str) { + return odd_future(e); + } open_options.create(true).write(true).truncate(true); } "w+" => { + if let Err(e) = state.check_write(&filename_str) { + return odd_future(e); + } open_options .read(true) .create(true) @@ -607,15 +616,27 @@ fn op_open( .truncate(true); } "a" => { + if let Err(e) = state.check_write(&filename_str) { + return odd_future(e); + } open_options.create(true).append(true); } "a+" => { + if let Err(e) = state.check_write(&filename_str) { + return odd_future(e); + } open_options.read(true).create(true).append(true); } "x" => { + if let Err(e) = state.check_write(&filename_str) { + return odd_future(e); + } open_options.create_new(true).write(true); } "x+" => { + if let Err(e) = state.check_write(&filename_str) { + return odd_future(e); + } open_options.create_new(true).read(true).write(true); } &_ => { |