]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
handle negative numbers
authorAlan T. DeKok <aland@freeradius.org>
Tue, 14 Sep 2021 15:49:23 +0000 (11:49 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 14 Sep 2021 15:50:16 +0000 (11:50 -0400)
src/lib/util/dbuff.h

index 336b5b2d6beaae17216b689274a312392cef337e..d0fc622e9dbb56a329850220512da0d1326a037c 100644 (file)
@@ -1789,14 +1789,19 @@ static inline ssize_t _fr_dbuff_out_uint64v(uint64_t *num, uint8_t **pos_p, fr_d
 static inline ssize_t _fr_dbuff_out_int64v(int64_t *num, uint8_t **pos_p, fr_dbuff_t *dbuff, size_t length)
 {
        ssize_t         slen;
+       bool            negative;
 
        fr_assert(length > 0 && length <= sizeof(uint64_t));
 
+       negative = *fr_dbuff_current(dbuff) & 0x80;
+
        *num = 0;
        slen = _fr_dbuff_out_memcpy(((uint8_t *) num) + (8 - length), pos_p, dbuff, length);
        if (slen <= 0) return slen;
 
        *num = fr_net_to_int64((uint8_t const *)num);
+       if (negative) *num = -*num;
+
        return length;
 }