diff options
| author | Stephen Silver <sasilver@yahoo.com> | 2008-07-03 09:19:46 +0000 |
|---|---|---|
| committer | sasilver <sasilver@users.sourceforge.net> | 2008-07-03 09:19:46 +0000 |
| commit | 2d7495fa4af7f0743056b336d9ffbda548aa76b2 (patch) | |
| tree | ce51f98cdd1f37582821a089b52a958a3ec8c677 /src/box3d.cpp | |
| parent | 2geomify deletion of node in pen-context.cpp (diff) | |
| download | inkscape-2d7495fa4af7f0743056b336d9ffbda548aa76b2.tar.gz inkscape-2d7495fa4af7f0743056b336d9ffbda548aa76b2.zip | |
Check that objects are of the right type before casting them.
Fixes crash that occurs when transforming a 3D box with a title or description (bug 237331).
(bzr r6124)
Diffstat (limited to 'src/box3d.cpp')
| -rw-r--r-- | src/box3d.cpp | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/src/box3d.cpp b/src/box3d.cpp index 2a8d24167..f0bf4647d 100644 --- a/src/box3d.cpp +++ b/src/box3d.cpp @@ -321,7 +321,8 @@ box3d_position_set (SPBox3D *box) /* This draws the curve and calls requestDisplayUpdate() for each side (the latter is done in box3d_side_position_set() to avoid update conflicts with the parent box) */ for (SPObject *child = sp_object_first_child(SP_OBJECT (box)); child != NULL; child = SP_OBJECT_NEXT(child) ) { - box3d_side_position_set (SP_BOX3D_SIDE (child)); + if (SP_IS_BOX3D_SIDE(child)) + box3d_side_position_set(SP_BOX3D_SIDE(child)); } } @@ -365,21 +366,22 @@ box3d_set_transform(SPItem *item, NR::Matrix const &xform) gdouble const sw = hypot(ret[0], ret[1]); gdouble const sh = hypot(ret[2], ret[3]); - SPItem *sideitem = NULL; - for (SPObject *side = sp_object_first_child(box); side != NULL; side = SP_OBJECT_NEXT(side)) { - sideitem = SP_ITEM(side); + for (SPObject *child = sp_object_first_child(box); child != NULL; child = SP_OBJECT_NEXT(child)) { + if (SP_IS_ITEM(child)) { + SPItem *childitem = SP_ITEM(child); - // Adjust stroke width - sp_item_adjust_stroke(sideitem, sqrt(fabs(sw * sh))); + // Adjust stroke width + sp_item_adjust_stroke(childitem, sqrt(fabs(sw * sh))); - // Adjust pattern fill - sp_item_adjust_pattern(sideitem, xform); + // Adjust pattern fill + sp_item_adjust_pattern(childitem, xform); - // Adjust gradient fill - sp_item_adjust_gradient(sideitem, xform); + // Adjust gradient fill + sp_item_adjust_gradient(childitem, xform); - // Adjust LPE - sp_item_adjust_livepatheffect(item, xform); + // Adjust LPE + sp_item_adjust_livepatheffect(childitem, xform); + } } return NR::identity(); @@ -1148,8 +1150,9 @@ static std::map<int, Box3DSide *> box3d_get_sides (SPBox3D *box) { std::map<int, Box3DSide *> sides; for (SPObject *side = sp_object_first_child(box); side != NULL; side = SP_OBJECT_NEXT(side)) { - sides[Box3D::face_to_int(sp_repr_get_int_attribute(SP_OBJECT_REPR(side), - "inkscape:box3dsidetype", -1))] = SP_BOX3D_SIDE(side); + if (SP_IS_BOX3D_SIDE(side)) + sides[Box3D::face_to_int(sp_repr_get_int_attribute(SP_OBJECT_REPR(side), + "inkscape:box3dsidetype", -1))] = SP_BOX3D_SIDE(side); } sides.erase(-1); return sides; |
