Skip to content

Unsafe pointer mutation #72

@tobywf

Description

@tobywf

For the std::io::Write implementation on TTYPort, a *const ptr is cast to *mut:

libc::write(self.fd, buf.as_ptr() as *mut c_void, buf.len() as size_t)

This is unnecessary, as libc::write takes buf: *const c_void, so buf.as_ptr() as *const c_void would work fine.

For the std::io::Read implementation on TTYPort, similar but worse, as the pointer is mutated:

libc::read(self.fd, buf.as_ptr() as *mut c_void, buf.len() as size_t)

In this case, the solution is buf.as_mut_ptr() as *mut c_void. The documentation on slice.as_ptr():

The caller must also ensure that the memory the pointer (non-transitively) points to is never written to (except inside an UnsafeCell) using this pointer or any pointer derived from it. If you need to mutate the contents of the slice, use as_mut_ptr.

I haven't checked any other code, so there may be more.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions