From be86f37814a3f80bb1e827be1e08e608d8f304f4 Mon Sep 17 00:00:00 2001 From: Joey Degges <jdegges@gmail.com> Date: Tue, 21 Dec 2010 02:53:20 -0800 Subject: [PATCH] _libssh2_ntohu64: fix conversion from network bytes to uint64 Cast individual bytes to uint64 to avoid overflow in arithmetic. Signed-off-by: Kamil Dudka <kdudka@redhat.com> --- src/misc.c | 6 ++++-- 1 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/misc.c b/src/misc.c index e6c5e99..a5e540c 100644 --- a/src/misc.c +++ b/src/misc.c @@ -148,8 +148,10 @@ _libssh2_ntohu64(const unsigned char *buf) { unsigned long msl, lsl; - msl = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3]; - lsl = (buf[4] << 24) | (buf[5] << 16) | (buf[6] << 8) | buf[7]; + msl = ((libssh2_uint64_t)buf[0] << 24) | ((libssh2_uint64_t)buf[1] << 16) + | ((libssh2_uint64_t)buf[2] << 8) | (libssh2_uint64_t)buf[3]; + lsl = ((libssh2_uint64_t)buf[4] << 24) | ((libssh2_uint64_t)buf[5] << 16) + | ((libssh2_uint64_t)buf[6] << 8) | (libssh2_uint64_t)buf[7]; return ((libssh2_uint64_t)msl <<32) | lsl; } -- 1.7.1