diff options
Diffstat (limited to 'lib/isccc')
-rw-r--r-- | lib/isccc/api | 2 | ||||
-rw-r--r-- | lib/isccc/base64.c | 10 | ||||
-rw-r--r-- | lib/isccc/cc.c | 16 | ||||
-rw-r--r-- | lib/isccc/include/isccc/util.h | 38 | ||||
-rw-r--r-- | lib/isccc/sexpr.c | 6 |
5 files changed, 39 insertions, 33 deletions
diff --git a/lib/isccc/api b/lib/isccc/api index 461b9ac31a9b..2a5c388460ce 100644 --- a/lib/isccc/api +++ b/lib/isccc/api @@ -5,5 +5,5 @@ # 9.9: 90-109 # 9.9-sub: 130-139 LIBINTERFACE = 80 -LIBREVISION = 3 +LIBREVISION = 6 LIBAGE = 0 diff --git a/lib/isccc/base64.c b/lib/isccc/base64.c index 78b34edf4f92..bf8487e2d6ba 100644 --- a/lib/isccc/base64.c +++ b/lib/isccc/base64.c @@ -1,5 +1,5 @@ /* - * Portions Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (C) 2004, 2005, 2007, 2013 Internet Systems Consortium, Inc. ("ISC") * Portions Copyright (C) 2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -53,8 +53,9 @@ isccc_base64_encode(isccc_region_t *source, int wordlength, isc_result_t result; sr.base = source->rstart; - sr.length = source->rend - source->rstart; - isc_buffer_init(&tb, target->rstart, target->rend - target->rstart); + sr.length = (unsigned int)(source->rend - source->rstart); + isc_buffer_init(&tb, target->rstart, + (unsigned int)(target->rend - target->rstart)); result = isc_base64_totext(&sr, wordlength, wordbreak, &tb); if (result != ISC_R_SUCCESS) @@ -69,7 +70,8 @@ isccc_base64_decode(const char *cstr, isccc_region_t *target) { isc_buffer_t b; isc_result_t result; - isc_buffer_init(&b, target->rstart, target->rend - target->rstart); + isc_buffer_init(&b, target->rstart, + (unsigned int)(target->rend - target->rstart)); result = isc_base64_decodestring(cstr, &b); if (result != ISC_R_SUCCESS) return (result); diff --git a/lib/isccc/cc.c b/lib/isccc/cc.c index 07f8157b0aa6..69e7f7cee0b7 100644 --- a/lib/isccc/cc.c +++ b/lib/isccc/cc.c @@ -1,5 +1,5 @@ /* - * Portions Copyright (C) 2004-2007, 2012 Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (C) 2004-2007, 2012, 2013 Internet Systems Consortium, Inc. ("ISC") * Portions Copyright (C) 2001-2003 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -42,6 +42,7 @@ #include <isc/assertions.h> #include <isc/hmacmd5.h> #include <isc/print.h> +#include <isc/safe.h> #include <isc/stdlib.h> #include <isccc/alist.h> @@ -86,7 +87,7 @@ list_towire(isccc_sexpr_t *alist, isccc_region_t *target); static isc_result_t value_towire(isccc_sexpr_t *elt, isccc_region_t *target) { - size_t len; + unsigned int len; unsigned char *lenp; isccc_region_t *vr; isc_result_t result; @@ -116,7 +117,7 @@ value_towire(isccc_sexpr_t *elt, isccc_region_t *target) result = table_towire(elt, target); if (result != ISC_R_SUCCESS) return (result); - len = (size_t)(target->rstart - lenp); + len = (unsigned int)(target->rstart - lenp); /* * 'len' is 4 bytes too big, since it counts * the placeholder length too. Adjust and @@ -140,7 +141,7 @@ value_towire(isccc_sexpr_t *elt, isccc_region_t *target) result = list_towire(elt, target); if (result != ISC_R_SUCCESS) return (result); - len = (size_t)(target->rstart - lenp); + len = (unsigned int)(target->rstart - lenp); /* * 'len' is 4 bytes too big, since it counts * the placeholder length. Adjust and emit. @@ -264,7 +265,8 @@ isccc_cc_towire(isccc_sexpr_t *alist, isccc_region_t *target, if (result != ISC_R_SUCCESS) return (result); if (secret != NULL) - return (sign(signed_rstart, (target->rstart - signed_rstart), + return (sign(signed_rstart, + (unsigned int)(target->rstart - signed_rstart), hmd5_rstart, secret)); return (ISC_R_SUCCESS); } @@ -311,7 +313,8 @@ verify(isccc_sexpr_t *alist, unsigned char *data, unsigned int length, /* * Verify. */ - if (strcmp((char *)digestb64, isccc_sexpr_tostring(hmd5)) != 0) + if (!isc_safe_memcmp((unsigned char *) isccc_sexpr_tostring(hmd5), + digestb64, HMD5_LENGTH)) return (ISCCC_R_BADAUTH); return (ISC_R_SUCCESS); @@ -402,6 +405,7 @@ table_fromwire(isccc_region_t *source, isccc_region_t *secret, if (secret != NULL) { if (checksum_rstart != NULL) result = verify(alist, checksum_rstart, + (unsigned int) (source->rend - checksum_rstart), secret); else diff --git a/lib/isccc/include/isccc/util.h b/lib/isccc/include/isccc/util.h index 2e36b6e32dc0..4b8c7ad93f90 100644 --- a/lib/isccc/include/isccc/util.h +++ b/lib/isccc/include/isccc/util.h @@ -1,5 +1,5 @@ /* - * Portions Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (C) 2004-2007, 2014 Internet Systems Consortium, Inc. ("ISC") * Portions Copyright (C) 2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -52,37 +52,37 @@ #define GET16(v, w) \ do { \ v = (unsigned int)w[0] << 8; \ - v |= (unsigned int)w[1]; \ + v |= (unsigned int)w[1]; \ w += 2; \ } while (0) #define GET24(v, w) \ do { \ - v = (unsigned int)w[0] << 16; \ - v |= (unsigned int)w[1] << 8; \ - v |= (unsigned int)w[2]; \ + v = (unsigned int)w[0] << 16; \ + v |= (unsigned int)w[1] << 8; \ + v |= (unsigned int)w[2]; \ w += 3; \ } while (0) #define GET32(v, w) \ do { \ v = (unsigned int)w[0] << 24; \ - v |= (unsigned int)w[1] << 16; \ - v |= (unsigned int)w[2] << 8; \ - v |= (unsigned int)w[3]; \ + v |= (unsigned int)w[1] << 16; \ + v |= (unsigned int)w[2] << 8; \ + v |= (unsigned int)w[3]; \ w += 4; \ } while (0) #define GET64(v, w) \ do { \ v = (isc_uint64_t)w[0] << 56; \ - v |= (isc_uint64_t)w[1] << 48; \ - v |= (isc_uint64_t)w[2] << 40; \ - v |= (isc_uint64_t)w[3] << 32; \ - v |= (isc_uint64_t)w[4] << 24; \ - v |= (isc_uint64_t)w[5] << 16; \ - v |= (isc_uint64_t)w[6] << 8; \ - v |= (isc_uint64_t)w[7]; \ + v |= (isc_uint64_t)w[1] << 48; \ + v |= (isc_uint64_t)w[2] << 40; \ + v |= (isc_uint64_t)w[3] << 32; \ + v |= (isc_uint64_t)w[4] << 24; \ + v |= (isc_uint64_t)w[5] << 16; \ + v |= (isc_uint64_t)w[6] << 8; \ + v |= (isc_uint64_t)w[7]; \ w += 8; \ } while (0) @@ -91,7 +91,7 @@ GET8(v, w); \ if (v == 0) \ d = ISCCC_TRUE; \ - else { \ + else { \ d = ISCCC_FALSE; \ if (v == 255) \ GET16(v, w); \ @@ -101,7 +101,7 @@ #define GETC32(v, w) \ do { \ GET24(v, w); \ - if (v == 0xffffffu) \ + if (v == 0xffffffu) \ GET32(v, w); \ } while (0) @@ -109,7 +109,7 @@ #define GET_MEM(v, c, w) \ do { \ - memcpy(v, w, c); \ + memmove(v, w, c); \ w += c; \ } while (0) @@ -193,7 +193,7 @@ #define PUT_MEM(s, c, w) \ do { \ - memcpy(w, s, c); \ + memmove(w, s, c); \ w += c; \ } while (0) diff --git a/lib/isccc/sexpr.c b/lib/isccc/sexpr.c index e96536dfce5d..df11a9303175 100644 --- a/lib/isccc/sexpr.c +++ b/lib/isccc/sexpr.c @@ -1,5 +1,5 @@ /* - * Portions Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (C) 2004, 2005, 2007, 2014 Internet Systems Consortium, Inc. ("ISC") * Portions Copyright (C) 2001 Internet Software Consortium. * * Permission to use, copy, modify, and/or distribute this software for any @@ -112,7 +112,7 @@ isccc_sexpr_frombinary(const isccc_region_t *region) } sexpr->value.as_region.rend = sexpr->value.as_region.rstart + region_size; - memcpy(sexpr->value.as_region.rstart, region->rstart, region_size); + memmove(sexpr->value.as_region.rstart, region->rstart, region_size); /* * NUL terminate. */ @@ -311,7 +311,7 @@ isccc_sexpr_tostring(isccc_sexpr_t *sexpr) REQUIRE(sexpr != NULL && (sexpr->type == ISCCC_SEXPRTYPE_STRING || sexpr->type == ISCCC_SEXPRTYPE_BINARY)); - + if (sexpr->type == ISCCC_SEXPRTYPE_BINARY) return ((char *)sexpr->value.as_region.rstart); return (sexpr->value.as_string); |