about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNiko Matsakis <niko@alum.mit.edu>2012-01-20 07:43:39 -0800
committerNiko Matsakis <niko@alum.mit.edu>2012-01-21 19:31:52 -0800
commitde2bb2806f02aa668e9cda8a86ec5b62c595c09b (patch)
tree89a71db6a69e051e39e4b57700bb64e45f42c556 /src
parent556947c47a45db44702251552d4cb10ef8f1eb3f (diff)
downloadrust-de2bb2806f02aa668e9cda8a86ec5b62c595c09b.tar.gz
rust-de2bb2806f02aa668e9cda8a86ec5b62c595c09b.zip
update to use u64; u32 has undefined results
Diffstat (limited to 'src')
-rw-r--r--src/libstd/md4.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/libstd/md4.rs b/src/libstd/md4.rs
index d31f0cb524b..9344767bed3 100644
--- a/src/libstd/md4.rs
+++ b/src/libstd/md4.rs
@@ -1,5 +1,9 @@
 fn md4(msg: [u8]) -> {a: u32, b: u32, c: u32, d: u32} {
-    let orig_len = vec::len(msg) * 8u;
+    // subtle: if orig_len is merely uint, then the code below
+    // which performs shifts by 32 bits or more has undefined
+    // results.
+    let orig_len: u64 = (vec::len(msg) * 8u) as u64;
+
     // pad message
     let msg = msg + [0x80u8];
     let bitlen = orig_len + 8u;
@@ -7,6 +11,7 @@ fn md4(msg: [u8]) -> {a: u32, b: u32, c: u32, d: u32} {
         msg += [0u8];
         bitlen += 8u;
     }
+
     // append length
     let i = 0u;
     while i < 8u {