Skip to content

Commit 83bfbda

Browse files
committed
fix fr_nbo_to_int64v()
use / return int64_t, not uint64_t set the high bits to zero starting at 0, not part-way through
1 parent ef566c3 commit 83bfbda

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/lib/util/nbo.h

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -198,33 +198,39 @@ static inline uint64_t fr_nbo_to_uint64v(uint8_t const *data, size_t data_len)
198198
uint64_t num = 0;
199199
uint64_t nbo;
200200

201-
if (unlikely(data_len > sizeof(uint64_t))) return 0;
201+
if (unlikely(data_len > sizeof(nbo))) return 0;
202202

203203
/*
204204
* Copy at an offset into memory
205205
* allocated for the uin64_t
206206
*/
207-
memcpy(((uint8_t *)&num) + (sizeof(uint64_t) - data_len), data, data_len); /* aligned */
207+
memcpy(((uint8_t *)&num) + (sizeof(nbo) - data_len), data, data_len); /* aligned */
208208
fr_nbo_from_uint64((uint8_t *)&nbo, num);
209209

210210
return nbo;
211211
}
212212

213-
static inline uint64_t fr_nbo_to_int64v(uint8_t const *data, size_t data_len)
213+
/** Read a signed 64bit integer from wire format (big endian) with a variable length encoding
214+
*
215+
* @param[in] data Buffer containing the number.
216+
* @param[in] data_len Length of number.
217+
* @return a 64 bit signed integer of native endianness.
218+
*/
219+
static inline int64_t fr_nbo_to_int64v(uint8_t const *data, size_t data_len)
214220
{
215221
int64_t num = 0;
216-
uint64_t nbo;
222+
int64_t nbo;
217223

218-
if (unlikely(data_len > sizeof(uint64_t))) return 0;
224+
if (unlikely(data_len > sizeof(nbo))) return 0;
219225

220226
/*
221227
* Copy at an offset into memory
222228
* allocated for the uin64_t
223229
*/
224-
memcpy(((uint8_t *)&num) + (sizeof(uint64_t) - data_len), data, data_len); /* aligned */
225-
if (*data & 0x80) memset(((uint8_t *)&num) + data_len, 0xff, sizeof(num) - data_len);
230+
memcpy(((uint8_t *)&num) + (sizeof(nbo) - data_len), data, data_len); /* aligned */
231+
if (*data & 0x80) memset(((uint8_t *)&num), 0xff, sizeof(num) - data_len);
226232

227-
fr_nbo_from_uint64((uint8_t *)&nbo, num);
233+
fr_nbo_from_int64((uint8_t *)&nbo, num);
228234

229235
return nbo;
230236
}

0 commit comments

Comments
 (0)