mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-26 05:56:14 +01:00
Don't read past the end of the string. (#334471, Morten Welinder)
2006-03-14 Matthias Clasen <mclasen@redhat.com> * glib/gutils.c (g_parse_debug_string): Don't read past the end of the string. (#334471, Morten Welinder)
This commit is contained in:
parent
99024c7ea7
commit
9e58246669
@ -1,5 +1,11 @@
|
||||
2006-03-14 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* glib/gutils.c (g_parse_debug_string): Don't read past the
|
||||
end of the string. (#334471, Morten Welinder)
|
||||
|
||||
* tests/testglib.c (test_g_parse_debug_string): Add testss
|
||||
for g_parse_debug_string.
|
||||
|
||||
* glib/goption.c (parse_short_option): Don't create the
|
||||
option_name twice. (#334519, Chris Wilson)
|
||||
|
||||
|
@ -1,5 +1,11 @@
|
||||
2006-03-14 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* glib/gutils.c (g_parse_debug_string): Don't read past the
|
||||
end of the string. (#334471, Morten Welinder)
|
||||
|
||||
* tests/testglib.c (test_g_parse_debug_string): Add testss
|
||||
for g_parse_debug_string.
|
||||
|
||||
* glib/goption.c (parse_short_option): Don't create the
|
||||
option_name twice. (#334519, Chris Wilson)
|
||||
|
||||
|
@ -1,5 +1,11 @@
|
||||
2006-03-14 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* glib/gutils.c (g_parse_debug_string): Don't read past the
|
||||
end of the string. (#334471, Morten Welinder)
|
||||
|
||||
* tests/testglib.c (test_g_parse_debug_string): Add testss
|
||||
for g_parse_debug_string.
|
||||
|
||||
* glib/goption.c (parse_short_option): Don't create the
|
||||
option_name twice. (#334519, Chris Wilson)
|
||||
|
||||
|
@ -591,23 +591,21 @@ g_parse_debug_string (const gchar *string,
|
||||
{
|
||||
const gchar *p = string;
|
||||
const gchar *q;
|
||||
gboolean done = FALSE;
|
||||
|
||||
while (*p && !done)
|
||||
while (*p)
|
||||
{
|
||||
q = strchr (p, ':');
|
||||
if (!q)
|
||||
{
|
||||
q = p + strlen(p);
|
||||
done = TRUE;
|
||||
}
|
||||
q = p + strlen(p);
|
||||
|
||||
for (i=0; i<nkeys; i++)
|
||||
for (i = 0; i < nkeys; i++)
|
||||
if (g_ascii_strncasecmp (keys[i].key, p, q - p) == 0 &&
|
||||
keys[i].key[q - p] == '\0')
|
||||
result |= keys[i].value;
|
||||
|
||||
p = q + 1;
|
||||
p = q;
|
||||
if (*p == ':')
|
||||
p++;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -432,6 +432,31 @@ test_g_mkdir_with_parents (void)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void
|
||||
test_g_parse_debug_string (void)
|
||||
{
|
||||
GDebugKey keys[3] = {
|
||||
{ "foo", 1 },
|
||||
{ "bar", 2 },
|
||||
{ "baz", 4 }
|
||||
};
|
||||
guint n_keys = 3;
|
||||
guint result;
|
||||
|
||||
result = g_parse_debug_string ("bar:foo:blubb", keys, n_keys);
|
||||
g_assert (result == 3);
|
||||
|
||||
result = g_parse_debug_string (":baz::_E@~!_::", keys, n_keys);
|
||||
g_assert (result == 4);
|
||||
|
||||
result = g_parse_debug_string ("", keys, n_keys);
|
||||
g_assert (result == 0);
|
||||
|
||||
result = g_parse_debug_string (" : ", keys, n_keys);
|
||||
g_assert (result == 0);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main (int argc,
|
||||
char *argv[])
|
||||
@ -1488,7 +1513,9 @@ main (int argc,
|
||||
close (fd);
|
||||
g_clear_error (&error);
|
||||
remove (name_used);
|
||||
|
||||
|
||||
test_g_parse_debug_string ();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user