from_str is only used to construct read-only Iobufs, which do not support
writing into the buffer. Also, if you modify the string, it should invalidate
the Iobuf since the lifetime is bound to the borrowed reference of the string.
- Clark
On Thu, Sep 4, 2014 at 8:36 PM, Kevin Ballard <[email protected]> wrote:
> I’m still seeing bad transmutes.
> fn from_str<'a>(s: &'a str) -> RawIobuf<'a> {
> unsafe {
> let bytes: &mut [u8] = mem::transmute(s.as_bytes());
> RawIobuf::of_buf(BorrowedBuffer(bytes))
> }
> }
> This is taking a `&str`, converting to `&[u8]`, and then transmuting to `&mut
> [u8]`. Besides being undefined, I have to assume it's also possible for other
> code later on to end up attempting to actually mutate this data, which will
> either a) be really bad, or b) not even be possible if it's a string constant
> in read-only member.
> -Kevin
>> On Sep 4, 2014, at 1:15 AM, Clark Gaebel <[email protected]> wrote:
>>
>> I think you’re right! Thanks for pointing at UnsafeCell. That seems like
>> exactly what I want. It has been fixed.
>>
>> Thanks a ton for the catch!
>> - Clark
>>
>>
>> On Thu, Sep 4, 2014 at 12:46 AM, Vladimir Matveev <[email protected]>
>> wrote:
>>
>> Hi!
>>
>> I’ve noticed this piece of code in your library:
>>
>> #[inline]
>> fn as_mut_slice(&self) -> &mut [u8] {
>> unsafe {
>> match self {
>> &OwnedBuffer(ref v) => {
>> let mut_v: &mut Vec<u8> = mem::transmute(v);
>> mut_v.as_mut_slice()
>> },
>> &BorrowedBuffer(ref s) => {
>> let mut_s: &mut &mut [u8] = mem::transmute(s);
>> mut_s.as_mut_slice()
>> },
>> }
>> }
>> }
>>
>> I was under impression that transmuting & to &mut is undefined behavior in
>> Rust, and you need to use RefCell (or UnsafeCell) for this. Am I wrong?
>>
>> On 04 сент. 2014 г., at 9:17, Clark Gaebel <[email protected]> wrote:
>>
>> > Hey everyone!
>> >
>> > Have you ever needed to communicate with the outside world from a rust
>> > application? Do you need to send data through a network interface, or
>> > touch a disk? Then you need Iobufs!
>> >
>> > An Iobuf is a nifty abstraction over an array of bytes, which makes
>> > writing things like highly efficient zero-copy speculative network
>> > protocol parsers easy! Any time I need to do I/O, I reach for an Iobuf to
>> > do the heavy lifting.
>> >
>> > https://github.com/cgaebel/iobuf
>> >
>> > Enjoy,
>> > - Clark
>> > _______________________________________________
>> > Rust-dev mailing list
>> > [email protected]
>> > https://mail.mozilla.org/listinfo/rust-dev
>>
>>
>>
>> _______________________________________________
>> Rust-dev mailing list
>> [email protected]
>> https://mail.mozilla.org/listinfo/rust-dev_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev