diff --git a/ChangeLog b/ChangeLog index 3101db1c5..49b5ef8bc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2005-02-08 Matthias Clasen + + * glib/gkeyfile.c (g_key_file_parse_value_as_string): Don't + write out of bounds. + + * glib/goption.c (g_option_context_parse): Fix a + one-too-short memory allocation. (#166609, Nicolas Laurent) + + * tests/Makefile.am (TESTS_ENVIRONMENT): Add tests with + MALLOC_CHECK_. + + * tests/option-test.c: Add a test for unkown short options. + 2005-02-07 Matthias Clasen * glib/glib.symbols: diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 3101db1c5..49b5ef8bc 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,16 @@ +2005-02-08 Matthias Clasen + + * glib/gkeyfile.c (g_key_file_parse_value_as_string): Don't + write out of bounds. + + * glib/goption.c (g_option_context_parse): Fix a + one-too-short memory allocation. (#166609, Nicolas Laurent) + + * tests/Makefile.am (TESTS_ENVIRONMENT): Add tests with + MALLOC_CHECK_. + + * tests/option-test.c: Add a test for unkown short options. + 2005-02-07 Matthias Clasen * glib/glib.symbols: diff --git a/ChangeLog.pre-2-12 b/ChangeLog.pre-2-12 index 3101db1c5..49b5ef8bc 100644 --- a/ChangeLog.pre-2-12 +++ b/ChangeLog.pre-2-12 @@ -1,3 +1,16 @@ +2005-02-08 Matthias Clasen + + * glib/gkeyfile.c (g_key_file_parse_value_as_string): Don't + write out of bounds. + + * glib/goption.c (g_option_context_parse): Fix a + one-too-short memory allocation. (#166609, Nicolas Laurent) + + * tests/Makefile.am (TESTS_ENVIRONMENT): Add tests with + MALLOC_CHECK_. + + * tests/option-test.c: Add a test for unkown short options. + 2005-02-07 Matthias Clasen * glib/glib.symbols: diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 3101db1c5..49b5ef8bc 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,16 @@ +2005-02-08 Matthias Clasen + + * glib/gkeyfile.c (g_key_file_parse_value_as_string): Don't + write out of bounds. + + * glib/goption.c (g_option_context_parse): Fix a + one-too-short memory allocation. (#166609, Nicolas Laurent) + + * tests/Makefile.am (TESTS_ENVIRONMENT): Add tests with + MALLOC_CHECK_. + + * tests/option-test.c: Add a test for unkown short options. + 2005-02-07 Matthias Clasen * glib/glib.symbols: diff --git a/glib/gkeyfile.c b/glib/gkeyfile.c index 6fe8eeed0..f04791974 100644 --- a/glib/gkeyfile.c +++ b/glib/gkeyfile.c @@ -3014,6 +3014,13 @@ g_key_file_parse_value_as_string (GKeyFile *key_file, *q = '\\'; break; + case '\0': + g_set_error (error, G_KEY_FILE_ERROR, + G_KEY_FILE_ERROR_INVALID_VALUE, + _("Key file contains escape character " + "at end of line")); + break; + default: if (pieces && *p == key_file->list_separator) *q = key_file->list_separator; @@ -3049,15 +3056,13 @@ g_key_file_parse_value_as_string (GKeyFile *key_file, } } + if (*p == '\0') + break; + q++; p++; } - if (p > value && p[-1] == '\\' && q[-1] != '\\' && *error == NULL) - g_set_error (error, G_KEY_FILE_ERROR, - G_KEY_FILE_ERROR_INVALID_VALUE, - _("Key file contains escape character at end of line")); - *q = '\0'; if (pieces) { diff --git a/glib/goption.c b/glib/goption.c index a8a124e86..a7ff836bc 100644 --- a/glib/goption.c +++ b/glib/goption.c @@ -1297,7 +1297,7 @@ g_option_context_parse (GOptionContext *context, if (!nulled_out[j]) { if (!new_arg) - new_arg = g_malloc (strlen (arg)); + new_arg = g_malloc (strlen (arg) + 1); new_arg[arg_index++] = arg[j]; } } diff --git a/tests/Makefile.am b/tests/Makefile.am index e78fd00fa..a3507aa30 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -111,7 +111,8 @@ check_PROGRAMS = $(test_programs) $(test_script_support_programs) TESTS = $(test_programs) $(test_scripts) TESTS_ENVIRONMENT = srcdir=$(srcdir) \ - LIBCHARSET_ALIAS_DIR=$(top_builddir)/glib/libcharset + LIBCHARSET_ALIAS_DIR=$(top_builddir)/glib/libcharset \ + MALLOC_CHECK_=2 progs_ldadd = $(EFENCE) $(libglib) $(EFENCE) thread_ldadd = $(libgthread) $(G_THREAD_LIBS) $(progs_ldadd) diff --git a/tests/option-test.c b/tests/option-test.c index a40faecf0..9642b0fec 100644 --- a/tests/option-test.c +++ b/tests/option-test.c @@ -1,5 +1,4 @@ #include -#include "goption.h" #include int error_test1_int; @@ -837,6 +836,28 @@ rest_test5 (void) g_option_context_free (context); } +void +unknown_short_test (void) +{ + GOptionContext *context; + gboolean retval; + GError *error = NULL; + gchar **argv; + int argc; + GOptionEntry entries [] = { { NULL } }; + + context = g_option_context_new (NULL); + g_option_context_add_main_entries (context, entries, NULL); + + /* Now try parsing */ + argv = split_string ("program -0", &argc); + + retval = g_option_context_parse (context, &argc, &argv, &error); + g_assert (!retval); + + g_strfreev (argv); + g_option_context_free (context); +} int main (int argc, char **argv) @@ -880,5 +901,8 @@ main (int argc, char **argv) rest_test4 (); rest_test5 (); + /* test for bug 166609 */ + unknown_short_test (); + return 0; }