diff options
| author | Kris De Gussem <kris.degussem@gmail.com> | 2012-05-04 15:40:04 +0000 |
|---|---|---|
| committer | Kris <Kris.De.Gussem@hotmail.com> | 2012-05-04 15:40:04 +0000 |
| commit | ecdd31b0c95f8f210038bc3dd5dfc0afb7a68883 (patch) | |
| tree | 56a4dbdc763833577eebb9571128ac8ee8649117 /src/ui/clipboard.cpp | |
| parent | cpp-style casting (diff) | |
| download | inkscape-ecdd31b0c95f8f210038bc3dd5dfc0afb7a68883.tar.gz inkscape-ecdd31b0c95f8f210038bc3dd5dfc0afb7a68883.zip | |
Adding checks to prevent null pointer dereferences
(bzr r11325)
Diffstat (limited to 'src/ui/clipboard.cpp')
| -rw-r--r-- | src/ui/clipboard.cpp | 37 |
1 files changed, 26 insertions, 11 deletions
diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp index b972997e2..8f0652a78 100644 --- a/src/ui/clipboard.cpp +++ b/src/ui/clipboard.cpp @@ -698,20 +698,25 @@ void ClipboardManagerImpl::_copyUsedDefs(SPItem *item) _copyTextPath(SP_TEXTPATH(item->firstChild())); } // Copy clipping objects - if (item->clip_ref->getObject()) { - _copyNode(item->clip_ref->getObject()->getRepr(), _doc, _defs); + if (item->clip_ref){ + if (item->clip_ref->getObject()) { + _copyNode(item->clip_ref->getObject()->getRepr(), _doc, _defs); + } } // Copy mask objects - if (item->mask_ref->getObject()) { - SPObject *mask = item->mask_ref->getObject(); - _copyNode(mask->getRepr(), _doc, _defs); - // recurse into the mask for its gradients etc. - for (SPObject *o = mask->children ; o != NULL ; o = o->next) { - if (SP_IS_ITEM(o)) { - _copyUsedDefs(SP_ITEM(o)); + if (item->mask_ref){ + if (item->mask_ref->getObject()) { + SPObject *mask = item->mask_ref->getObject(); + _copyNode(mask->getRepr(), _doc, _defs); + // recurse into the mask for its gradients etc. + for (SPObject *o = mask->children ; o != NULL ; o = o->next) { + if (SP_IS_ITEM(o)) { + _copyUsedDefs(SP_ITEM(o)); + } } } } + // Copy filters if (style->getFilter()) { SPObject *filter = style->getFilter(); @@ -737,7 +742,12 @@ void ClipboardManagerImpl::_copyGradient(SPGradient *gradient) while (gradient) { // climb up the refs, copying each one in the chain _copyNode(gradient->getRepr(), _doc, _defs); - gradient = gradient->ref->getObject(); + if (gradient->ref){ + gradient = gradient->ref->getObject(); + } + else { + gradient = NULL; + } } } @@ -758,7 +768,12 @@ void ClipboardManagerImpl::_copyPattern(SPPattern *pattern) } _copyUsedDefs(SP_ITEM(child)); } - pattern = pattern->ref->getObject(); + if (pattern->ref){ + pattern = pattern->ref->getObject(); + } + else{ + pattern = NULL; + } } } |
