diff --git a/src/etcp.c b/src/etcp.c index 15ec8894..92c0a47a 100644 --- a/src/etcp.c +++ b/src/etcp.c @@ -70,7 +70,7 @@ static int inflight_seq_cmp(const void* a, const void* b) { static void feed_dgram_to_asm(struct ETCP_CONN* etcp, struct PKTNORM* pn, uint8_t* dgram, uint16_t dgram_len, - uint8_t** asm_buf, uint16_t* asm_len, uint16_t* asm_cap, + uint8_t** asm_buf, uint16_t* asm_len, uint32_t* asm_cap, uint32_t* returned) { uint32_t need = (uint32_t)*asm_len + dgram_len; if (need >= ASM_BUF_MAX_SIZE) { @@ -78,9 +78,10 @@ static void feed_dgram_to_asm(struct ETCP_CONN* etcp, struct PKTNORM* pn, return; } if (need > *asm_cap) { - uint16_t new_cap = *asm_cap ? *asm_cap : 256; + uint32_t new_cap = *asm_cap ? *asm_cap : 256; while (new_cap < need) new_cap *= 2; - uint8_t* new_buf = u_realloc(*asm_buf, new_cap); + if (new_cap > 0xFFFF) new_cap = 0xFFFF; + uint8_t* new_buf = u_realloc(*asm_buf, (uint16_t)new_cap); if (!new_buf) return; *asm_buf = new_buf; *asm_cap = new_cap; @@ -138,7 +139,7 @@ static void etcp_return_inflight_to_normalizer(struct ETCP_CONN* etcp) { uint8_t* asm_buf = NULL; uint16_t asm_len = 0; - uint16_t asm_cap = 0; + uint32_t asm_cap = 0; uint32_t returned_packets = 0; for (int i = 0; i < inflight_count; i++) {