diff -urN aspell-0.50.5/prog/compress.c aspell-0.50.5.new/prog/compress.c --- aspell-0.50.5/prog/compress.c 2002-08-31 11:51:11.000000000 -0700 +++ aspell-0.50.5.new/prog/compress.c 2004-06-16 10:14:42.000000000 -0700 @@ -28,6 +28,11 @@ #endif +#define WORD_BUFF_SIZE 256 + +int count = 0; + + void usage () { fputs("Compresses or uncompresses sorted word lists.\n" , stderr); @@ -45,8 +50,9 @@ if (c == EOF) return 0; do { *w++ = (char)(c); - } while (c = getc(in), c != EOF && c > 32); + } while (c = getc(in), c != EOF && c > 32 && count < (WORD_BUFF_SIZE - 1)); *w = '\0'; + count++; ungetc(c, in); if (c == EOF) return 0; else return 1; @@ -61,14 +67,15 @@ } else if (argv[1][0] == 'c') { - char s1[256]; - char s2[256]; + char s1[WORD_BUFF_SIZE]; + char s2[WORD_BUFF_SIZE]; char * prev = s2; char * cur = s1; *prev = '\0'; SETBIN (stdout); + while (count < WORD_BUFF_SIZE) { while (get_word(stdin, cur)) { int i = 0; /* get the length of the prefix */ @@ -85,11 +92,12 @@ prev = s2; cur = s1; } } + } return 0; } else if (argv[1][0] == 'd') { - char cur[256]; + char cur[WORD_BUFF_SIZE]; int i; int c; @@ -100,8 +108,11 @@ if (i == 0) i = getc(stdin); --i; - while ((c = getc(stdin)) > 32) + while ((c = getc(stdin)) > 32 && i < (WORD_BUFF_SIZE -1)) { cur[i++] = (char)c; + count++; + } + cur[i] = '\0'; fputs(cur, stdout); putc('\n', stdout);