Ensure g_key_file_load_from_file() strips a \r on a 4 KB boundary

When g_key_file_parse_data() encountered \n, it was checking the previous
character in the current input buffer for a \r to erase, rather than the
previous character in the parse buffer.  If g_key_file_load_from_file()
was given a file with a \r\n sequence straddling a 4 KB boundary, the \n
would be the first character in the input buffer, so the \r would not be
properly stripped.

Bug #640695.

Found-by: Jan Harkes <jaharkes@cs.cmu.edu>
This commit is contained in:
Benjamin Gilbert 2011-01-27 02:04:00 -05:00 committed by Matthias Clasen
parent e644b29190
commit 440e6f4a61

View File

@ -953,7 +953,9 @@ g_key_file_parse_data (GKeyFile *key_file,
{
if (data[i] == '\n')
{
if (i > 0 && data[i - 1] == '\r')
if (key_file->parse_buffer->len > 0
&& (key_file->parse_buffer->str[key_file->parse_buffer->len - 1]
== '\r'))
g_string_erase (key_file->parse_buffer,
key_file->parse_buffer->len - 1,
1);