[gtk+/native-layout] Fixed GtkCellRendererText invalid pointer access.



commit 894e887370bc1b9f9f2e085e681b422448d50a54
Author: Tristan Van Berkom <tristan van berkom gmail com>
Date:   Sat Apr 3 19:48:14 2010 -0400

    Fixed GtkCellRendererText invalid pointer access.
    
    Fixed get_desired_size() to not access parameters when NULL and
    also not to access priv->object if it hasnt yet been assigned.

 gtk/gtkcellrenderertext.c |   50 ++++++++++++++++++++++++++++++--------------
 1 files changed, 34 insertions(+), 16 deletions(-)
---
diff --git a/gtk/gtkcellrenderertext.c b/gtk/gtkcellrenderertext.c
index 8529c08..37c5eb7 100644
--- a/gtk/gtkcellrenderertext.c
+++ b/gtk/gtkcellrenderertext.c
@@ -1946,25 +1946,43 @@ gtk_cell_renderer_text_extended_layout_get_desired_size (GtkExtendedLayout *layo
 
   priv = GTK_CELL_RENDERER_TEXT_GET_PRIVATE (layout);
 
-  if (minimal_size)
+  if (priv->owner)
     {
-      get_size (GTK_CELL_RENDERER (layout),
-                priv->owner, NULL, NULL, NULL, NULL,
-                &minimal_size->width, &minimal_size->height);
-    }
 
-  if (desired_size)
+      if (minimal_size)
+	{
+	  get_size (GTK_CELL_RENDERER (layout),
+		    priv->owner, NULL, NULL, NULL, NULL,
+		    &minimal_size->width, &minimal_size->height);
+	}
+      
+      if (desired_size)
+	{
+	  PangoEllipsizeMode ellipsize;
+	  
+	  ellipsize = priv->ellipsize;
+	  priv->ellipsize = PANGO_ELLIPSIZE_NONE;
+	  
+	  get_size (GTK_CELL_RENDERER (layout),
+		    priv->owner, NULL, NULL, NULL, NULL,
+		    &desired_size->width, &desired_size->height);
+	  
+	  priv->ellipsize = ellipsize;
+	}
+    }
+  else
     {
-      PangoEllipsizeMode ellipsize;
-
-      ellipsize = priv->ellipsize;
-      priv->ellipsize = PANGO_ELLIPSIZE_NONE;
-
-      get_size (GTK_CELL_RENDERER (layout),
-                priv->owner, NULL, NULL, NULL, NULL,
-                &desired_size->width, &desired_size->height);
-
-      priv->ellipsize = ellipsize;
+      if (minimal_size)
+	{
+	  minimal_size->height = 0;
+	  minimal_size->width = 0;
+	}
+      
+      if (desired_size)
+	{
+	  desired_size->height = 0;
+	  desired_size->width = 0;
+	}
     }
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]