mirror of
https://git.tartarus.org/simon/putty.git
synced 2025-07-14 09:37:34 -05:00
Fix handling of max_data_size == 0.
When I reworked the support for rekeying after a certain amount of data had been sent, I forgot the part where configuring the max data limit to zero means 'never rekey due to data transfer volume'. So I was incautiously checking the 'running' flag in the new DataTransferStats to find out whether we needed to rekey, forgetting that sometimes running=false means the transfer limit has expired, and sometimes it means there never was one in the first place. To fix this, I've got rid of the boolean return value from DTS_CONSUME and turned it into an 'expired' flag in DataTransferStats, separate from the 'running' flag. Now everything consistently checks 'expired' to find out whether to rekey, and there's a new reset function that reliably clears 'expired' but sets 'running' depending on whether the size is nonzero. (Also, while I'm at it, I've turned the DTS_CONSUME macro into an inline function, because that's becoming my general preference now that C99 is allowed in this code base.)
This commit is contained in:
@ -514,7 +514,7 @@ static void ssh2_bpp_handle_input(BinaryPacketProtocol *bpp)
|
||||
|
||||
s->length = s->payload + 5;
|
||||
|
||||
DTS_CONSUME(s->stats, in, s->packetlen);
|
||||
dts_consume(&s->stats->in, s->packetlen);
|
||||
|
||||
s->pktin->sequence = s->in.sequence++;
|
||||
|
||||
@ -762,8 +762,7 @@ static void ssh2_bpp_format_packet_inner(struct ssh2_bpp_state *s, PktOut *pkt)
|
||||
|
||||
s->out.sequence++; /* whether or not we MACed */
|
||||
|
||||
DTS_CONSUME(s->stats, out, origlen + padding);
|
||||
|
||||
dts_consume(&s->stats->out, origlen + padding);
|
||||
}
|
||||
|
||||
static void ssh2_bpp_format_packet(struct ssh2_bpp_state *s, PktOut *pkt)
|
||||
|
Reference in New Issue
Block a user