Fix MD5-UPDATE and MHASH to check their index args correctly.
authorChris Hanson <org/chris-hanson/cph>
Sat, 26 Dec 2009 21:33:18 +0000 (13:33 -0800)
committerChris Hanson <org/chris-hanson/cph>
Sat, 26 Dec 2009 21:33:18 +0000 (13:33 -0800)
src/microcode/prmd5.c
src/microcode/prmhash.c
src/runtime/crypto.scm

index 10d8943af4b505d3d94bc0c0ccc5f8991badd872..48cca989acc51b3a21727f0d19c29d611d895aef 100644 (file)
@@ -112,9 +112,9 @@ Update CONTEXT with the contents of the substring (STRING,START,END).")
   CHECK_ARG (2, STRING_P);
   {
     SCHEME_OBJECT string = (ARG_REF (2));
-    unsigned long l = (STRING_LENGTH (string));
-    unsigned long start = (arg_ulong_index_integer (3, l));
-    unsigned long end = (arg_integer_in_range (4, start, (l + 1)));
+    unsigned long end
+      = (arg_ulong_index_integer (4, ((STRING_LENGTH (string)) + 1)));
+    unsigned long start = (arg_ulong_index_integer (3, (end + 1)));
     MD5_UPDATE ((md5_context_arg (1)),
                (STRING_LOC (string, start)),
                (end - start));
index e51c2b2231d594941777c1f3476d71c93adfb87a..2ca98ee6d519b7850f00a1b7543f20688da1202a 100644 (file)
@@ -209,9 +209,8 @@ DEFINE_PRIMITIVE ("MHASH", Prim_mhash, 4, 4, 0)
   CHECK_ARG (2, STRING_P);
   {
     SCHEME_OBJECT string = (ARG_REF (2));
-    unsigned long l = (STRING_LENGTH (string));
-    unsigned long start = (arg_ulong_index_integer (3, l));
-    unsigned long end = (arg_integer_in_range (4, start, (l + 1)));
+    unsigned long end = (arg_ulong_index_integer (4, ((STRING_LENGTH (string)) + 1)));
+    unsigned long start = (arg_ulong_index_integer (3, (end + 1)));
     mhash ((arg_context (1)), (STRING_LOC (string, start)), (end - start));
   }
   PRIMITIVE_RETURN (UNSPECIFIC);
index 1de7d7f4212b6662e8190536aa839c95beffdb7c..217d113d5f69a767056155ce9e05a397dc23e73e 100644 (file)
@@ -261,8 +261,7 @@ USA.
 
 (define (mhash-substring hash-type string start end)
   (let ((context (mhash-init hash-type)))
-    (if (fix:> end start)
-       (mhash-update context string start end))
+    (mhash-update context string start end)
     (mhash-end context)))
 
 (define (mhash-sum->number sum)
@@ -335,8 +334,7 @@ USA.
 
 (define (%md5-substring string start end)
   (let ((context ((ucode-primitive md5-init 0))))
-    (if (fix:> end start)
-       ((ucode-primitive md5-update 4) context string start end))
+    ((ucode-primitive md5-update 4) context string start end)
     ((ucode-primitive md5-final 1) context)))
 
 (define md5-sum->number mhash-sum->number)