Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix panic in Deref/DerefMut for Slice extending into uninitialized part of the buffer #52

Merged
merged 3 commits into from
Apr 12, 2022

Conversation

mzabaluev
Copy link
Contributor

@mzabaluev mzabaluev commented Sep 5, 2021

The Deref and DerefMut impls for Slice did not ensure that the end of the returned byte slice is clipped to the end of initialized data in the buffer.

Fixes #45.

@dignifiedquire
Copy link

Bump, seems like an important fix to merge

When the slice extends into the uninitialized part of the buffer,
the byte slice returned by the Deref and DerefMut impls should always
end at the initialized data.
No need for the slice end logic when we only need a pointer to
the beginning.
Move the test to integration tests since it only exercises public API.
Modify the test to ensure that the size of DerefMut output
for Slice is as expected and writing into the slice works.
@mzabaluev mzabaluev force-pushed the deref-slice-uninit-fix branch from 4c58b9b to 23eeff8 Compare March 21, 2022 02:18
@meyerzinn
Copy link

Didn't see this, but it is the root cause of #82

@Noah-Kennedy Noah-Kennedy merged commit 6d3ef61 into tokio-rs:master Apr 12, 2022
@FSMaxB
Copy link

FSMaxB commented May 21, 2022

I just ran into this. @Noah-Kennedy can you please make a release that incorporates that fix?

@FrankReh
Copy link
Collaborator

I just ran into this. @Noah-Kennedy can you please make a release that incorporates that fix?

We should put a new release out very soon.

@FrankReh
Copy link
Collaborator

@meyerzinn

Didn't see this, but it is the root cause of #82

With this merged, are you comfortable closing #82 as you are its author?

Noah-Kennedy pushed a commit that referenced this pull request Nov 5, 2022
# 0.4.0 (November 5th, 2022)

### Fixed

- Fix panic in Deref/DerefMut for Slice extending into uninitialized
part of the buffer ([#52])
- docs: all-features = true ([#84])
- fix fs unit tests to avoid parallelism ([#121])
- Box the socket address to allow moving the Connect future ([#126])
- rt: Fix data race ([#146])

### Added

- Implement fs::File::readv_at()/writev_at() ([#87])
- fs: implement FromRawFd for File ([#89])
- Implement `AsRawFd` for `TcpStream` ([#94])
- net: add TcpListener.local_addr method ([#107])
- net: add TcpStream.write_all ([#111])
- driver: add Builder API as an option to start ([#113])
- Socket and TcpStream shutdown ([#124])
- fs: implement fs::File::from_std ([#131])
- net: implement FromRawFd for TcpStream ([#132])
- fs: implement OpenOptionsExt for OpenOptions ([#133])
- Add NoOp support ([#134])
- Add writev to TcpStream ([#136])
- sync TcpStream, UnixStream and UdpSocket functionality ([#141])
- Add benchmarks for no-op submission ([#144])
- Expose runtime structure ([#148])

### Changed

- driver: batch submit requests and add benchmark ([#78])
- Depend on io-uring version ^0.5.8 ([#153])

### Internal Improvements

- chore: fix clippy lints ([#99])
- io: refactor post-op logic in ops into Completable ([#116])
- Support multi completion events: v2 ([#130])
- simplify driver operation futures ([#139])
- rt: refactor runtime to avoid Rc\<RefCell\<...>> ([#142])
- Remove unused dev-dependencies ([#143])
- chore: types and fields explicitly named ([#149])
- Ignore errors from uring while cleaning up ([#154])
- rt: drop runtime before driver during shutdown ([#155])
- rt: refactor drop logic ([#157])
- rt: fix error when calling block_on twice ([#162])

### CI changes

- chore: update actions/checkout action to v3 ([#90])
- chore: add all-systems-go ci check ([#98])
- chore: add clippy to ci ([#100])
- ci: run cargo test --doc ([#135])


[#52]: #52
[#78]: #78
[#84]: #84
[#87]: #87
[#89]: #89
[#90]: #90
[#94]: #94
[#98]: #98
[#99]: #99
[#100]: #100
[#107]: #107
[#111]: #111
[#113]: #113
[#116]: #116
[#121]: #121
[#124]: #124
[#126]: #126
[#130]: #130
[#131]: #131
[#132]: #132
[#133]: #133
[#134]: #134
[#135]: #135
[#136]: #136
[#139]: #139
[#141]: #141
[#142]: #142
[#143]: #143
[#144]: #144
[#146]: #146
[#148]: #148
[#149]: #149
[#153]: #153
[#154]: #154
[#155]: #155
[#157]: #157
[#162]: #162
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug] Wrong Slice::deref/deref_mut implementation
6 participants