Fixed possible buffer overflow.
--- 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;