# HG changeset patch # User bsmith@81767d24-ef19-dc11-ae90-00e081727c95 # Date 1633375568 0 # Node ID 3b3be9f7f452406ef6a80eff7528d0b9dd4e613e # Parent 60df582332440ee5b3a5b371ffc02708d58c3a4e GTK3/4: Add some memory safety checks that were in GTK2 but missing from GTK 3/4. Noticed during a prior CID commit. Committing on Windows, so untested.. diff -r 60df58233244 -r 3b3be9f7f452 gtk3/dw.c --- a/gtk3/dw.c Sun Oct 03 20:02:12 2021 +0000 +++ b/gtk3/dw.c Mon Oct 04 19:26:08 2021 +0000 @@ -1143,17 +1143,17 @@ void **params = (void **)data; int counter = GPOINTER_TO_INT(params[0]); GtkWidget *widget = (GtkWidget *)params[2]; - char text[100]; - - sprintf(text, "_dw_sigwindow%d", counter); + char text[101] = {0}; + + snprintf(text, 100, "_dw_sigwindow%d", counter); sh.window = (HWND)g_object_get_data(G_OBJECT(widget), text); - sprintf(text, "_dw_sigfunc%d", counter); + snprintf(text, 100, "_dw_sigfunc%d", counter); sh.func = (void *)g_object_get_data(G_OBJECT(widget), text); - sprintf(text, "_dw_intfunc%d", counter); + snprintf(text, 100, "_dw_intfunc%d", counter); sh.intfunc = (void *)g_object_get_data(G_OBJECT(widget), text); - sprintf(text, "_dw_sigdata%d", counter); + snprintf(text, 100, "_dw_sigdata%d", counter); sh.data = g_object_get_data(G_OBJECT(widget), text); - sprintf(text, "_dw_sigcid%d", counter); + snprintf(text, 100, "_dw_sigcid%d", counter); sh.cid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), text)); } return sh; @@ -1161,38 +1161,38 @@ static void _dw_remove_signal_handler(GtkWidget *widget, int counter) { - char text[100]; + char text[101] = {0}; gint cid; - sprintf(text, "_dw_sigcid%d", counter); + snprintf(text, 100, "_dw_sigcid%d", counter); cid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), text)); if(cid > 0) g_signal_handler_disconnect(G_OBJECT(widget), cid); g_object_set_data(G_OBJECT(widget), text, NULL); - sprintf(text, "_dw_sigwindow%d", counter); + snprintf(text, 100, "_dw_sigwindow%d", counter); g_object_set_data(G_OBJECT(widget), text, NULL); - sprintf(text, "_dw_sigfunc%d", counter); + snprintf(text, 100, "_dw_sigfunc%d", counter); g_object_set_data(G_OBJECT(widget), text, NULL); - sprintf(text, "_dw_intfunc%d", counter); + snprintf(text, 100, "_dw_intfunc%d", counter); g_object_set_data(G_OBJECT(widget), text, NULL); - sprintf(text, "_dw_sigdata%d", counter); + snprintf(text, 100, "_dw_sigdata%d", counter); g_object_set_data(G_OBJECT(widget), text, NULL); } static int _dw_set_signal_handler(GtkWidget *widget, HWND window, void *func, gpointer data, void *intfunc, void *discfunc) { int counter = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "_dw_sigcounter")); - char text[100]; - - sprintf(text, "_dw_sigwindow%d", counter); + char text[101] = {0}; + + snprintf(text, 100, "_dw_sigwindow%d", counter); g_object_set_data(G_OBJECT(widget), text, (gpointer)window); - sprintf(text, "_dw_sigfunc%d", counter); + snprintf(text, 100, "_dw_sigfunc%d", counter); g_object_set_data(G_OBJECT(widget), text, (gpointer)func); - sprintf(text, "_dw_intfunc%d", counter); + snprintf(text, 100, "_dw_intfunc%d", counter); g_object_set_data(G_OBJECT(widget), text, (gpointer)intfunc); - sprintf(text, "_dw_discfunc%d", counter); + snprintf(text, 100, "_dw_discfunc%d", counter); g_object_set_data(G_OBJECT(widget), text, (gpointer)discfunc); - sprintf(text, "_dw_sigdata%d", counter); + snprintf(text, 100, "_dw_sigdata%d", counter); g_object_set_data(G_OBJECT(widget), text, (gpointer)data); counter++; @@ -1205,9 +1205,9 @@ { if(cid > 0) { - char text[100]; - - sprintf(text, "_dw_sigcid%d", counter); + char text[101] = {0}; + + snprintf(text, 100, "_dw_sigcid%d", counter); g_object_set_data(G_OBJECT(widget), text, GINT_TO_POINTER(cid)); } else diff -r 60df58233244 -r 3b3be9f7f452 gtk4/dw.c --- a/gtk4/dw.c Sun Oct 03 20:02:12 2021 +0000 +++ b/gtk4/dw.c Mon Oct 04 19:26:08 2021 +0000 @@ -541,17 +541,17 @@ void **params = (void **)data; int counter = GPOINTER_TO_INT(params[0]); GtkWidget *widget = (GtkWidget *)params[2]; - char text[100]; - - sprintf(text, "_dw_sigwindow%d", counter); + char text[101] = {0}; + + snprintf(text, 100, "_dw_sigwindow%d", counter); sh.window = (HWND)g_object_get_data(G_OBJECT(widget), text); - sprintf(text, "_dw_sigfunc%d", counter); + snprintf(text, 100, "_dw_sigfunc%d", counter); sh.func = (void *)g_object_get_data(G_OBJECT(widget), text); - sprintf(text, "_dw_intfunc%d", counter); + snprintf(text, 100, "_dw_intfunc%d", counter); sh.intfunc = (void *)g_object_get_data(G_OBJECT(widget), text); - sprintf(text, "_dw_sigdata%d", counter); + snprintf(text, 100, "_dw_sigdata%d", counter); sh.data = g_object_get_data(G_OBJECT(widget), text); - sprintf(text, "_dw_sigcid%d", counter); + snprintf(text, 100, "_dw_sigcid%d", counter); sh.cid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), text)); } return sh; @@ -559,38 +559,38 @@ static void _dw_remove_signal_handler(GtkWidget *widget, int counter) { - char text[100]; + char text[101] = {0}; gint cid; - sprintf(text, "_dw_sigcid%d", counter); + snprintf(text, 100, "_dw_sigcid%d", counter); cid = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), text)); if(cid > 0) g_signal_handler_disconnect(G_OBJECT(widget), cid); g_object_set_data(G_OBJECT(widget), text, NULL); - sprintf(text, "_dw_sigwindow%d", counter); + snprintf(text, 100, "_dw_sigwindow%d", counter); g_object_set_data(G_OBJECT(widget), text, NULL); - sprintf(text, "_dw_sigfunc%d", counter); + snprintf(text, 100, "_dw_sigfunc%d", counter); g_object_set_data(G_OBJECT(widget), text, NULL); - sprintf(text, "_dw_intfunc%d", counter); + snprintf(text, 100, "_dw_intfunc%d", counter); g_object_set_data(G_OBJECT(widget), text, NULL); - sprintf(text, "_dw_sigdata%d", counter); + snprintf(text, 100, "_dw_sigdata%d", counter); g_object_set_data(G_OBJECT(widget), text, NULL); } static int _dw_set_signal_handler(GObject *object, HWND window, void *func, gpointer data, void *intfunc, void *discfunc) { int counter = GPOINTER_TO_INT(g_object_get_data(object, "_dw_sigcounter")); - char text[100]; - - sprintf(text, "_dw_sigwindow%d", counter); + char text[101] = {0}; + + snprintf(text, 100, "_dw_sigwindow%d", counter); g_object_set_data(object, text, (gpointer)window); - sprintf(text, "_dw_sigfunc%d", counter); + snprintf(text, 100, "_dw_sigfunc%d", counter); g_object_set_data(object, text, (gpointer)func); - sprintf(text, "_dw_intfunc%d", counter); + snprintf(text, 100, "_dw_intfunc%d", counter); g_object_set_data(object, text, (gpointer)intfunc); - sprintf(text, "_dw_discfunc%d", counter); + snprintf(text, 100, "_dw_discfunc%d", counter); g_object_set_data(object, text, (gpointer)discfunc); - sprintf(text, "_dw_sigdata%d", counter); + snprintf(text, 100, "_dw_sigdata%d", counter); g_object_set_data(object, text, (gpointer)data); counter++; @@ -603,9 +603,9 @@ { if(cid > 0) { - char text[100]; - - sprintf(text, "_dw_sigcid%d", counter); + char text[101] = {0}; + + snprintf(text, 100, "_dw_sigcid%d", counter); g_object_set_data(object, text, GINT_TO_POINTER(cid)); } else