mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-08-21 08:28:53 +02: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:
committed by
Matthias Clasen
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>
|
2005-02-07 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* glib/glib.symbols:
|
* 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>
|
2005-02-07 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* glib/glib.symbols:
|
* 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>
|
2005-02-07 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* glib/glib.symbols:
|
* 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>
|
2005-02-07 Matthias Clasen <mclasen@redhat.com>
|
||||||
|
|
||||||
* glib/glib.symbols:
|
* glib/glib.symbols:
|
||||||
|
@@ -3014,6 +3014,13 @@ g_key_file_parse_value_as_string (GKeyFile *key_file,
|
|||||||
*q = '\\';
|
*q = '\\';
|
||||||
break;
|
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:
|
default:
|
||||||
if (pieces && *p == key_file->list_separator)
|
if (pieces && *p == key_file->list_separator)
|
||||||
*q = 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++;
|
q++;
|
||||||
p++;
|
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';
|
*q = '\0';
|
||||||
if (pieces)
|
if (pieces)
|
||||||
{
|
{
|
||||||
|
@@ -1297,7 +1297,7 @@ g_option_context_parse (GOptionContext *context,
|
|||||||
if (!nulled_out[j])
|
if (!nulled_out[j])
|
||||||
{
|
{
|
||||||
if (!new_arg)
|
if (!new_arg)
|
||||||
new_arg = g_malloc (strlen (arg));
|
new_arg = g_malloc (strlen (arg) + 1);
|
||||||
new_arg[arg_index++] = arg[j];
|
new_arg[arg_index++] = arg[j];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -111,7 +111,8 @@ check_PROGRAMS = $(test_programs) $(test_script_support_programs)
|
|||||||
|
|
||||||
TESTS = $(test_programs) $(test_scripts)
|
TESTS = $(test_programs) $(test_scripts)
|
||||||
TESTS_ENVIRONMENT = srcdir=$(srcdir) \
|
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)
|
progs_ldadd = $(EFENCE) $(libglib) $(EFENCE)
|
||||||
thread_ldadd = $(libgthread) $(G_THREAD_LIBS) $(progs_ldadd)
|
thread_ldadd = $(libgthread) $(G_THREAD_LIBS) $(progs_ldadd)
|
||||||
|
@@ -1,5 +1,4 @@
|
|||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
#include "goption.h"
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
int error_test1_int;
|
int error_test1_int;
|
||||||
@@ -837,6 +836,28 @@ rest_test5 (void)
|
|||||||
g_option_context_free (context);
|
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
|
int
|
||||||
main (int argc, char **argv)
|
main (int argc, char **argv)
|
||||||
@@ -880,5 +901,8 @@ main (int argc, char **argv)
|
|||||||
rest_test4 ();
|
rest_test4 ();
|
||||||
rest_test5 ();
|
rest_test5 ();
|
||||||
|
|
||||||
|
/* test for bug 166609 */
|
||||||
|
unknown_short_test ();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user