[dia] [scan-build] Dereference of null pointer (maybe)
- From: Hans Breuer <hans src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dia] [scan-build] Dereference of null pointer (maybe)
- Date: Mon, 9 Jun 2014 08:48:26 +0000 (UTC)
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]