From 440e6f4a61e27ee95994cd6a57c9d977a4376755 Mon Sep 17 00:00:00 2001 From: Benjamin Gilbert Date: Thu, 27 Jan 2011 02:04:00 -0500 Subject: [PATCH] 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 --- glib/gkeyfile.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/glib/gkeyfile.c b/glib/gkeyfile.c index 1f2a856..24033e7 100644 --- a/glib/gkeyfile.c +++ b/glib/gkeyfile.c @@ -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); -- 2.7.4