diff options
| author | Johan B. C. Engelen <jbc.engelen@swissonline.ch> | 2011-05-01 14:27:28 +0000 |
|---|---|---|
| committer | Johan Engelen <goejendaagh@zonnet.nl> | 2011-05-01 14:27:28 +0000 |
| commit | 7f81932011c4ad87db74d62a2843949f4a5a3ffe (patch) | |
| tree | 6177fdcf66834758843b4e3211a9f8819508d659 /src | |
| parent | German translation update (diff) | |
| download | inkscape-7f81932011c4ad87db74d62a2843949f4a5a3ffe.tar.gz inkscape-7f81932011c4ad87db74d62a2843949f4a5a3ffe.zip | |
Fix crashes on empty marker definitions.
Fixed bugs:
- https://launchpad.net/bugs/774834
(bzr r10195)
Diffstat (limited to 'src')
| -rw-r--r-- | src/extension/internal/cairo-renderer.cpp | 12 | ||||
| -rw-r--r-- | src/sp-shape.cpp | 12 | ||||
| -rw-r--r-- | src/splivarot.cpp | 7 |
3 files changed, 20 insertions, 11 deletions
diff --git a/src/extension/internal/cairo-renderer.cpp b/src/extension/internal/cairo-renderer.cpp index dbda82c28..c7c9d3a61 100644 --- a/src/extension/internal/cairo-renderer.cpp +++ b/src/extension/internal/cairo-renderer.cpp @@ -170,11 +170,13 @@ static void sp_shape_render_invoke_marker_rendering(SPMarker* marker, Geom::Affi if (render) { SPItem* marker_item = sp_item_first_item_child(marker); - tr = (Geom::Affine)marker_item->transform * (Geom::Affine)marker->c2p * tr; - Geom::Affine old_tr = marker_item->transform; - marker_item->transform = tr; - ctx->getRenderer()->renderItem (ctx, marker_item); - marker_item->transform = old_tr; + if (marker_item) { + tr = (Geom::Affine)marker_item->transform * (Geom::Affine)marker->c2p * tr; + Geom::Affine old_tr = marker_item->transform; + marker_item->transform = tr; + ctx->getRenderer()->renderItem (ctx, marker_item); + marker_item->transform = old_tr; + } } } diff --git a/src/sp-shape.cpp b/src/sp-shape.cpp index 72559c63f..358e2a595 100644 --- a/src/sp-shape.cpp +++ b/src/sp-shape.cpp @@ -725,12 +725,14 @@ sp_shape_print_invoke_marker_printing(SPObject* obj, Geom::Affine tr, SPStyle* s } SPItem* marker_item = sp_item_first_item_child( marker ); - tr = marker_item->transform * marker->c2p * tr; + if (marker_item) { + tr = marker_item->transform * marker->c2p * tr; - Geom::Affine old_tr = marker_item->transform; - marker_item->transform = tr; - marker_item->invoke_print (ctx); - marker_item->transform = old_tr; + Geom::Affine old_tr = marker_item->transform; + marker_item->transform = tr; + marker_item->invoke_print (ctx); + marker_item->transform = old_tr; + } } /** * Prepares shape for printing. Handles printing of comments for printing diff --git a/src/splivarot.cpp b/src/splivarot.cpp index ac2acf330..5ff394782 100644 --- a/src/splivarot.cpp +++ b/src/splivarot.cpp @@ -607,6 +607,9 @@ void sp_selected_path_outline_add_marker( SPObject *marker_object, Geom::Affine { SPMarker* marker = SP_MARKER (marker_object); SPItem* marker_item = sp_item_first_item_child(marker_object); + if (!marker_item) { + return; + } Geom::Affine tr(marker_transform); @@ -665,7 +668,9 @@ void item_outline_add_marker( SPObject const *marker_object, Geom::Affine marker tr = marker->c2p * tr; SPItem const * marker_item = sp_item_first_item_child(marker_object); // why only consider the first item? can a marker only consist of a single item (that may be a group)? - item_outline_add_marker_child(marker_item, tr, pathv_in); + if (marker_item) { + item_outline_add_marker_child(marker_item, tr, pathv_in); + } } /** |
