Don't write out of bounds.

2005-02-08  Matthias Clasen  <mclasen@redhat.com>

	* 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.
This commit is contained in:
Matthias Clasen 2005-02-08 15:14:31 +00:00 committed by Matthias Clasen
parent f18cab0ce3
commit 348da88e27
8 changed files with 90 additions and 8 deletions

View File

@ -1,3 +1,16 @@
2005-02-08 Matthias Clasen <mclasen@redhat.com>
* 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 <mclasen@redhat.com>
* glib/glib.symbols:

View File

@ -1,3 +1,16 @@
2005-02-08 Matthias Clasen <mclasen@redhat.com>
* 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 <mclasen@redhat.com>
* glib/glib.symbols:

View File

@ -1,3 +1,16 @@
2005-02-08 Matthias Clasen <mclasen@redhat.com>
* 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 <mclasen@redhat.com>
* glib/glib.symbols:

View File

@ -1,3 +1,16 @@
2005-02-08 Matthias Clasen <mclasen@redhat.com>
* 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 <mclasen@redhat.com>
* glib/glib.symbols:

View File

@ -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)
{

View File

@ -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];
}
}

View File

@ -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)

View File

@ -1,5 +1,4 @@
#include <glib.h>
#include "goption.h"
#include <string.h>
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;
}