From 147c4fd81b25afe8a0b3ef50987d916370d7133b Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Sun, 4 Aug 2013 16:10:19 -0400 Subject: [PATCH] Fixed str::raw::push_byte It was previously pushing the byte on top of the string's null terminator. I added a test to make sure it doesn't break in the future. --- src/libstd/str.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/libstd/str.rs b/src/libstd/str.rs index c30888529be10..4398e414cdac5 100644 --- a/src/libstd/str.rs +++ b/src/libstd/str.rs @@ -878,7 +878,7 @@ pub mod raw { let new_len = s.len() + 1; s.reserve_at_least(new_len); do s.as_mut_buf |buf, len| { - *ptr::mut_offset(buf, len as int) = b; + *ptr::mut_offset(buf, (len-1) as int) = b; } set_len(&mut *s, new_len); } @@ -2801,6 +2801,13 @@ mod tests { assert!(!" _ ".is_whitespace()); } + #[test] + fn test_push_byte() { + let mut s = ~"ABC"; + unsafe{raw::push_byte(&mut s, 'D' as u8)}; + assert_eq!(s, ~"ABCD"); + } + #[test] fn test_shift_byte() { let mut s = ~"ABC";