summaryrefslogtreecommitdiff
path: root/gdk/gdkpixmap.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@gtk.org>1998-05-03 22:41:32 +0000
committerOwen Taylor <otaylor@src.gnome.org>1998-05-03 22:41:32 +0000
commit4851efe29604e1d950dc9711d9d7ced69771f2e9 (patch)
treece3b07c7f78836ae33f34479193041f19e9548d6 /gdk/gdkpixmap.c
parentc0b92323516fef167517dc9ab645dcfd4075227e (diff)
downloadgtk+-4851efe29604e1d950dc9711d9d7ced69771f2e9.tar.gz
configure.in acheader.h gdk/gdkwindow.c Check for Shape extension both on
Sun May 3 13:38:22 1998 Owen Taylor <otaylor@gtk.org> * configure.in acheader.h gdk/gdkwindow.c Check for Shape extension both on the client and server side. (And, more importantly, check for the shape extension so we may include -lXext even when compiling with --disable-xshm) Don't set override_redirect on all shaped windows. It isn't necessary. * gdk/gdkwindow.c: Set ->colormap to NULL for root and foreign windows. Use this to check if we need to get the colormap from X. Fri May 1 22:32:47 1998 Owen Taylor <otaylor@gtk.org> * gtk/gtkbutton.c (gtk_button_paint): Draw the areas between the default and the button always in GTK_STATE_NORMAL. * gtk/gtkrange.c (gtk_range_style_set): Added a style_set callback. Fri May 1 16:40:57 1998 Owen Taylor <otaylor@gtk.org> * gdk/gdkpixmap.c (gdk_pixmap_colormap_create_from_xpmp[_d]): Fix a buffer overflow on pixmaps that claim to have more than 31 characters per pixel. (gdk_pixmap_read_string): Don't wrap around strings longer than half of address space ;-) * gtk/gtk[vh]ruler.c gtk/gtkinputdialog.c: Expand some buffers that were used for printing integers. * */* (almost): Style: All int foo () { ... } changed to int foo (void) { ... } ^^^^^^^ This is why some many files changed Even where there were proper prototypes elsewhere. * gdk/gxid.c (handle_claim_device): Some extra checks. It isn't safe against being fed bad X id's, but at least it should be safe against deleting all your files.
Diffstat (limited to 'gdk/gdkpixmap.c')
-rw-r--r--gdk/gdkpixmap.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/gdk/gdkpixmap.c b/gdk/gdkpixmap.c
index a1af21542e..2f2cdea4c0 100644
--- a/gdk/gdkpixmap.c
+++ b/gdk/gdkpixmap.c
@@ -256,8 +256,14 @@ gdk_pixmap_read_string (FILE *infile,
{
if (cnt == (*buffer_size))
{
- (*buffer_size) *= 2;
- (*buffer) = (gchar *) g_realloc ((*buffer), *buffer_size); }
+ guint new_size = (*buffer_size) * 2;
+ if (new_size > (*buffer_size))
+ *buffer_size = new_size;
+ else
+ return FALSE;
+
+ (*buffer) = (gchar *) g_realloc ((*buffer), *buffer_size);
+ }
if (c != '"')
(*buffer)[cnt++] = c;
@@ -399,6 +405,11 @@ gdk_pixmap_colormap_create_from_xpm (GdkWindow *window,
gdk_pixmap_read_string (infile, &buffer, &buffer_size);
sscanf (buffer,"%d %d %d %d", &width, &height, &num_cols, &cpp);
+ if (cpp >= 32)
+ {
+ g_warning ("Pixmap has more than 31 characters per color\n");
+ return NULL;
+ }
colors = g_new(_GdkPixmapColor, num_cols);
@@ -574,6 +585,11 @@ gdk_pixmap_colormap_create_from_xpm_d (GdkWindow *window,
i = 0;
buffer = data[i++];
sscanf (buffer,"%d %d %d %d", &width, &height, &num_cols, &cpp);
+ if (cpp >= 32)
+ {
+ g_warning ("Pixmap has more than 31 characters per color\n");
+ return NULL;
+ }
colors = g_new(_GdkPixmapColor, num_cols);