summaryrefslogtreecommitdiffstats
path: root/src/ui/clipboard.cpp
diff options
context:
space:
mode:
authorKris De Gussem <kris.degussem@gmail.com>2012-05-04 15:40:04 +0000
committerKris <Kris.De.Gussem@hotmail.com>2012-05-04 15:40:04 +0000
commitecdd31b0c95f8f210038bc3dd5dfc0afb7a68883 (patch)
tree56a4dbdc763833577eebb9571128ac8ee8649117 /src/ui/clipboard.cpp
parentcpp-style casting (diff)
downloadinkscape-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.cpp37
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;
+ }
}
}