From: Peter van Dijk Date: Fri, 21 Sep 2012 13:44:20 +0000 (+0000) Subject: make extract_bits slightly more robust; document limitations (thanks Maik) X-Git-Tag: auth-3.2-rc1~166 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=79fe6bef998382979c7cd14dc6da250dae29955b;p=thirdparty%2Fpdns.git make extract_bits slightly more robust; document limitations (thanks Maik) git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@2716 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/base32.cc b/pdns/base32.cc index d20926d698..5c96cc2ff1 100644 --- a/pdns/base32.cc +++ b/pdns/base32.cc @@ -8,6 +8,7 @@ #include "namespaces.hh" /* based on freebsd:src/contrib/opie/libopie/btoe.c extract: get bit ranges from a char* */ +/* NOTE: length should not exceed 8; all callers inside PowerDNS only pass length=5 though */ unsigned char extract_bits(const char *s, int start, int length) { uint16_t x; @@ -19,6 +20,8 @@ unsigned char extract_bits(const char *s, int start, int length) cl = s[start / 8]; if(start / 8 < (start + length-1)/8) cc = s[start / 8 + 1]; + else + cc = 0; x = (uint16_t) (cl << 8 | cc); x = x >> (16 - (length + (start % 8)));