mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-09 18:31:04 +00:00
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:
parent
7410208b72
commit
24426cc614
@ -496,6 +496,17 @@ void putClipboard(ParagraphList const & paragraphs,
|
|||||||
LASSERT(buffer, return);
|
LASSERT(buffer, return);
|
||||||
|
|
||||||
// This needs doing every time.
|
// 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);
|
buffer->params().setDocumentClass(docclass);
|
||||||
|
|
||||||
// we will use pasteSelectionHelper to copy the paragraphs into the
|
// we will use pasteSelectionHelper to copy the paragraphs into the
|
||||||
|
@ -113,6 +113,8 @@ What's new
|
|||||||
|
|
||||||
- Fix wrong test in LyX server.
|
- Fix wrong test in LyX server.
|
||||||
|
|
||||||
|
- Fix possible memory corruption on copying to the clipboard
|
||||||
|
|
||||||
|
|
||||||
* DOCUMENTATION AND LOCALIZATION
|
* DOCUMENTATION AND LOCALIZATION
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user