[dia] [scan-build] Dereference of null pointer (maybe)



commit 6ff10ba33855458e1cfade92202c04e8fa547f3e
Author: Hans Breuer <hans breuer org>
Date:   Mon Jun 9 10:12:50 2014 +0200

    [scan-build] Dereference of null pointer (maybe)
    
    The current code would always have a valid renderer->dia I think.
    But scan-build was right in complaining about incosnstent checking
    of that. Now every access to renderer->dia is protected with a
    corresponding check.

 plug-ins/cairo/diacairo-renderer.c |   27 ++++++++++++++++-----------
 1 files changed, 16 insertions(+), 11 deletions(-)
---
diff --git a/plug-ins/cairo/diacairo-renderer.c b/plug-ins/cairo/diacairo-renderer.c
index 610d97c..9598c8e 100644
--- a/plug-ins/cairo/diacairo-renderer.c
+++ b/plug-ins/cairo/diacairo-renderer.c
@@ -76,6 +76,7 @@ begin_render(DiaRenderer *self, const Rectangle *update)
   real lmargin = 0.0, tmargin = 0.0;
   gboolean paginated = renderer->surface && /* only with our own pagination, not GtkPrint */
     cairo_surface_get_type (renderer->surface) == CAIRO_SURFACE_TYPE_PDF && !renderer->skip_show_page;
+  Color background = color_white;
 
   if (renderer->surface && !renderer->cr)
     renderer->cr = cairo_create (renderer->surface);
@@ -112,27 +113,31 @@ begin_render(DiaRenderer *self, const Rectangle *update)
                      update->right - update->left, update->bottom - update->top);
     cairo_clip (renderer->cr);
     cairo_translate (renderer->cr, -update->left + lmargin, -update->top + tmargin);
-  } else
-    cairo_translate (renderer->cr, -renderer->dia->extents.left + onedu, -renderer->dia->extents.top + 
onedu);
+  } else {
+    if (renderer->dia)
+      cairo_translate (renderer->cr, -renderer->dia->extents.left + onedu, -renderer->dia->extents.top + 
onedu);
+  }
   /* no more blurred UML diagrams */
   cairo_set_antialias (renderer->cr, CAIRO_ANTIALIAS_NONE);
 
   /* clear background */
+  if (renderer->dia)
+    background = renderer->dia->bg_color;
   if (renderer->with_alpha)
     {
       cairo_set_operator (renderer->cr, CAIRO_OPERATOR_SOURCE);
       cairo_set_source_rgba (renderer->cr,
-                             renderer->dia->bg_color.red, 
-                             renderer->dia->bg_color.green, 
-                             renderer->dia->bg_color.blue,
+                             background.red, 
+                             background.green, 
+                             background.blue,
                              0.0);
     }
   else
     {
       cairo_set_source_rgba (renderer->cr,
-                             renderer->dia->bg_color.red, 
-                             renderer->dia->bg_color.green, 
-                             renderer->dia->bg_color.blue,
+                             background.red, 
+                             background.green, 
+                             background.blue,
                              1.0);
     }
   cairo_paint (renderer->cr);
@@ -141,9 +146,9 @@ begin_render(DiaRenderer *self, const Rectangle *update)
       /* restore to default drawing */
       cairo_set_operator (renderer->cr, CAIRO_OPERATOR_OVER);
       cairo_set_source_rgba (renderer->cr,
-                             renderer->dia->bg_color.red, 
-                             renderer->dia->bg_color.green, 
-                             renderer->dia->bg_color.blue,
+                             background.red, 
+                             background.green, 
+                             background.blue,
                              1.0);
     }
 #ifdef HAVE_PANGOCAIRO_H


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