mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-11 15:06:14 +01:00
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:
parent
f18cab0ce3
commit
348da88e27
13
ChangeLog
13
ChangeLog
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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];
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user