On 13.12.2010 12:38, Julian Foad wrote:
> On Fri, 2010-12-10, Danny Trebbien wrote:
> Hi Daniel.
>
> I haven't looked at your patch v5 yet, because this Git diff doesn't
> look quite right. How will this memcmp expression work properly if the
> two strings being compared are different lengths?
>> - if (translated_eol != NULL && DIFFERENT_EOL_STRINGS(eol_str, eol_str_len,
>> - newline_buf,
>> newline_len))
>> + if (translated_eol != NULL &&
>> + memcmp(eol_str,
>> + newline_buf,
>> + eol_str_len < newline_len ? eol_str_len : newline_len) != 0)
Not very well, because it's prefix matching that doesn't actually take
different string lengths into account and you can get false matches.
e.g., if eol_str == '\r' (ancient mac mode) and newline_bug == '\r\n'
... what you want is more like:
if (translated_eol != NULL &&
(eol_str_len != newline_len ||
memcmp(eol_str, newline_buff, eol_str_len) != 0))
-- Brane