From 5b6c08acfb197623686e9d973f584a6f155aa1e3 Mon Sep 17 00:00:00 2001 From: "Sergio R. Caprile" Date: Mon, 9 Nov 2026 12:00:04 -0300 Subject: [PATCH] unbreak VC98 weird 64-bit handling --- mongoose.c | 10 +++++----- src/ws.c | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/mongoose.c b/mongoose.c index 98d43685..28a267f6 100644 --- a/mongoose.c +++ b/mongoose.c @@ -30530,11 +30530,11 @@ static size_t ws_process(uint8_t *buf, size_t len, struct ws_msg *msg, msg->header_len = 4 + mask_len; msg->data_len = (((size_t) buf[2]) << 8) | buf[3]; } else if (len >= 10 + mask_len) { - uint64_t data_len = ((uint64_t) be32(buf + 2) << 32) + be32(buf + 6); - // Sanity check, and integer overflow protection for the boundary check below - // data_len should not be larger than 1 GB - if (data_len > 1024 * 1024 * 1024) return 0; - msg->data_len = (size_t) data_len; + // Sanity check and protect the boundary check below: data_len should not + // be larger than 1 GB, so it fits in 32-bits + uint32_t hi = be32(buf + 2), lo = be32(buf + 6); + if (hi != 0 || lo > 1024U * 1024U * 1024U) return 0; + msg->data_len = (size_t) lo; msg->header_len = 10 + mask_len; } } diff --git a/src/ws.c b/src/ws.c index a3f1337f..7908f0f0 100644 --- a/src/ws.c +++ b/src/ws.c @@ -79,11 +79,11 @@ static size_t ws_process(uint8_t *buf, size_t len, struct ws_msg *msg, msg->header_len = 4 + mask_len; msg->data_len = (((size_t) buf[2]) << 8) | buf[3]; } else if (len >= 10 + mask_len) { - uint64_t data_len = ((uint64_t) be32(buf + 2) << 32) + be32(buf + 6); - // Sanity check, and integer overflow protection for the boundary check below - // data_len should not be larger than 1 GB - if (data_len > 1024 * 1024 * 1024) return 0; - msg->data_len = (size_t) data_len; + // Sanity check and protect the boundary check below: data_len should not + // be larger than 1 GB, so it fits in 32-bits + uint32_t hi = be32(buf + 2), lo = be32(buf + 6); + if (hi != 0 || lo > 1024U * 1024U * 1024U) return 0; + msg->data_len = (size_t) lo; msg->header_len = 10 + mask_len; } }