mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-01-27 06:26:15 +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>
|
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
|
* glib/goption.c (parse_short_option): Don't create the
|
||||||
option_name twice. (#334519, Chris Wilson)
|
option_name twice. (#334519, Chris Wilson)
|
||||||
|
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
2006-03-14 Matthias Clasen <mclasen@redhat.com>
|
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
|
* glib/goption.c (parse_short_option): Don't create the
|
||||||
option_name twice. (#334519, Chris Wilson)
|
option_name twice. (#334519, Chris Wilson)
|
||||||
|
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
2006-03-14 Matthias Clasen <mclasen@redhat.com>
|
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
|
* glib/goption.c (parse_short_option): Don't create the
|
||||||
option_name twice. (#334519, Chris Wilson)
|
option_name twice. (#334519, Chris Wilson)
|
||||||
|
|
||||||
|
@ -591,23 +591,21 @@ g_parse_debug_string (const gchar *string,
|
|||||||
{
|
{
|
||||||
const gchar *p = string;
|
const gchar *p = string;
|
||||||
const gchar *q;
|
const gchar *q;
|
||||||
gboolean done = FALSE;
|
|
||||||
|
|
||||||
while (*p && !done)
|
while (*p)
|
||||||
{
|
{
|
||||||
q = strchr (p, ':');
|
q = strchr (p, ':');
|
||||||
if (!q)
|
if (!q)
|
||||||
{
|
q = p + strlen(p);
|
||||||
q = p + strlen(p);
|
|
||||||
done = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i=0; i<nkeys; i++)
|
for (i = 0; i < nkeys; i++)
|
||||||
if (g_ascii_strncasecmp (keys[i].key, p, q - p) == 0 &&
|
if (g_ascii_strncasecmp (keys[i].key, p, q - p) == 0 &&
|
||||||
keys[i].key[q - p] == '\0')
|
keys[i].key[q - p] == '\0')
|
||||||
result |= keys[i].value;
|
result |= keys[i].value;
|
||||||
|
|
||||||
p = q + 1;
|
p = q;
|
||||||
|
if (*p == ':')
|
||||||
|
p++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -432,6 +432,31 @@ test_g_mkdir_with_parents (void)
|
|||||||
return TRUE;
|
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
|
int
|
||||||
main (int argc,
|
main (int argc,
|
||||||
char *argv[])
|
char *argv[])
|
||||||
@ -1488,7 +1513,9 @@ main (int argc,
|
|||||||
close (fd);
|
close (fd);
|
||||||
g_clear_error (&error);
|
g_clear_error (&error);
|
||||||
remove (name_used);
|
remove (name_used);
|
||||||
|
|
||||||
|
test_g_parse_debug_string ();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user