From 5196926ac01177c36eab5ba2276b749c4d2bc256 Mon Sep 17 00:00:00 2001 From: Johan Danielsson Date: Fri, 27 Aug 1999 09:03:41 +0000 Subject: [PATCH] (rr13): handle zero length bit strings git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@6880 ec53bebd-3082-4978-b11e-865c3cabbd6b --- lib/krb5/n-fold.c | 60 +++++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/lib/krb5/n-fold.c b/lib/krb5/n-fold.c index 52871b234..99fc33a37 100644 --- a/lib/krb5/n-fold.c +++ b/lib/krb5/n-fold.c @@ -40,37 +40,41 @@ rr13(unsigned char *buf, size_t len) unsigned char *tmp; int bytes = (len + 7) / 8; int i; - const int bits = 13 % len; - const int lbit = len % 8; + if(len == 0) + return; + { + const int bits = 13 % len; + const int lbit = len % 8; - tmp = malloc(bytes); - memcpy(tmp, buf, bytes); - if(lbit) { - /* pad final byte with inital bits */ - tmp[bytes - 1] &= 0xff << (8 - lbit); - for(i = lbit; i < 8; i += len) - tmp[bytes - 1] |= buf[0] >> i; - } - for(i = 0; i < bytes; i++) { - int bb; - int b1, s1, b2, s2; - /* calculate first bit position of this byte */ - bb = 8 * i - bits; - while(bb < 0) - bb += len; - /* byte offset and shift count */ - b1 = bb / 8; - s1 = bb % 8; + tmp = malloc(bytes); + memcpy(tmp, buf, bytes); + if(lbit) { + /* pad final byte with inital bits */ + tmp[bytes - 1] &= 0xff << (8 - lbit); + for(i = lbit; i < 8; i += len) + tmp[bytes - 1] |= buf[0] >> i; + } + for(i = 0; i < bytes; i++) { + int bb; + int b1, s1, b2, s2; + /* calculate first bit position of this byte */ + bb = 8 * i - bits; + while(bb < 0) + bb += len; + /* byte offset and shift count */ + b1 = bb / 8; + s1 = bb % 8; - if(bb + 8 > bytes * 8) - /* watch for wraparound */ - s2 = (len + 8 - s1) % 8; - else - s2 = 8 - s1; - b2 = (b1 + 1) % bytes; - buf[i] = (tmp[b1] << s1) | (tmp[b2] >> s2); + if(bb + 8 > bytes * 8) + /* watch for wraparound */ + s2 = (len + 8 - s1) % 8; + else + s2 = 8 - s1; + b2 = (b1 + 1) % bytes; + buf[i] = (tmp[b1] << s1) | (tmp[b2] >> s2); + } + free(tmp); } - free(tmp); } /* Add `b' to `a', both beeing one's complement numbers. */