changeset 2663:3b3be9f7f452

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..
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 04 Oct 2021 19:26:08 +0000
parents 60df58233244
children b0712a3debe2
files gtk3/dw.c gtk4/dw.c
diffstat 2 files changed, 46 insertions(+), 46 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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