From 1f9f9f7d55c46352c5625c0db0ca40bb638ab385 Mon Sep 17 00:00:00 2001 From: Tom Almeida <tommoa256@gmail.com> Date: Sun, 11 Mar 2018 23:53:15 +0800 Subject: [PATCH] Made an error in the logic of strcspn and strspn that would cause a bit shift much too large --- src/string/src/lib.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/string/src/lib.rs b/src/string/src/lib.rs index 962c8f761..ca56dff00 100644 --- a/src/string/src/lib.rs +++ b/src/string/src/lib.rs @@ -129,15 +129,15 @@ pub unsafe extern "C" fn strcspn(s1: *const c_char, s2: *const c_char) -> c_ulon let mut i = 0; while *s2.offset(i) != 0 { - byteset[(*s2.offset(i) as usize) / (8 * mem::size_of::<usize>())] |= - 1 << (*s2.offset(i) as usize % (8 * mem::size_of::<usize>())); + byteset[(*s2.offset(i) as usize) / (8 * byteset.len())] |= + 1 << (*s2.offset(i) as usize % (8 * byteset.len())); i += 1; } i = 0; // reset while *s2.offset(i) != 0 { - if byteset[(*s2.offset(i) as usize) / (8 * mem::size_of::<usize>())] - & 1 << (*s2.offset(i) as usize % (8 * mem::size_of::<usize>())) > 0 + if byteset[(*s2.offset(i) as usize) / (8 * byteset.len())] + & 1 << (*s2.offset(i) as usize % (8 * byteset.len())) > 0 { break; } @@ -281,15 +281,15 @@ pub unsafe extern "C" fn strspn(s1: *const c_char, s2: *const c_char) -> c_ulong let mut i = 0; while *s2.offset(i) != 0 { - byteset[(*s2.offset(i) as usize) / (8 * mem::size_of::<usize>())] |= - 1 << (*s2.offset(i) as usize % (8 * mem::size_of::<usize>())); + byteset[(*s2.offset(i) as usize) / (8 * byteset.len())] |= + 1 << (*s2.offset(i) as usize % (8 * byteset.len())); i += 1; } i = 0; // reset while *s2.offset(i) != 0 { - if byteset[(*s2.offset(i) as usize) / (8 * mem::size_of::<usize>())] - & 1 << (*s2.offset(i) as usize % (8 * mem::size_of::<usize>())) < 1 + if byteset[(*s2.offset(i) as usize) / (8 * byteset.len())] + & 1 << (*s2.offset(i) as usize % (8 * byteset.len())) < 1 { break; } -- GitLab