summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJohan B. C. Engelen <jbc.engelen@swissonline.ch>2011-05-01 14:27:28 +0000
committerJohan Engelen <goejendaagh@zonnet.nl>2011-05-01 14:27:28 +0000
commit7f81932011c4ad87db74d62a2843949f4a5a3ffe (patch)
tree6177fdcf66834758843b4e3211a9f8819508d659 /src
parentGerman translation update (diff)
downloadinkscape-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.cpp12
-rw-r--r--src/sp-shape.cpp12
-rw-r--r--src/splivarot.cpp7
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);
+ }
}
/**