From: Andreas Steffen Date: Fri, 2 Mar 2018 13:45:28 +0000 (+0100) Subject: bio_reader: Fix read_uint24 X-Git-Tag: 5.7.0dr2~3^2~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e1833a90ba24c9c8d2dfccad5b331320b781c403;p=thirdparty%2Fstrongswan.git bio_reader: Fix read_uint24 --- diff --git a/src/libstrongswan/bio/bio_reader.c b/src/libstrongswan/bio/bio_reader.c index 82e405002e..e6b459bbf3 100644 --- a/src/libstrongswan/bio/bio_reader.c +++ b/src/libstrongswan/bio/bio_reader.c @@ -122,13 +122,16 @@ static bool read_uint16_internal(private_bio_reader_t *this, uint16_t *res, static bool read_uint24_internal(private_bio_reader_t *this, uint32_t *res, bool from_end) { + uint32_t tmp; + if (this->buf.len < 3) { DBG1(DBG_LIB, "%d bytes insufficient to parse u_int24 data", this->buf.len); return FALSE; } - *res = untoh32(get_ptr_end(this, 3, from_end)) >> 8; + memcpy(&tmp, get_ptr_end(this, 3, from_end), 3); + *res = ntohl(tmp) >> 8; this->buf = chunk_skip_end(this->buf, 3, from_end); return TRUE; }