commit 24426cc614685503024a1ba46d99b6bbb832c92e
Author: Georg Baum <[email protected]>
Date: Wed Nov 12 20:31:32 2014 +0100
Fix memory errors found by Alfredo with valgrind
BufferParams::setDocumentClass() deletes the old document class of the
buffer
and creates a copy of the new one. Therefore, the stored layout pointers in
the paragraphs (actually only one paragraph exists) are dangling afterwards.
Resetting them before setting the document class helps here.
In the long term we need to get rid of BufferParams::setDocumentClass()
completely, this is very ugly.
diff --git a/src/CutAndPaste.cpp b/src/CutAndPaste.cpp
index 3b6ee97..a7f92d6 100644
--- a/src/CutAndPaste.cpp
+++ b/src/CutAndPaste.cpp
@@ -496,6 +496,17 @@ void putClipboard(ParagraphList const & paragraphs,
LASSERT(buffer, return);
// This needs doing every time.
+ // Since setDocumentClass() causes deletion of the old document class
+ // we need to reset all layout pointers in paragraphs (otherwise they
+ // would be dangling).
+ ParIterator const end = buffer->par_iterator_end();
+ for (ParIterator it = buffer->par_iterator_begin(); it != end; ++it) {
+ docstring const name = it->layout().name();
+ if (docclass->hasLayout(name))
+ it->setLayout((*docclass)[name]);
+ else
+ it->setPlainOrDefaultLayout(*docclass);
+ }
buffer->params().setDocumentClass(docclass);
// we will use pasteSelectionHelper to copy the paragraphs into the
diff --git a/status.21x b/status.21x
index 2e94b3c..e368448 100644
--- a/status.21x
+++ b/status.21x
@@ -113,6 +113,8 @@ What's new
- Fix wrong test in LyX server.
+- Fix possible memory corruption on copying to the clipboard
+
* DOCUMENTATION AND LOCALIZATION