From b1a2ea2730a6f5e562efb8dbd936de0b3357d207 Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Tue, 11 Jan 2000 11:23:48 +0000 Subject: [PATCH] Fix a nasty "unsigned means trouble" bug. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@415 a592a061-630c-0410-9148-cb99ea01b6c8 --- ChangeLog | 10 ++++++++++ src/lyxparagraph.h | 3 ++- src/paragraph.C | 6 ++++-- 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2d530d50ba..d2817af563 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2000-01-11 Jean-Marc Lasgouttes + + * src/paragraph.C (BreakParagraph): do not reserve space on text + if we don't need to (otherwise, if pos_end < pos, we end up + reserving huge amounts of memory due to bad unsigned karma). + (BreakParagraphConservative): ditto, although I have not seen + evidence the bug can happen here. + + * src/lyxparagraph.h: add a using std::list. + 2000-01-11 Juergen Vigna * src/menus.C (MenuDocu): output an Alert if the documentation-file diff --git a/src/lyxparagraph.h b/src/lyxparagraph.h index 87deafe22f..067a5ca4a1 100644 --- a/src/lyxparagraph.h +++ b/src/lyxparagraph.h @@ -26,7 +26,6 @@ #include "layout.h" #include "support/block.h" - #define NEW_INSETTABLE 1 #define NEW_FONTTABLE 1 @@ -35,6 +34,8 @@ class LyXBuffer; class TexRow; struct LaTeXFeatures; +using std::list; + /// A LyXParagraph holds all text, attributes and insets in a text paragraph class LyXParagraph { public: diff --git a/src/paragraph.C b/src/paragraph.C index 2bb18268d0..d7c577671d 100644 --- a/src/paragraph.C +++ b/src/paragraph.C @@ -1686,7 +1686,8 @@ void LyXParagraph::BreakParagraph(LyXParagraph::size_type pos, pos_first++; pos_end = pos_first + par->text.size() - 1; - tmp->text.reserve(pos_end - pos); + if (pos_end > pos) + tmp->text.reserve(pos_end - pos); for (i = pos; i <= pos_end; i++) { par->CutIntoMinibuffer(i - pos_first); @@ -1853,7 +1854,8 @@ void LyXParagraph::BreakParagraphConservative(LyXParagraph::size_type pos) // InsertFromMinibuffer will enlarge the memory (it uses // InsertChar of course). But doing it by hand // is MUCH faster! (only one time, not thousend times!!) - tmp->text.reserve(pos_end - pos); + if (pos_end > pos) + tmp->text.reserve(pos_end - pos); for (i = pos; i <= pos_end; i++) { -- 2.39.2