From: Jean-Marc Lasgouttes Date: Tue, 11 Jan 2000 11:23:48 +0000 (+0000) Subject: Fix a nasty "unsigned means trouble" bug. X-Git-Tag: 1.6.10~22433 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=b1a2ea2730a6f5e562efb8dbd936de0b3357d207;p=features.git Fix a nasty "unsigned means trouble" bug. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@415 a592a061-630c-0410-9148-cb99ea01b6c8 --- 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++) {