diff --git a/mongoose.c b/mongoose.c index 28a267f6..15209fc8 100644 --- a/mongoose.c +++ b/mongoose.c @@ -30560,9 +30560,11 @@ static size_t mkhdr(size_t len, int op, bool is_client, uint8_t *buf) { } else { uint32_t tmp; buf[1] = 127; - tmp = mg_htonl((uint32_t) (((uint64_t) len) >> 32)); + tmp = (sizeof(len) <= sizeof(uint32_t) || len <= 0xffffffffU) + ? 0 // avoid some 32-bit platforms breaking it (VC98) + : mg_htonl((uint32_t) ((uint64_t) len >> 32)); memcpy(&buf[2], &tmp, sizeof(tmp)); - tmp = mg_htonl((uint32_t) (len & 0xffffffffU)); + tmp = mg_htonl((uint32_t) len); memcpy(&buf[6], &tmp, sizeof(tmp)); n = 10; } diff --git a/src/ws.c b/src/ws.c index 7908f0f0..6e7435b5 100644 --- a/src/ws.c +++ b/src/ws.c @@ -109,9 +109,11 @@ static size_t mkhdr(size_t len, int op, bool is_client, uint8_t *buf) { } else { uint32_t tmp; buf[1] = 127; - tmp = mg_htonl((uint32_t) (((uint64_t) len) >> 32)); + tmp = (sizeof(len) <= sizeof(uint32_t) || len <= 0xffffffffU) + ? 0 // avoid some 32-bit platforms breaking it (VC98) + : mg_htonl((uint32_t) ((uint64_t) len >> 32)); memcpy(&buf[2], &tmp, sizeof(tmp)); - tmp = mg_htonl((uint32_t) (len & 0xffffffffU)); + tmp = mg_htonl((uint32_t) len); memcpy(&buf[6], &tmp, sizeof(tmp)); n = 10; }