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.
This commit is contained in:
Georg Baum 2014-11-12 20:31:32 +01:00
parent 7410208b72
commit 24426cc614
2 changed files with 13 additions and 0 deletions

View File

@ -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

View File

@ -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