[Bug] compressEnd does not free up the MCCP buffer if data fails to send.
< Newer Topic
:: Older Topic >
AFKMud 2.1.3
Pages:<< prev 1 next >>
#1 Mar 8, 2010 1:46 am
Black Hand
GroupAdministrators
Posts3,713
JoinedJan 1, 2002
Bug: compressEnd does not free up the MCCP buffer if data fails to send.
Danger: Medium - If you have a lot of people using MCCP disconnecting regularly and not able to receive data, it leaks 4096 bytes every time that happens.
Discovered in: AFKMud 2.1.3
Found by: Nick Gammon
Fixed by: Nick Gammon
---
features.cpp, descriptor_data::compressEnd
Locate:
Change to:
As explained by Nick, if data can't be written to the descriptor when shutting down compression, a chunk of 4096 bytes will be left leaking.
Enough players doing this by disconnecting and reconnecting a lot can lead to substantial memory loss and lead to the need for premature reboots.
Danger: Medium - If you have a lot of people using MCCP disconnecting regularly and not able to receive data, it leaks 4096 bytes every time that happens.
Discovered in: AFKMud 2.1.3
Found by: Nick Gammon
Fixed by: Nick Gammon
---
features.cpp, descriptor_data::compressEnd
Locate:
if( deflate( mccp->out_compress, Z_FINISH ) != Z_STREAM_END ) return false; if( !process_compressed( ) ) /* try to send any residual data */ return false;
Change to:
if( deflate( mccp->out_compress, Z_FINISH ) == Z_STREAM_END ) process_compressed(); /* try to send any residual data */
As explained by Nick, if data can't be written to the descriptor when shutting down compression, a chunk of 4096 bytes will be left leaking.
Enough players doing this by disconnecting and reconnecting a lot can lead to substantial memory loss and lead to the need for premature reboots.
Pages:<< prev 1 next >>