From 49bff533704bc6a0aa83e7e6a5429216d8cfb8db Mon Sep 17 00:00:00 2001 From: axel Date: Tue, 17 Oct 2006 00:39:12 +1000 Subject: [PATCH] =?UTF-8?q?Avoid=20reading=20before=20begining=20of=20buff?= =?UTF-8?q?er=20when=20moving/erasing=20word,=20fixes=20crash=20bug=20repo?= =?UTF-8?q?rted=20by=20Martin=20B=C3=A4hr=20and=20further=20described=20by?= =?UTF-8?q?=20Philip=20Ganchev.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit darcs-hash:20061016143912-ac50b-1deacc00f6c0438e6d760568ef5b1e47e3fe08c4.gz --- reader.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/reader.c b/reader.c index ef2bb43d6..ceda18f4b 100644 --- a/reader.c +++ b/reader.c @@ -1582,12 +1582,12 @@ static void move_word( int dir, int erase, int new ) if( !dir ) { - if( end_buff_pos == 0 ) + if( end_buff_pos <= 0 ) break; } else { - if( end_buff_pos == data->buff_len ) + if( end_buff_pos >= data->buff_len ) break; } @@ -1618,12 +1618,12 @@ static void move_word( int dir, int erase, int new ) if( !dir ) { - if( end_buff_pos == 0 ) + if( end_buff_pos <= 0 ) break; } else { - if( end_buff_pos == data->buff_len ) + if( end_buff_pos >= data->buff_len ) break; } @@ -1649,6 +1649,12 @@ static void move_word( int dir, int erase, int new ) { end_buff_pos+=step; } + + /* + Make sure we don't move beyond begining or end of buffer + */ + end_buff_pos = maxi( 0, mini( end_buff_pos, data->buff_len ) ); + if( erase )