Skip to content
Snippets Groups Projects
Commit 60746168 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Merge branch 'strerror_r' into 'master'

Handle zero len for strerror_r

See merge request redox-os/relibc!209
parents 87ba8f8a 1ebd8a3d
No related branches found
No related tags found
No related merge requests found
Pipeline #3938 failed
...@@ -235,8 +235,10 @@ pub unsafe extern "C" fn strerror_r(errnum: c_int, buf: *mut c_char, buflen: siz ...@@ -235,8 +235,10 @@ pub unsafe extern "C" fn strerror_r(errnum: c_int, buf: *mut c_char, buflen: siz
let len = strlen(msg); let len = strlen(msg);
if len >= buflen { if len >= buflen {
memcpy(buf as *mut c_void, msg as *const c_void, buflen - 1); if buflen != 0 {
*buf.add(buflen - 1) = 0; memcpy(buf as *mut c_void, msg as *const c_void, buflen - 1);
*buf.add(buflen - 1) = 0;
}
return ERANGE as c_int; return ERANGE as c_int;
} }
memcpy(buf as *mut c_void, msg as *const c_void, len + 1); memcpy(buf as *mut c_void, msg as *const c_void, len + 1);
......
...@@ -19,4 +19,8 @@ int main(void) { ...@@ -19,4 +19,8 @@ int main(void) {
char buf2[3]; char buf2[3];
int ret2 = strerror_r(err, buf2, 3); int ret2 = strerror_r(err, buf2, 3);
printf("errno: %d = %s, return: %d\n", err, buf2, ret2); printf("errno: %d = %s, return: %d\n", err, buf2, ret2);
char buf3[256];
int ret3 = strerror_r(err, buf3, 0);
printf("errno: %d = %s, return: %d\n", err, buf3, ret3);
} }
errno: 2 = No such file or directory errno: 2 = No such file or directory
errno: 2 = No such file or directory, return: 0 errno: 2 = No such file or directory, return: 0
errno: 2 = No, return: 34 errno: 2 = No, return: 34
errno: 2 = , return: 34
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment