about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2013-09-17 21:25:18 -0700
committerBrian Anderson <banderson@mozilla.com>2013-09-17 21:25:18 -0700
commitfd0fcba9f5b2ec9cb504d6f322c2dd89ab891e08 (patch)
treec566374c964b6592f5d9729cdfb07bdb81f14ccf /src/libstd
parent460021bdf2106ee76daf7d81ec7e50e972e26901 (diff)
downloadrust-fd0fcba9f5b2ec9cb504d6f322c2dd89ab891e08.tar.gz
rust-fd0fcba9f5b2ec9cb504d6f322c2dd89ab891e08.zip
std: Fix an invalid read in from_c_multistring
When `count` is `Some` this function was reading a byte past the end
of the buffer.
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/str.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/libstd/str.rs b/src/libstd/str.rs
index 93cac8797bb..9707d592a2e 100644
--- a/src/libstd/str.rs
+++ b/src/libstd/str.rs
@@ -1107,8 +1107,8 @@ pub mod raw {
             Some(limit) => (true, limit),
             None => (false, 0)
         };
-        while(*(curr_ptr as *libc::c_char) != 0 as libc::c_char
-             && ((limited_count && ctr < limit) || !limited_count)) {
+        while(((limited_count && ctr < limit) || !limited_count)
+              && *(curr_ptr as *libc::c_char) != 0 as libc::c_char) {
             let env_pair = from_c_str(
                 curr_ptr as *libc::c_char);
             result.push(env_pair);