summaryrefslogtreecommitdiff
path: root/gtk/gtktreemodel.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2007-01-08 14:49:30 +0000
committerMatthias Clasen <matthiasc@src.gnome.org>2007-01-08 14:49:30 +0000
commit32e1c3b4d21eedc335666a069e0c954c98e68b86 (patch)
tree4eb9761eee69ce7ca322d9743f80dda6dba34534 /gtk/gtktreemodel.c
parent74280fde6f26ec46c9d9cb5be074aaf2b8610021 (diff)
downloadgtk+-32e1c3b4d21eedc335666a069e0c954c98e68b86.tar.gz
Don't corrupt memory when faced with paths with ridiculously large
2007-01-08 Matthias Clasen <mclasen@redhat.com> * gtk/gtktreemodel.c (gtk_tree_path_to_string): Don't corrupt memory when faced with paths with ridiculously large indices. Found by the GTKVTS test suite. svn path=/trunk/; revision=17116
Diffstat (limited to 'gtk/gtktreemodel.c')
-rw-r--r--gtk/gtktreemodel.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/gtk/gtktreemodel.c b/gtk/gtktreemodel.c
index a34e2af2ff..88022b805b 100644
--- a/gtk/gtktreemodel.c
+++ b/gtk/gtktreemodel.c
@@ -494,22 +494,24 @@ gtk_tree_path_new_from_indices (gint first_index,
gchar *
gtk_tree_path_to_string (GtkTreePath *path)
{
- gchar *retval, *ptr;
- gint i;
+ gchar *retval, *ptr, *end;
+ gint i, n;
g_return_val_if_fail (path != NULL, NULL);
if (path->depth == 0)
return NULL;
- ptr = retval = g_new0 (gchar, path->depth*8);
- g_sprintf (retval, "%d", path->indices[0]);
- while (*ptr != '\000')
+ n = path->depth * 12;
+ ptr = retval = g_new0 (gchar, n);
+ end = ptr + n;
+ g_snprintf (retval, end - ptr, "%d", path->indices[0]);
+ while (*ptr != '\000')
ptr++;
for (i = 1; i < path->depth; i++)
{
- g_sprintf (ptr, ":%d", path->indices[i]);
+ g_snprintf (ptr, end - ptr, ":%d", path->indices[i]);
while (*ptr != '\000')
ptr++;
}