Fixed possible buffer overflow.
authorviric@llimona
Sat, 01 Sep 2007 12:34:52 +0200
changeset 18 64ed4238657f
parent 17 d95d9e7a2b81
child 19 4da6dbf01423
Fixed possible buffer overflow.
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;