From 629c20f097ed158233d65ca5ffc62e1c887709e6 Mon Sep 17 00:00:00 2001 From: Alex Lyon <arcterus@mail.com> Date: Wed, 7 Mar 2018 17:46:00 -0800 Subject: [PATCH] string: ensure resulting string has NUL byte --- src/errno/src/lib.rs | 2 +- src/string/src/lib.rs | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/errno/src/lib.rs b/src/errno/src/lib.rs index 8a28cb6d..3cb5cd03 100644 --- a/src/errno/src/lib.rs +++ b/src/errno/src/lib.rs @@ -162,5 +162,5 @@ pub enum Errno { // Operation would block (may be the same value as [EAGAIN]) EWOULDBLOCK, // Cross-device link - EXDEV + EXDEV, } diff --git a/src/string/src/lib.rs b/src/string/src/lib.rs index 744e5411..f8a6f425 100644 --- a/src/string/src/lib.rs +++ b/src/string/src/lib.rs @@ -2,9 +2,9 @@ #![no_std] +extern crate errno; extern crate platform; extern crate stdlib; -extern crate errno; use platform::types::*; use errno::*; @@ -94,10 +94,10 @@ pub unsafe extern "C" fn strdup(s1: *const c_char) -> *mut c_char { #[no_mangle] pub unsafe extern "C" fn strndup(s1: *const c_char, size: usize) -> *mut c_char { - // the "+ 1" is to account for the NUL byte - let len = strnlen(s1, size) + 1; + let len = strnlen(s1, size); - let buffer = stdlib::malloc(len) as *mut c_char; + // the "+ 1" is to account for the NUL byte + let buffer = stdlib::malloc(len + 1) as *mut c_char; if buffer.is_null() { platform::errno = Errno::ENOMEM as c_int; } else { @@ -105,6 +105,7 @@ pub unsafe extern "C" fn strndup(s1: *const c_char, size: usize) -> *mut c_char for i in 0..len as isize { *buffer.offset(i) = *s1.offset(i); } + *buffer.offset(len as isize) = 0; } buffer -- GitLab