# HG changeset patch # User viric@llimona # Date 1188642892 -7200 # Node ID 64ed4238657fc9e73d2638029ccc2d224c2b52e9 # Parent d95d9e7a2b81a574a9840698958efca1d8a20b52 Fixed possible buffer overflow. diff -r d95d9e7a2b81 -r 64ed4238657f parse_text.c --- a/parse_text.c Sat Sep 01 12:26:22 2007 +0200 +++ b/parse_text.c Sat Sep 01 12:34:52 2007 +0200 @@ -55,6 +55,8 @@ { unsigned char tmp[MAXWORD]; int wordpos = 0; + int skip_non_ascii = 0; + do { int c; @@ -64,7 +66,7 @@ c = my_fgetc(in); if (c == EOF || c == END_OF_URL) break; - if (is_ASCII(c)) + if (skip_non_ascii || is_ASCII(c)) { if (wordpos != 0) { @@ -73,10 +75,24 @@ wordpos = 0; } putchar(c); + /* End of skip_non_ascii when we find an + * ascii string */ + if (skip_non_ascii && is_ASCII(c)) + skip_non_ascii = 0; } else /* non-ASCII - we consider it russian */ { tmp[wordpos++] = c; + if (wordpos >= MAXWORD) + { + /* Dump the word and the rest of non-ASCII, because + * we cannot fit it in 'tmp' */ + int i; + for(i=0; i < wordpos; ++i) + putchar(tmp[i]); + wordpos=0; + skip_non_ascii = 1; + } } pos += 1;