From: Dirk B. <db...@us...> - 2008-12-17 14:48:58
|
Update of /cvsroot/win32forth/win32forth-extsrc/extsrc/w32fScintilla/src In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv19752/src Modified Files: LexForth.cxx Log Message: Fixed a crash in the Win32forthIDE which was caused by a buffer overflow within the w32fscintilla.dll. Index: LexForth.cxx =================================================================== RCS file: /cvsroot/win32forth/win32forth-extsrc/extsrc/w32fScintilla/src/LexForth.cxx,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** LexForth.cxx 14 Jul 2007 04:56:04 -0000 1.4 --- LexForth.cxx 17 Dec 2008 14:48:52 -0000 1.5 *************** *** 68,74 **** #define BL ' ' ! static Accessor *st; ! static int cur_pos,pos1,pos2,pos0,lengthDoc; ! char *buffer; char getChar(bool is_bl) --- 68,74 ---- #define BL ' ' ! static Accessor *st = NULL; ! static unsigned int cur_pos = 0, pos1 = 0, pos2 = 0, pos0 = 0, lengthDoc = 0; ! static char *buffer = NULL; char getChar(bool is_bl) *************** *** 150,156 **** } ! #ifndef min ! #define min(a,b) (((a) < (b)) ? (a) : (b)) ! #endif void ColouriseForthDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler) --- 150,158 ---- } ! void ColourTo( unsigned int pos, int chAttr, Accessor &styler ) ! { ! if( pos < lengthDoc ) ! styler.ColourTo(pos, chAttr); ! } void ColouriseForthDoc(unsigned int startPos, int length, int, WordList *keywordLists[], Accessor &styler) *************** *** 160,168 **** lengthDoc = startPos + length; ! buffer = new char[min(length,32768)]; if( !buffer ) return; ! char *szLastToken = new char[min(length,32768)]; if( !szLastToken ) { --- 162,170 ---- lengthDoc = startPos + length; ! buffer = new char[length+2]; if( !buffer ) return; ! char *szLastToken = new char[length+2]; if( !szLastToken ) { *************** *** 201,206 **** if( pos0 != pos1 ) { ! styler.ColourTo(pos0,SCE_FORTH_DEFAULT); ! styler.ColourTo(pos1-1,SCE_FORTH_DEFAULT); } --- 203,208 ---- if( pos0 != pos1 ) { ! ColourTo( pos0, SCE_FORTH_DEFAULT, styler ); ! ColourTo( pos1-1,SCE_FORTH_DEFAULT, styler ); } *************** *** 216,227 **** if( ch1 == ' ' && ch2 == ':' && is_eol(ch3) ) { ! styler.ColourTo(pos1, SCE_FORTH_DEFAULT); ! styler.ColourTo(pos2, SCE_FORTH_DEFAULT); cur_pos = pos2 + 1; } else { ! styler.ColourTo(pos1, SCE_FORTH_COMMENT); ! styler.ColourTo(lengthDoc-1, SCE_FORTH_COMMENT); break; // leave parser } --- 218,229 ---- if( ch1 == ' ' && ch2 == ':' && is_eol(ch3) ) { ! ColourTo( pos1, SCE_FORTH_DEFAULT, styler ); ! ColourTo( pos2, SCE_FORTH_DEFAULT, styler ); cur_pos = pos2 + 1; } else { ! ColourTo( pos1, SCE_FORTH_COMMENT, styler ); ! ColourTo( lengthDoc-1, SCE_FORTH_COMMENT, styler ); break; // leave parser } *************** *** 234,255 **** if( ch1 == ' ' && ch2 == ':' && is_eol(ch3) ) { ! styler.ColourTo(pos1, SCE_FORTH_ANS); ! styler.ColourTo(pos2, SCE_FORTH_ANS); cur_pos = pos2 + 1; } else { ! styler.ColourTo(pos1-1,SCE_FORTH_COMMENT); parse(1, false); ! styler.ColourTo(pos2,SCE_FORTH_COMMENT); } } else if( strcmp("(",buffer)==0 || strcmp(".(",buffer)==0 ) // comment till ) { ! styler.ColourTo(pos1,SCE_FORTH_COMMENT); if( !compile.InList(szLastToken) ) { parse(')', true); ! styler.ColourTo(pos2+1,SCE_FORTH_COMMENT); } } --- 236,257 ---- if( ch1 == ' ' && ch2 == ':' && is_eol(ch3) ) { ! ColourTo( pos1, SCE_FORTH_ANS, styler ); ! ColourTo( pos2, SCE_FORTH_ANS, styler ); cur_pos = pos2 + 1; } else { ! ColourTo( pos1-1,SCE_FORTH_COMMENT, styler ); parse(1, false); ! ColourTo( pos2,SCE_FORTH_COMMENT, styler ); } } else if( strcmp("(",buffer)==0 || strcmp(".(",buffer)==0 ) // comment till ) { ! ColourTo( pos1,SCE_FORTH_COMMENT, styler ); if( !compile.InList(szLastToken) ) { parse(')', true); ! ColourTo( pos2+1,SCE_FORTH_COMMENT, styler ); } } *************** *** 261,273 **** if( ch1 == ' ' && ch2 == ':' && is_eol(ch3) ) { ! styler.ColourTo(pos1, SCE_FORTH_DEFAULT); ! styler.ColourTo(pos2, SCE_FORTH_DEFAULT); cur_pos = pos2 + 1; } else { ! styler.ColourTo(pos1,SCE_FORTH_LOCALS); parse('}', true); ! styler.ColourTo(pos2+1,SCE_FORTH_LOCALS); } } --- 263,275 ---- if( ch1 == ' ' && ch2 == ':' && is_eol(ch3) ) { ! ColourTo( pos1, SCE_FORTH_DEFAULT, styler ); ! ColourTo( pos2, SCE_FORTH_DEFAULT, styler ); cur_pos = pos2 + 1; } else { ! ColourTo( pos1,SCE_FORTH_LOCALS, styler ); parse('}', true); ! ColourTo( pos2+1,SCE_FORTH_LOCALS, styler ); } } *************** *** 277,281 **** multiComment++; ! styler.ColourTo(pos1,SCE_FORTH_COMMENT); while( parse(BL,true) != 0 ) --- 279,283 ---- multiComment++; ! ColourTo( pos1,SCE_FORTH_COMMENT, styler ); while( parse(BL,true) != 0 ) *************** *** 295,299 **** if( !(multiComment) ) { ! styler.ColourTo(pos2,SCE_FORTH_COMMENT); break; } --- 297,301 ---- if( !(multiComment) ) { ! ColourTo( pos2,SCE_FORTH_COMMENT, styler ); break; } *************** *** 331,341 **** if( is_blank(ch) ) { ! styler.ColourTo( iStart, SCE_FORTH_STRING ); ! styler.ColourTo( pos2+1, SCE_FORTH_STRING ); } else if( is_eol(ch) ) { ! styler.ColourTo( iStart, SCE_FORTH_STRING ); ! styler.ColourTo( pos2+1, SCE_FORTH_STRING ); cur_pos = pos2 + 1; } --- 333,343 ---- if( is_blank(ch) ) { ! ColourTo( iStart, SCE_FORTH_STRING, styler ); ! ColourTo( pos2+1, SCE_FORTH_STRING, styler ); } else if( is_eol(ch) ) { ! ColourTo( iStart, SCE_FORTH_STRING, styler ); ! ColourTo( pos2+1, SCE_FORTH_STRING, styler ); cur_pos = pos2 + 1; } *************** *** 344,348 **** { if( parse(1, false) ) ! styler.ColourTo( pos2 , SCE_FORTH_STRING ); } --- 346,350 ---- { if( parse(1, false) ) ! ColourTo( pos2 , SCE_FORTH_STRING, styler ); } *************** *** 352,392 **** else if( ans.InList(buffer) ) // ANS words { ! styler.ColourTo(pos1,SCE_FORTH_ANS); ! styler.ColourTo(pos2,SCE_FORTH_ANS); } else if( user1.InList(buffer) ) // User words { ! styler.ColourTo(pos1,SCE_FORTH_USER1); ! styler.ColourTo(pos2,SCE_FORTH_USER1); } else if( user2.InList(buffer) ) // User words { ! styler.ColourTo(pos1,SCE_FORTH_USER2); ! styler.ColourTo(pos2,SCE_FORTH_USER2); } else if( user3.InList(buffer) ) // User words { ! styler.ColourTo(pos1,SCE_FORTH_USER3); ! styler.ColourTo(pos2,SCE_FORTH_USER3); } else if( user4.InList(buffer) ) // User words { ! styler.ColourTo(pos1,SCE_FORTH_USER4); ! styler.ColourTo(pos2,SCE_FORTH_USER4); } else if( user5.InList(buffer) ) // User words { ! styler.ColourTo(pos1,SCE_FORTH_USER5); ! styler.ColourTo(pos2,SCE_FORTH_USER5); } else if( user6.InList(buffer) ) // User words { ! styler.ColourTo(pos1,SCE_FORTH_USER6); ! styler.ColourTo(pos2,SCE_FORTH_USER6); } else if( is_number(buffer) ) // numbers { ! styler.ColourTo(pos1,SCE_FORTH_NUMBER); ! styler.ColourTo(pos2,SCE_FORTH_NUMBER); } //------------------------------------------------------------------------------------------- --- 354,394 ---- else if( ans.InList(buffer) ) // ANS words { ! ColourTo( pos1,SCE_FORTH_ANS, styler ); ! ColourTo( pos2,SCE_FORTH_ANS, styler ); } else if( user1.InList(buffer) ) // User words { ! ColourTo( pos1,SCE_FORTH_USER1, styler ); ! ColourTo( pos2,SCE_FORTH_USER1, styler ); } else if( user2.InList(buffer) ) // User words { ! ColourTo( pos1,SCE_FORTH_USER2, styler ); ! ColourTo( pos2,SCE_FORTH_USER2, styler ); } else if( user3.InList(buffer) ) // User words { ! ColourTo( pos1,SCE_FORTH_USER3, styler ); ! ColourTo( pos2,SCE_FORTH_USER3, styler ); } else if( user4.InList(buffer) ) // User words { ! ColourTo( pos1,SCE_FORTH_USER4, styler ); ! ColourTo( pos2,SCE_FORTH_USER4, styler ); } else if( user5.InList(buffer) ) // User words { ! ColourTo( pos1,SCE_FORTH_USER5, styler ); ! ColourTo( pos2,SCE_FORTH_USER5, styler ); } else if( user6.InList(buffer) ) // User words { ! ColourTo( pos1,SCE_FORTH_USER6, styler ); ! ColourTo( pos2,SCE_FORTH_USER6, styler ); } else if( is_number(buffer) ) // numbers { ! ColourTo( pos1,SCE_FORTH_NUMBER, styler ); ! ColourTo( pos2,SCE_FORTH_NUMBER, styler ); } //------------------------------------------------------------------------------------------- *************** *** 399,403 **** fclose(f_debug); #endif ! delete []buffer; delete []szLastToken; return; --- 401,405 ---- fclose(f_debug); #endif ! delete []buffer; buffer = NULL; delete []szLastToken; return; *************** *** 428,432 **** styler.StartAt( startPos ); styler.StartSegment( startPos ); ! styler.ColourTo(startPos + length - 1, 0); } } --- 430,434 ---- styler.StartAt( startPos ); styler.StartSegment( startPos ); ! ColourTo( startPos + length - 1, 0, styler ); } } |