From 08f4459b5461ecefad4a26910a1dd155c32181ca Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Sun, 25 Oct 2009 03:49:02 +0100 Subject: [PATCH] make sure that MaxBeginning in Scrollpad::Refresh() is never negative this sometimes triggered segfault in pdcurses while switching to screens, that use scrollpads. --- src/scrollpad.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/scrollpad.cpp b/src/scrollpad.cpp index ff146930..96d2c579 100644 --- a/src/scrollpad.cpp +++ b/src/scrollpad.cpp @@ -18,6 +18,8 @@ * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ +#include + #include "scrollpad.h" using namespace NCurses; @@ -83,7 +85,8 @@ void Scrollpad::Flush() space_pos = 0; } } - Recreate(itsWidth, std::max(itsHeight, itsRealHeight)); + itsRealHeight = std::max(itsHeight, itsRealHeight); + Recreate(itsWidth, itsRealHeight); itsBuffer.SetTemp(&s); static_cast(*this) << itsBuffer; itsBuffer.SetTemp(0); @@ -121,6 +124,7 @@ void Scrollpad::RemoveFormatting() void Scrollpad::Refresh() { int MaxBeginning = itsRealHeight-itsHeight; + assert(MaxBeginning >= 0); if (itsBeginning > MaxBeginning) itsBeginning = MaxBeginning; prefresh(itsWindow, itsBeginning, 0, itsStartY, itsStartX, itsStartY+itsHeight-1, itsStartX+itsWidth-1); @@ -129,7 +133,6 @@ void Scrollpad::Refresh() void Scrollpad::Resize(size_t new_width, size_t new_height) { AdjustDimensions(new_width, new_height); - itsRealHeight = itsHeight; Flush(); }