diff --git a/channels/drdynvc/client/drdynvc_main.c b/channels/drdynvc/client/drdynvc_main.c index 4e068729e..ed137b541 100644 --- a/channels/drdynvc/client/drdynvc_main.c +++ b/channels/drdynvc/client/drdynvc_main.c @@ -945,7 +945,6 @@ static UINT drdynvc_write_data(drdynvcPlugin* drdynvc, UINT32 ChannelId, const B size_t pos = 0; UINT8 cbChId = 0; UINT8 cbLen = 0; - unsigned long chunkLength = 0; UINT status = CHANNEL_RC_BAD_INIT_HANDLE; DVCMAN* dvcman = NULL; @@ -993,10 +992,16 @@ static UINT drdynvc_write_data(drdynvcPlugin* drdynvc, UINT32 ChannelId, const B const INT32 pdu = (DATA_FIRST_PDU << 4) | cbChId | (cbLen << 2); Stream_Write_UINT8(data_out, WINPR_ASSERTING_INT_CAST(UINT8, pdu)); Stream_SetPosition(data_out, pos); - chunkLength = CHANNEL_CHUNK_LENGTH - pos; - Stream_Write(data_out, data, chunkLength); - data += chunkLength; - dataSize -= chunkLength; + + { + WINPR_ASSERT(pos <= CHANNEL_CHUNK_LENGTH); + const uint32_t chunkLength = + CHANNEL_CHUNK_LENGTH - WINPR_ASSERTING_INT_CAST(uint32_t, pos); + Stream_Write(data_out, data, chunkLength); + + data += chunkLength; + dataSize -= chunkLength; + } status = drdynvc_send(drdynvc, data_out); while (status == CHANNEL_RC_OK && dataSize > 0) @@ -1015,10 +1020,12 @@ static UINT drdynvc_write_data(drdynvcPlugin* drdynvc, UINT32 ChannelId, const B Stream_SetPosition(data_out, 0); Stream_Write_UINT8(data_out, (DATA_PDU << 4) | cbChId); Stream_SetPosition(data_out, pos); - chunkLength = dataSize; + uint32_t chunkLength = dataSize; + + WINPR_ASSERT(pos <= CHANNEL_CHUNK_LENGTH); if (chunkLength > CHANNEL_CHUNK_LENGTH - pos) - chunkLength = CHANNEL_CHUNK_LENGTH - pos; + chunkLength = CHANNEL_CHUNK_LENGTH - WINPR_ASSERTING_INT_CAST(uint32_t, pos); Stream_Write(data_out, data, chunkLength); data += chunkLength; diff --git a/channels/rdpei/client/rdpei_main.c b/channels/rdpei/client/rdpei_main.c index 5c3ad0ba3..df095ffb4 100644 --- a/channels/rdpei/client/rdpei_main.c +++ b/channels/rdpei/client/rdpei_main.c @@ -387,7 +387,9 @@ static UINT rdpei_send_pen_frame(RdpeiClientContext* context, RDPINPUT_PEN_FRAME frame->frameOffset = rdpei->currentPenFrameTime - rdpei->previousPenFrameTime; } - if ((error = rdpei_send_pen_event_pdu(callback, frame->frameOffset, frame, 1))) + const size_t off = WINPR_ASSERTING_INT_CAST(size_t, frame->frameOffset); + error = rdpei_send_pen_event_pdu(callback, off, frame, 1); + if (error) return error; rdpei->previousPenFrameTime = rdpei->currentPenFrameTime; diff --git a/libfreerdp/codec/progressive.c b/libfreerdp/codec/progressive.c index 88624c2bd..e0b8e9ef1 100644 --- a/libfreerdp/codec/progressive.c +++ b/libfreerdp/codec/progressive.c @@ -746,8 +746,8 @@ static INLINE int progressive_rfx_dwt_2d_decode(PROGRESSIVE_CONTEXT* WINPR_RESTR if (!progressive || !buffer || !current) return -1; - const size_t belements = 4096; - const size_t bsize = belements * sizeof(INT16); + const uint32_t belements = 4096; + const uint32_t bsize = belements * sizeof(INT16); if (reverse) memcpy(buffer, current, bsize); else if (!coeffDiff) diff --git a/libfreerdp/codec/rfx.c b/libfreerdp/codec/rfx.c index 38f1dd40b..6859724d5 100644 --- a/libfreerdp/codec/rfx.c +++ b/libfreerdp/codec/rfx.c @@ -1871,7 +1871,8 @@ skip_encoding_loop: } const RFX_TILE* tile = message->tiles[i]; - message->tilesDataSize += rfx_tile_length(tile); + const size_t tlen = rfx_tile_length(tile); + message->tilesDataSize += WINPR_ASSERTING_INT_CAST(uint32_t, tlen); } region16_uninit(&tilesRegion); @@ -1972,7 +1973,7 @@ static INLINE RFX_MESSAGE* rfx_split_message(RFX_CONTEXT* WINPR_RESTRICT context goto free_messages; } - msg->tilesDataSize += tileDataSize; + msg->tilesDataSize += WINPR_ASSERTING_INT_CAST(uint32_t, tileDataSize); WINPR_ASSERT(msg->numTiles < msg->allocatedTiles); msg->tiles[msg->numTiles++] = message->tiles[i]; diff --git a/libfreerdp/codec/rfx_rlgr.c b/libfreerdp/codec/rfx_rlgr.c index 489b09f8e..620f0b85c 100644 --- a/libfreerdp/codec/rfx_rlgr.c +++ b/libfreerdp/codec/rfx_rlgr.c @@ -226,7 +226,8 @@ int rfx_rlgr_decode(RLGR_MODE mode, const BYTE* WINPR_RESTRICT pSrcData, UINT32 if (cnt > nbits) cnt = nbits; - vk += cnt; + WINPR_ASSERT(cnt + vk <= UINT32_MAX); + vk += WINPR_ASSERTING_INT_CAST(uint32_t, cnt); } BitStream_Shift(bs, (vk % 32)); @@ -290,7 +291,8 @@ int rfx_rlgr_decode(RLGR_MODE mode, const BYTE* WINPR_RESTRICT pSrcData, UINT32 if (cnt > nbits) cnt = nbits; - vk += cnt; + WINPR_ASSERT(cnt + vk <= UINT32_MAX); + vk += WINPR_ASSERTING_INT_CAST(uint32_t, cnt); } BitStream_Shift(bs, (vk % 32)); @@ -401,7 +403,8 @@ int rfx_rlgr_decode(RLGR_MODE mode, const BYTE* WINPR_RESTRICT pSrcData, UINT32 if (cnt > nbits) cnt = nbits; - vk += cnt; + WINPR_ASSERT(cnt + vk <= UINT32_MAX); + vk += WINPR_ASSERTING_INT_CAST(uint32_t, cnt); } BitStream_Shift(bs, (vk % 32)); diff --git a/libfreerdp/codec/xcrush.c b/libfreerdp/codec/xcrush.c index 3638b43c1..80bef28f7 100644 --- a/libfreerdp/codec/xcrush.c +++ b/libfreerdp/codec/xcrush.c @@ -808,7 +808,7 @@ static int xcrush_decompress_l1(XCRUSH_CONTEXT* WINPR_RESTRICT xcrush, UINT16 MatchIndex = 0; BYTE* OutputPtr = NULL; size_t OutputLength = 0; - UINT32 OutputOffset = 0; + size_t OutputOffset = 0; BYTE* HistoryPtr = NULL; BYTE* HistoryBuffer = NULL; BYTE* HistoryBufferEnd = NULL; diff --git a/libfreerdp/codec/zgfx.c b/libfreerdp/codec/zgfx.c index 85c86db4b..2a5c85453 100644 --- a/libfreerdp/codec/zgfx.c +++ b/libfreerdp/codec/zgfx.c @@ -156,7 +156,8 @@ static INLINE void zgfx_history_buffer_ring_write(ZGFX_CONTEXT* WINPR_RESTRICT z { CopyMemory(&(zgfx->HistoryBuffer[zgfx->HistoryIndex]), src, count); - if ((zgfx->HistoryIndex += count) == zgfx->HistoryBufferSize) + zgfx->HistoryIndex += WINPR_ASSERTING_INT_CAST(uint32_t, count); + if (zgfx->HistoryIndex == zgfx->HistoryBufferSize) zgfx->HistoryIndex = 0; } else diff --git a/libfreerdp/core/gateway/http.c b/libfreerdp/core/gateway/http.c index d6f03962c..ad26373a1 100644 --- a/libfreerdp/core/gateway/http.c +++ b/libfreerdp/core/gateway/http.c @@ -849,7 +849,7 @@ static BOOL http_response_parse_header_field(HttpResponse* response, const char* if ((errno != 0) || (val > INT32_MAX)) return FALSE; - response->ContentLength = val; + response->ContentLength = WINPR_ASSERTING_INT_CAST(size_t, val); } else if (_stricmp(name, "Content-Type") == 0) { diff --git a/libfreerdp/core/streamdump.c b/libfreerdp/core/streamdump.c index 4c21ae225..f6c2f714e 100644 --- a/libfreerdp/core/streamdump.c +++ b/libfreerdp/core/streamdump.c @@ -98,14 +98,16 @@ static *flags = STREAM_MSG_SRV_RX; else *flags = STREAM_MSG_SRV_TX; - if (!Stream_EnsureRemainingCapacity(s, size)) + + const size_t usize = WINPR_ASSERTING_INT_CAST(size_t, size); + if (!Stream_EnsureRemainingCapacity(s, usize)) goto fail; - r = fread(Stream_Pointer(s), 1, size, fp); + r = fread(Stream_Pointer(s), 1, usize, fp); if (r != size) goto fail; - if (crc32 != crc32b(Stream_ConstPointer(s), size)) + if (crc32 != crc32b(Stream_ConstPointer(s), usize)) goto fail; - Stream_Seek(s, size); + Stream_Seek(s, usize); if (pOffset) { @@ -133,13 +135,14 @@ static BOOL rc = FALSE; const UINT64 t = GetTickCount64(); const BYTE* data = Stream_Buffer(s); - const UINT64 size = Stream_Length(s); + const size_t usize = Stream_Length(s); + const uint64_t size = (uint64_t)usize; if (!fp || !s) return FALSE; { - const UINT32 crc32 = crc32b(data, size); + const UINT32 crc32 = crc32b(data, usize); const BYTE received = flags & STREAM_MSG_SRV_RX; size_t r = fwrite(&t, 1, sizeof(t), fp); if (r != sizeof(t)) @@ -153,8 +156,8 @@ static r = fwrite(&size, 1, sizeof(size), fp); if (r != sizeof(size)) goto fail; - r = fwrite(data, 1, size, fp); - if (r != size) + r = fwrite(data, 1, usize, fp); + if (r != usize) goto fail; } @@ -217,10 +220,17 @@ SSIZE_T stream_dump_append(const rdpContext* context, UINT32 flags, wStream* s, if (!stream_dump_write_line(fp, flags, s)) goto fail; - rc = _ftelli64(fp); - if (rc < 0) - goto fail; + { + const int64_t rt = _ftelli64(fp); + if (rt < 0) + { + rc = -1; + goto fail; + } + rc = WINPR_ASSERTING_INT_CAST(SSIZE_T, rt); + } *offset = (size_t)rc; + fail: if (fp) (void)fclose(fp); @@ -246,7 +256,10 @@ SSIZE_T stream_dump_get(const rdpContext* context, UINT32* flags, wStream* s, si if (!stream_dump_read_line(fp, s, pts, offset, flags)) goto fail; - rc = _ftelli64(fp); + const int64_t rt = _ftelli64(fp); + if (rt < 0) + goto fail; + rc = WINPR_ASSERTING_INT_CAST(SSIZE_T, rt); fail: if (fp) (void)fclose(fp); @@ -364,7 +377,7 @@ static int stream_dump_replay_transport_read(rdpTransport* transport, wStream* s if (slp > 0) { - size_t duration = slp; + uint64_t duration = slp; do { const DWORD actual = (DWORD)MIN(duration, UINT32_MAX); diff --git a/libfreerdp/core/update.c b/libfreerdp/core/update.c index 9726d28e2..1c6c2042d 100644 --- a/libfreerdp/core/update.c +++ b/libfreerdp/core/update.c @@ -2136,7 +2136,8 @@ static BOOL update_send_create_offscreen_bitmap_order( const size_t em = Stream_GetPosition(s); Stream_SetPosition(s, bm); - Stream_Write_UINT8(s, controlFlags); /* controlFlags (1 byte) */ + Stream_Write_UINT8(s, + WINPR_ASSERTING_INT_CAST(uint8_t, controlFlags)); /* controlFlags (1 byte) */ Stream_SetPosition(s, em); update->numberOrders++; return TRUE; @@ -2173,7 +2174,8 @@ static BOOL update_send_switch_surface_order(rdpContext* context, const size_t em = Stream_GetPosition(s); Stream_SetPosition(s, bm); - Stream_Write_UINT8(s, controlFlags); /* controlFlags (1 byte) */ + Stream_Write_UINT8(s, + WINPR_ASSERTING_INT_CAST(uint8_t, controlFlags)); /* controlFlags (1 byte) */ Stream_SetPosition(s, em); update->numberOrders++; return TRUE; diff --git a/libfreerdp/emu/scard/smartcard_virtual_gids.c b/libfreerdp/emu/scard/smartcard_virtual_gids.c index e7802d4fb..d69f46749 100644 --- a/libfreerdp/emu/scard/smartcard_virtual_gids.c +++ b/libfreerdp/emu/scard/smartcard_virtual_gids.c @@ -461,7 +461,7 @@ static BOOL vgids_prepare_certificate(const rdpCertificate* cert, BYTE** kxc, DW size_t certSize = 0; BYTE* certData = freerdp_certificate_get_der(cert, &certSize); - if (!certData || (certSize == 0)) + if (!certData || (certSize == 0) || (certSize > UINT16_MAX)) { WLog_ERR(TAG, "Failed to get certificate size"); goto handle_error; @@ -475,8 +475,9 @@ static BOOL vgids_prepare_certificate(const rdpCertificate* cert, BYTE** kxc, DW } /* compress certificate data */ - destSize = certSize; - if (compress(comprData, &destSize, certData, certSize) != Z_OK) + destSize = WINPR_ASSERTING_INT_CAST(uint16_t, certSize); + if (compress(comprData, &destSize, certData, WINPR_ASSERTING_INT_CAST(uint16_t, certSize)) != + Z_OK) { WLog_ERR(TAG, "Failed to compress certificate data"); goto handle_error; @@ -485,7 +486,7 @@ static BOOL vgids_prepare_certificate(const rdpCertificate* cert, BYTE** kxc, DW /* Write container data */ s = Stream_New(NULL, destSize + 4); Stream_Write_UINT16(s, 0x0001); - Stream_Write_UINT16(s, (UINT16)certSize); + Stream_Write_UINT16(s, WINPR_ASSERTING_INT_CAST(uint16_t, certSize)); Stream_Write(s, comprData, destSize); Stream_SealLength(s); diff --git a/libfreerdp/primitives/sse/prim_add_sse3.c b/libfreerdp/primitives/sse/prim_add_sse3.c index 7d2ebc689..ec9168246 100644 --- a/libfreerdp/primitives/sse/prim_add_sse3.c +++ b/libfreerdp/primitives/sse/prim_add_sse3.c @@ -36,20 +36,20 @@ SSE3_SSD_ROUTINE(sse3_add_16s, INT16, generic->add_16s, _mm_adds_epi16, generic->add_16s(sptr1++, sptr2++, dptr++, 1)) static pstatus_t sse3_add_16s_inplace(INT16* WINPR_RESTRICT pSrcDst1, - INT16* WINPR_RESTRICT pSrcDst2, UINT32 len) + INT16* WINPR_RESTRICT pSrcDst2, UINT32 ulen) { const int shifts = 2; INT16* dptr1 = pSrcDst1; INT16* dptr2 = pSrcDst2; - if (len < 16) /* pointless if too small */ - return generic->add_16s_inplace(pSrcDst1, pSrcDst2, len); + if (ulen < 16) /* pointless if too small */ + return generic->add_16s_inplace(pSrcDst1, pSrcDst2, ulen); UINT32 offBeatMask = (1 << (shifts - 1)) - 1; if ((ULONG_PTR)pSrcDst1 & offBeatMask) { /* Incrementing the pointer skips over 16-byte boundary. */ - return generic->add_16s_inplace(pSrcDst1, pSrcDst2, len); + return generic->add_16s_inplace(pSrcDst1, pSrcDst2, ulen); } /* Get to the 16-byte boundary now. */ const size_t rem = ((UINT_PTR)dptr1 & 0xf) / sizeof(INT16); @@ -63,6 +63,7 @@ static pstatus_t sse3_add_16s_inplace(INT16* WINPR_RESTRICT pSrcDst1, dptr2 += add; } /* Use 4 128-bit SSE registers. */ + size_t len = ulen; size_t count = len >> (7 - shifts); len -= count << (7 - shifts); if (((const ULONG_PTR)dptr1 & 0x0f) || ((const ULONG_PTR)dptr2 & 0x0f)) @@ -164,7 +165,7 @@ static pstatus_t sse3_add_16s_inplace(INT16* WINPR_RESTRICT pSrcDst1, } /* Finish off the remainder. */ if (len > 0) - return generic->add_16s_inplace(dptr1, dptr2, len); + return generic->add_16s_inplace(dptr1, dptr2, WINPR_ASSERTING_INT_CAST(uint32_t, len)); return PRIMITIVES_SUCCESS; } diff --git a/libfreerdp/primitives/sse/prim_shift_sse3.c b/libfreerdp/primitives/sse/prim_shift_sse3.c index 4f9a73a2e..fb391e369 100644 --- a/libfreerdp/primitives/sse/prim_shift_sse3.c +++ b/libfreerdp/primitives/sse/prim_shift_sse3.c @@ -43,21 +43,22 @@ SSE3_SCD_ROUTINE(sse2_lShiftC_16u, UINT16, generic->lShiftC_16u, _mm_slli_epi16, SSE3_SCD_ROUTINE(sse2_rShiftC_16u, UINT16, generic->rShiftC_16u, _mm_srli_epi16, int16_t, *dptr++ = *sptr++ >> val) -static pstatus_t sse2_lShiftC_16s_inplace(INT16* WINPR_RESTRICT pSrcDst, UINT32 val, UINT32 len) +static pstatus_t sse2_lShiftC_16s_inplace(INT16* WINPR_RESTRICT pSrcDst, UINT32 val, UINT32 ulen) { + size_t len = ulen; const INT32 shifts = 2; if (val == 0) return PRIMITIVES_SUCCESS; if (val >= 16) return -1; if (len < 16) /* pointless if too small */ - return generic->lShiftC_16s_inplace(pSrcDst, val, len); + return generic->lShiftC_16s_inplace(pSrcDst, val, ulen); UINT32 offBeatMask = (1 << (shifts - 1)) - 1; if ((ULONG_PTR)pSrcDst & offBeatMask) { /* Incrementing the pointer skips over 16-byte boundary. */ - return generic->lShiftC_16s_inplace(pSrcDst, val, len); + return generic->lShiftC_16s_inplace(pSrcDst, val, ulen); } /* Get to the 16-byte boundary now. */ const UINT32 rem = ((UINT_PTR)pSrcDst & 0x0f) / sizeof(INT16); @@ -72,7 +73,7 @@ static pstatus_t sse2_lShiftC_16s_inplace(INT16* WINPR_RESTRICT pSrcDst, UINT32 } /* Use 8 128-bit SSE registers. */ - uint32_t count = len >> (8 - shifts); + size_t count = len >> (8 - shifts); len -= count << (8 - shifts); while (count--) @@ -128,7 +129,7 @@ static pstatus_t sse2_lShiftC_16s_inplace(INT16* WINPR_RESTRICT pSrcDst, UINT32 /* Finish off the remainder. */ if (len > 0) - return generic->lShiftC_16s_inplace(pSrcDst, val, len); + return generic->lShiftC_16s_inplace(pSrcDst, val, WINPR_ASSERTING_INT_CAST(uint32_t, len)); return PRIMITIVES_SUCCESS; } diff --git a/libfreerdp/primitives/sse/prim_templates.h b/libfreerdp/primitives/sse/prim_templates.h index f277fdb37..9d92b0186 100644 --- a/libfreerdp/primitives/sse/prim_templates.h +++ b/libfreerdp/primitives/sse/prim_templates.h @@ -201,8 +201,9 @@ #define SSE3_SSD_ROUTINE(_name_, _type_, _fallback_, _op_, _slowWay_) \ static pstatus_t _name_(const _type_* WINPR_RESTRICT pSrc1, \ const _type_* WINPR_RESTRICT pSrc2, _type_* WINPR_RESTRICT pDst, \ - UINT32 len) \ + UINT32 ulen) \ { \ + size_t len = ulen; \ int shifts = 0; \ const _type_* sptr1 = pSrc1; \ const _type_* sptr2 = pSrc2; \ diff --git a/server/proxy/channels/pf_channel_drdynvc.c b/server/proxy/channels/pf_channel_drdynvc.c index c8dd9c957..0d0ba6e90 100644 --- a/server/proxy/channels/pf_channel_drdynvc.c +++ b/server/proxy/channels/pf_channel_drdynvc.c @@ -511,7 +511,7 @@ static PfChannelResult DynvcTrackerPeekFn(ChannelStateTracker* tracker, BOOL fir size_t extraSize = Stream_GetRemainingLength(s); trackerState->CurrentDataFragments++; - trackerState->CurrentDataReceived += extraSize; + trackerState->CurrentDataReceived += WINPR_ASSERTING_INT_CAST(uint32_t, extraSize); if (dynChannel->packetReassembly) { diff --git a/server/proxy/channels/pf_channel_rdpdr.c b/server/proxy/channels/pf_channel_rdpdr.c index f596eb2bb..e46f5d956 100644 --- a/server/proxy/channels/pf_channel_rdpdr.c +++ b/server/proxy/channels/pf_channel_rdpdr.c @@ -1078,7 +1078,7 @@ static BOOL pf_channel_rdpdr_rewrite_device_list_to(wStream* s, UINT32 fromVersi const size_t datalen = charCount * sizeof(WCHAR); if (!Stream_EnsureRemainingCapacity(s, datalen + sizeof(UINT32))) goto fail; - Stream_Write_UINT32(s, datalen); + Stream_Write_UINT32(s, WINPR_ASSERTING_INT_CAST(uint32_t, datalen)); const SSIZE_T rcw = Stream_Write_UTF16_String_From_UTF8( s, charCount, device.PreferredDosName, charCount - 1, TRUE); diff --git a/winpr/libwinpr/clipboard/synthetic_file.c b/winpr/libwinpr/clipboard/synthetic_file.c index a9131499a..e17120598 100644 --- a/winpr/libwinpr/clipboard/synthetic_file.c +++ b/winpr/libwinpr/clipboard/synthetic_file.c @@ -581,7 +581,9 @@ static BOOL process_files(wClipboard* clipboard, const char* data, UINT32 pSize, if (strncmp(data, prefix, prefix_len) != 0) return FALSE; data += prefix_len; - pSize -= prefix_len; + if (pSize < prefix_len) + return FALSE; + pSize -= WINPR_ASSERTING_INT_CAST(uint32_t, prefix_len); BOOL rc = FALSE; char* copy = strndup(data, pSize); @@ -592,10 +594,12 @@ static BOOL process_files(wClipboard* clipboard, const char* data, UINT32 pSize, char* tok = strtok_s(copy, "\n", &endptr); while (tok) { - size_t tok_len = strnlen(tok, pSize); + const size_t tok_len = strnlen(tok, pSize); if (!process_uri(clipboard, tok, tok_len)) goto fail; - pSize -= tok_len; + if (pSize < tok_len) + goto fail; + pSize -= WINPR_ASSERTING_INT_CAST(uint32_t, tok_len); tok = strtok_s(NULL, "\n", &endptr); } rc = TRUE; diff --git a/winpr/libwinpr/utils/wlog/PacketMessage.c b/winpr/libwinpr/utils/wlog/PacketMessage.c index c91f3f061..5ea4f8eea 100644 --- a/winpr/libwinpr/utils/wlog/PacketMessage.c +++ b/winpr/libwinpr/utils/wlog/PacketMessage.c @@ -333,13 +333,16 @@ BOOL WLog_PacketMessage_Write(wPcap* pcap, void* data, size_t length, DWORD flag { tcp.SequenceNumber = g_OutboundSequenceNumber; tcp.AcknowledgementNumber = g_InboundSequenceNumber; - g_OutboundSequenceNumber += length; + WINPR_ASSERT(length + g_OutboundSequenceNumber <= UINT32_MAX); + g_OutboundSequenceNumber += WINPR_ASSERTING_INT_CAST(uint32_t, length); } else { tcp.SequenceNumber = g_InboundSequenceNumber; tcp.AcknowledgementNumber = g_OutboundSequenceNumber; - g_InboundSequenceNumber += length; + + WINPR_ASSERT(length + g_InboundSequenceNumber <= UINT32_MAX); + g_InboundSequenceNumber += WINPR_ASSERTING_INT_CAST(uint32_t, length); } tcp.Offset = 5; @@ -352,8 +355,9 @@ BOOL WLog_PacketMessage_Write(wPcap* pcap, void* data, size_t length, DWORD flag record.length = length; const size_t offset = 14 + 20 + 20; WINPR_ASSERT(record.length <= UINT32_MAX - offset); - record.header.incl_len = (UINT32)record.length + offset; - record.header.orig_len = (UINT32)record.length + offset; + const uint32_t rloff = WINPR_ASSERTING_INT_CAST(uint32_t, record.length + offset); + record.header.incl_len = rloff; + record.header.orig_len = rloff; record.next = NULL; UINT64 ns = winpr_GetUnixTimeNS();