Skip to content

doc: explain why it is unsafe to construct Vec<u8> from Vec<u16> #65873

New issue

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

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

Already on GitHub? # to your account

Merged
merged 1 commit into from
Oct 28, 2019

Conversation

tesuji
Copy link
Contributor

@tesuji tesuji commented Oct 27, 2019

No description provided.

@rust-highfive rust-highfive added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Oct 27, 2019
@tesuji
Copy link
Contributor Author

tesuji commented Oct 27, 2019

cc @rkruppe or @RalfJung

/// to build a `Vec<u8>` from a pointer to a C `char` array with length `size_t`,
/// or a `Vec<u16>` and its length. Because the allocator cares about the alignment.
/// The buffer was allocated with alignment 2 (for `u16`), but after
/// turning it into a `Vec<u8>` it'll be deallocated with alignment 1.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This reads just a little off; I would say

    /// to build a `Vec<u8>` from a pointer to a C `char` array with length `size_t`.
    /// It's also not safe to build one from a `Vec<u16>` and its length, because 
    /// the allocator cares about the alignment, and these two types have different 
    /// alignments. The buffer was allocated with alignment 2 (for `u16`), but after
    /// turning it into a `Vec<u8>` it'll be deallocated with alignment 1.

@tesuji tesuji force-pushed the doc-vec-from-raw-parts branch from 70abb60 to c44f752 Compare October 27, 2019 17:29
Co-authored-by: Steve Klabnik <steve@steveklabnik.com>
@tesuji tesuji force-pushed the doc-vec-from-raw-parts branch from c44f752 to 3f98078 Compare October 27, 2019 17:31
@hanna-kruppe
Copy link
Contributor

@bors r+ rollup

Thanks!

@bors
Copy link
Collaborator

bors commented Oct 27, 2019

📌 Commit 3f98078 has been approved by rkruppe

@bors bors added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Oct 27, 2019
Centril added a commit to Centril/rust that referenced this pull request Oct 27, 2019
…ruppe

doc: explain why it is unsafe to construct Vec<u8> from Vec<u16>
Centril added a commit to Centril/rust that referenced this pull request Oct 28, 2019
…ruppe

doc: explain why it is unsafe to construct Vec<u8> from Vec<u16>
bors added a commit that referenced this pull request Oct 28, 2019
Rollup of 6 pull requests

Successful merges:

 - #64747 (Stabilize `Option::flatten`)
 - #65664 (`std::panic::Location` is a lang_item, add `core::intrinsics::caller_location` (RFC 2091 3/N))
 - #65792 (rustc, rustc_passes: reduce deps on rustc_expand)
 - #65849 (librustc_lexer: Enhance documentation)
 - #65873 (doc: explain why it is unsafe to construct Vec<u8> from Vec<u16>)
 - #65880 (Gather together usefulness tests)

Failed merges:

r? @ghost
@bors bors merged commit 3f98078 into rust-lang:master Oct 28, 2019
@tesuji tesuji deleted the doc-vec-from-raw-parts branch October 28, 2019 07:40
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants