Re: Infinite loop in cascade_filter_fn()
- From
- Henrik Grubbström <grubba@roxen.com>
- Date
- Nov 25, 2011, 15:43 UTC
- Message-ID
- <Pine.GSO.4.63.1111251629500.22588@shipon.roxen.com>
- In-Reply-To
- <Pine.GSO.4.63.1111231801580.5099@shipon.roxen.com>
On Wed, 23 Nov 2011, Henrik Grubbström wrote:
> Hi. > > My git repository walker just got bitten by what seems to be a reasonably new > bug in convert.c:cascade_filter_fn() (git 1.7.8.rc3 (gentoo)).
After some tracing, the problem is triggered by the variable "remaining" being set to 1 in the beginning of the cascade_filter_fn() loop, which causes filter "two" to be called with an output buffer size of 1. Filter "two" in this case is lf_to_crlf_filter_fn(), and the next input character is a "\n". lf_to_crlf_filter_fn() wants to convert this to "\r\n", but that doesn't fit into the buffer, so it breaks out and returns zero. Upon seing the zero cascade_filter_fn() thinks all is well, even though nothing has happened, and loops.
The bug is probably that lf_to_crlf_filter_fn() should return non-zero in this case (ie o and/or i being zero).
> Thanks,
-- Henrik Grubbström grubba@roxen.com Roxen Internet Software AB