Avoid bus errors from unaligned input to SHA1Update
authorPaul Mackerras <paulus@samba.org>
Sun, 21 May 2006 07:21:28 +0000 (07:21 +0000)
committerPaul Mackerras <paulus@samba.org>
Sun, 21 May 2006 07:21:28 +0000 (07:21 +0000)
pppd/sha1.c

index da142f1a7611b67a31e0ba39da5c36c70de8c1d5..d18a19ce2e4f80ba4e3f0e7d28104362a1d11a84 100644 (file)
@@ -121,18 +121,17 @@ SHA1_Update(SHA1_CTX *context, const unsigned char *data, unsigned int len)
     j = (context->count[0] >> 3) & 63;
     if ((context->count[0] += len << 3) < (len << 3)) context->count[1]++;
     context->count[1] += (len >> 29);
-    if ((j + len) > 63) {
-       memcpy(&context->buffer[j], data, (i = 64-j));
+    i = 64 - j;
+    while (len >= i) {
+       memcpy(&context->buffer[j], data, i);
        SHA1_Transform(context->state, context->buffer);
-       for ( ; i + 63 < len; i += 64) {
-           SHA1_Transform(context->state, &data[i]);
-       }
+       data += i;
+       len -= i;
+       i = 64;
        j = 0;
     }
-    else
-       i = 0;
 
-    memcpy(&context->buffer[j], &data[i], len - i);
+    memcpy(&context->buffer[j], data, len);
 }