X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fber_int.c;h=e9b23a2fb0be99d27c347eb7af67352a33fa4cf0;hp=7f3679c754b348f169accb39d5a37c5b1af35f31;hb=e4e5f0bfaa1fcb5eb12cc37df216352df226b01e;hpb=1bc4f08eaac49e38f91a6bba89bf3092c1a60568 diff --git a/src/ber_int.c b/src/ber_int.c index 7f3679c..e9b23a2 100644 --- a/src/ber_int.c +++ b/src/ber_int.c @@ -1,9 +1,9 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2009 Index Data + * Copyright (C) 1995-2013 Index Data * See the file LICENSE for details. */ -/** +/** * \file ber_int.c * \brief Implements BER INTEGER encoding and decoding. * @@ -60,20 +60,21 @@ int ber_integer(ODR o, Odr_int *val) */ int ber_encinteger(ODR o, Odr_int val) { - unsigned char tmp[sizeof(Odr_int)]; unsigned long long uval = val; - int i, len; + unsigned char tmp[sizeof(uval)]; + int len; + size_t i; for (i = sizeof(uval); i > 0; ) { tmp[--i] = uval; uval >>= 8; } - for (i = 0; i < sizeof(Odr_int)-1; i++) + for (i = 0; i < sizeof(uval)-1; i++) if (!((tmp[i] == 0 && !(tmp[i+1] & 0x80)) || (tmp[i] == 0xFF && (tmp[i+1] & 0x80)))) break; - len = sizeof(Odr_int) - i; + len = sizeof(uval) - i; if (ber_enclen(o, len, 1, 1) != 1) return -1; if (odr_write(o, (unsigned char*) tmp + i, len) < 0) @@ -94,13 +95,13 @@ int ber_decinteger(const unsigned char *buf, Odr_int *val, int max) if ((res = ber_declen(b, &len, max)) < 0) return -1; if (len+res > max || len < 0) /* out of bounds or indefinite encoding */ - return -1; - if (len > (int) sizeof(Odr_int)) /* let's be reasonable, here */ + return -1; + if (len > (int) sizeof(uval)) /* let's be reasonable, here */ return -1; b += res; if (*b & 0x80) - for (i = 0; i < sizeof(uval) - len; i++) + for (i = 0; i < (int) sizeof(uval) - len; i++) uval = (uval << 8) + 0xFF; for (i = 0; i < len; i++) uval = (uval << 8) + b[i];