Skip to content

Commit 827cf5e

Browse files
author
Pat Hickey
committed
wasi-common: normalize wrong access mode error on windows to badf
1 parent 120d626 commit 827cf5e

1 file changed

Lines changed: 16 additions & 0 deletions

File tree

crates/wasi-common/src/snapshots/preview_1.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,10 @@ impl wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx {
293293
iovs: &types::IovecArray<'a>,
294294
) -> Result<types::Size, Error> {
295295
let f = self.table().get_file(u32::from(fd))?;
296+
// Access mode check normalizes error returned (windows would prefer ACCES here)
297+
if !f.access_mode.contains(FileAccessMode::READ) {
298+
Err(types::Errno::Badf)?
299+
}
296300
let f = &f.file;
297301

298302
let iovs: Vec<wiggle::GuestPtr<[u8]>> = iovs
@@ -364,6 +368,10 @@ impl wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx {
364368
offset: types::Filesize,
365369
) -> Result<types::Size, Error> {
366370
let f = self.table().get_file(u32::from(fd))?;
371+
// Access mode check normalizes error returned (windows would prefer ACCES here)
372+
if !f.access_mode.contains(FileAccessMode::READ) {
373+
Err(types::Errno::Badf)?
374+
}
367375
let f = &f.file;
368376

369377
let iovs: Vec<wiggle::GuestPtr<[u8]>> = iovs
@@ -436,6 +444,10 @@ impl wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx {
436444
ciovs: &types::CiovecArray<'a>,
437445
) -> Result<types::Size, Error> {
438446
let f = self.table().get_file(u32::from(fd))?;
447+
// Access mode check normalizes error returned (windows would prefer ACCES here)
448+
if !f.access_mode.contains(FileAccessMode::WRITE) {
449+
Err(types::Errno::Badf)?
450+
}
439451
let f = &f.file;
440452

441453
let guest_slices: Vec<wiggle::GuestCow<u8>> = ciovs
@@ -463,6 +475,10 @@ impl wasi_snapshot_preview1::WasiSnapshotPreview1 for WasiCtx {
463475
offset: types::Filesize,
464476
) -> Result<types::Size, Error> {
465477
let f = self.table().get_file(u32::from(fd))?;
478+
// Access mode check normalizes error returned (windows would prefer ACCES here)
479+
if !f.access_mode.contains(FileAccessMode::WRITE) {
480+
Err(types::Errno::Badf)?
481+
}
466482
let f = &f.file;
467483

468484
let guest_slices: Vec<wiggle::GuestCow<u8>> = ciovs

0 commit comments

Comments
 (0)