diff options
| author | Jon A. Cruz <jon@joncruz.org> | 2010-07-28 01:57:53 +0000 |
|---|---|---|
| committer | Jon A. Cruz <jon@joncruz.org> | 2010-07-28 01:57:53 +0000 |
| commit | b866548d43ef89eefbbec860e0935f8f2505277f (patch) | |
| tree | da03e6a0cdc3db53f5836d9c723ed4e3617ce9fa /src/document-undo.cpp | |
| parent | Duplicate the undo key passed to sp_document_maybe_done, instead of simply (diff) | |
| download | inkscape-b866548d43ef89eefbbec860e0935f8f2505277f.tar.gz inkscape-b866548d43ef89eefbbec860e0935f8f2505277f.zip | |
Safer fix for bug #579932 that won't leak memory.
(bzr r9662)
Diffstat (limited to 'src/document-undo.cpp')
| -rw-r--r-- | src/document-undo.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/document-undo.cpp b/src/document-undo.cpp index 62259fa19..e63fe8a52 100644 --- a/src/document-undo.cpp +++ b/src/document-undo.cpp @@ -125,11 +125,10 @@ sp_document_done (SPDocument *doc, const unsigned int event_type, Glib::ustring sp_document_maybe_done (doc, NULL, event_type, event_description); } -void -sp_document_reset_key (Inkscape::Application */*inkscape*/, SPDesktop */*desktop*/, GtkObject *base) +void sp_document_reset_key( Inkscape::Application * /*inkscape*/, SPDesktop * /*desktop*/, GtkObject *base ) { - SPDocument *doc = (SPDocument *) base; - doc->actionkey = NULL; + SPDocument *doc = reinterpret_cast<SPDocument *>(base); + doc->actionkey.clear(); } namespace { @@ -171,6 +170,9 @@ sp_document_maybe_done (SPDocument *doc, const gchar *key, const unsigned int ev g_assert (doc != NULL); g_assert (doc->priv != NULL); g_assert (doc->priv->sensitive); + if ( key && !*key ) { + g_warning("Blank undo key specified."); + } Inkscape::Debug::EventTracker<CommitEvent> tracker(doc, key, event_type); @@ -188,7 +190,7 @@ sp_document_maybe_done (SPDocument *doc, const gchar *key, const unsigned int ev return; } - if (key && doc->actionkey && !strcmp (key, doc->actionkey) && doc->priv->undo) { + if (key && !doc->actionkey.empty() && (doc->actionkey == key) && doc->priv->undo) { ((Inkscape::Event *)doc->priv->undo->data)->event = sp_repr_coalesce_log (((Inkscape::Event *)doc->priv->undo->data)->event, log); } else { @@ -198,9 +200,11 @@ sp_document_maybe_done (SPDocument *doc, const gchar *key, const unsigned int ev doc->priv->undoStackObservers.notifyUndoCommitEvent(event); } - if (doc->actionkey) - g_free(doc->actionkey); - doc->actionkey = key ? g_strdup(key) : NULL; + if ( key ) { + doc->actionkey = key; + } else { + doc->actionkey.clear(); + } doc->virgin = FALSE; doc->setModifiedSinceSave(); @@ -259,7 +263,7 @@ sp_document_undo (SPDocument *doc) doc->priv->sensitive = FALSE; doc->priv->seeking = true; - doc->actionkey = NULL; + doc->actionkey.clear(); finish_incomplete_transaction(*doc); @@ -305,7 +309,7 @@ sp_document_redo (SPDocument *doc) doc->priv->sensitive = FALSE; doc->priv->seeking = true; - doc->actionkey = NULL; + doc->actionkey.clear(); finish_incomplete_transaction(*doc); |
