diff options
Diffstat (limited to 'app-dicts/wordnet/files/wordnet-3.0-CVE-2008-3908.patch')
-rw-r--r-- | app-dicts/wordnet/files/wordnet-3.0-CVE-2008-3908.patch | 732 |
1 files changed, 0 insertions, 732 deletions
diff --git a/app-dicts/wordnet/files/wordnet-3.0-CVE-2008-3908.patch b/app-dicts/wordnet/files/wordnet-3.0-CVE-2008-3908.patch deleted file mode 100644 index de430c3ea302..000000000000 --- a/app-dicts/wordnet/files/wordnet-3.0-CVE-2008-3908.patch +++ /dev/null @@ -1,732 +0,0 @@ -diff --git a/lib/binsrch.c b/lib/binsrch.c -index 85436f3..8b71216 100644 ---- a/lib/binsrch.c -+++ b/lib/binsrch.c -@@ -28,7 +28,7 @@ char *read_index(long offset, FILE *fp) { - char *linep; - - linep = line; -- line[0] = '0'; -+ line[0] = '\0'; - - fseek( fp, offset, SEEK_SET ); - fgets(linep, LINE_LEN, fp); -@@ -58,6 +58,8 @@ char *bin_search(char *searchkey, FILE *fp) - last_bin_search_offset = ftell( fp ); - fgets(linep, LINE_LEN, fp); - length = (int)(strchr(linep, ' ') - linep); -+ if (length > (sizeof(key) - 1)) -+ return(NULL); - strncpy(key, linep, length); - key[length] = '\0'; - if(strcmp(key, searchkey) < 0) { -@@ -110,6 +112,8 @@ static int bin_search_key(char *searchkey, FILE *fp) - line[length++] = c; - if (getc(fp) == EOF) { /* only 1 line in file */ - length = (int)(strchr(linep, ' ') - linep); -+ if (length > (sizeof(key) - 1)) -+ return(0); - strncpy(key, linep, length); - key[length] = '\0'; - if(strcmp(key, searchkey) > 0) { -@@ -132,6 +136,8 @@ static int bin_search_key(char *searchkey, FILE *fp) - if (fgets(linep, LINE_LEN, fp) != NULL) { - offset2 = ftell(fp); /* offset at start of next line */ - length = (int)(strchr(linep, ' ') - linep); -+ if (length > (sizeof(key) - 1)) -+ return(0); - strncpy(key, linep, length); - key[length] = '\0'; - if(strcmp(key, searchkey) < 0) { /* further in file */ -diff --git a/lib/morph.c b/lib/morph.c -index 0cff594..ea4b4f8 100644 ---- a/lib/morph.c -+++ b/lib/morph.c -@@ -51,24 +51,24 @@ static struct { - char *str; - int strlen; - } prepositions[NUMPREPS] = { -- "to", 2, -- "at", 2, -- "of", 2, -- "on", 2, -- "off", 3, -- "in", 2, -- "out", 3, -- "up", 2, -- "down", 4, -- "from", 4, -- "with", 4, -- "into", 4, -- "for", 3, -- "about", 5, -- "between", 7, -+ { "to", 2 }, -+ { "at", 2 }, -+ { "of", 2 }, -+ { "on", 2 }, -+ { "off", 3 }, -+ { "in", 2 }, -+ { "out", 3 }, -+ { "up", 2 }, -+ { "down", 4 }, -+ { "from", 4 }, -+ { "with", 4 }, -+ { "into", 4 }, -+ { "for", 3 }, -+ { "about", 5 }, -+ { "between", 7 } - }; - --static FILE *exc_fps[NUMPARTS + 1]; -+static FILE *exc_fps[NUMPARTS]; - - static int do_init(); - static int strend(char *, char *); -@@ -100,7 +100,7 @@ int re_morphinit(void) - { - int i; - -- for (i = 1; i <= NUMPARTS; i++) { -+ for (i = 0; i < NUMPARTS; i++) { - if (exc_fps[i] != NULL) { - fclose(exc_fps[i]); exc_fps[i] = NULL; - } -@@ -144,18 +144,19 @@ static int do_init(void) - } else - sprintf(searchdir, DEFAULTPATH); - #else -- if ((env = getenv("WNSEARCHDIR")) != NULL) -- strcpy(searchdir, env); -- else if ((env = getenv("WNHOME")) != NULL) -- sprintf(searchdir, "%s%s", env, DICTDIR); -- else -+ if ((env = getenv("WNSEARCHDIR")) != NULL) { -+ snprintf(searchdir, sizeof(searchdir), "%s", env); -+ } else if ((env = getenv("WNHOME")) != NULL) { -+ snprintf(searchdir, sizeof(searchdir), "%s%s", env, DICTDIR); -+ } else { - strcpy(searchdir, DEFAULTPATH); -+ } - #endif - -- for (i = 1; i <= NUMPARTS; i++) { -- sprintf(fname, EXCFILE, searchdir, partnames[i]); -+ for (i = 0; i < NUMPARTS; i++) { -+ snprintf(fname, sizeof(fname), EXCFILE, searchdir, partnames[i+1]); - if ((exc_fps[i] = fopen(fname, "r")) == NULL) { -- sprintf(msgbuf, -+ snprintf(msgbuf, sizeof(msgbuf), - "WordNet library error: Can't open exception file(%s)\n\n", - fname); - display_message(msgbuf); -@@ -178,13 +179,16 @@ char *morphstr(char *origstr, int pos) - int prep; - char *end_idx1, *end_idx2; - char *append; -- -+ - if (pos == SATELLITE) - pos = ADJ; - - /* First time through for this string */ - - if (origstr != NULL) { -+ if (strlen(origstr) > WORDBUF - 1) -+ return(NULL); -+ - /* Assume string hasn't had spaces substitued with '_' */ - strtolower(strsubst(strcpy(str, origstr), ' ', '_')); - searchstr[0] = '\0'; -@@ -232,7 +236,7 @@ char *morphstr(char *origstr, int pos) - if (end_idx < 0) return(NULL); /* shouldn't do this */ - strncpy(word, str + st_idx, end_idx - st_idx); - word[end_idx - st_idx] = '\0'; -- if(tmp = morphword(word, pos)) -+ if ((tmp = morphword(word, pos)) != NULL) - strcat(searchstr,tmp); - else - strcat(searchstr,word); -@@ -240,7 +244,7 @@ char *morphstr(char *origstr, int pos) - st_idx = end_idx + 1; - } - -- if(tmp = morphword(strcpy(word, str + st_idx), pos)) -+ if ((tmp = morphword(strcpy(word, str + st_idx), pos)) != NULL) - strcat(searchstr,tmp); - else - strcat(searchstr,word); -@@ -270,16 +274,15 @@ char *morphword(char *word, int pos) - { - int offset, cnt; - int i; -- static char retval[WORDBUF]; -- char *tmp, tmpbuf[WORDBUF], *end; -- -- sprintf(retval,""); -- sprintf(tmpbuf, ""); -- end = ""; -- -+ static char retval[WORDBUF] = ""; -+ char *tmp, tmpbuf[WORDBUF] = "", *end = ""; -+ - if(word == NULL) - return(NULL); - -+ if (strlen(word) > WORDBUF - 1) -+ return(NULL); -+ - /* first look for word on exception list */ - - if((tmp = exc_lookup(word, pos)) != NULL) -@@ -335,7 +338,10 @@ static char *wordbase(char *word, int ender) - { - char *pt1; - static char copy[WORDBUF]; -- -+ -+ if (strlen(word) > WORDBUF - 1) -+ return(NULL); -+ - strcpy(copy, word); - if(strend(copy,sufx[ender])) { - pt1=strchr(copy,'\0'); -@@ -368,13 +374,14 @@ static char *exc_lookup(char *word, int pos) - { - static char line[WORDBUF], *beglp, *endlp; - char *excline; -- int found = 0; - - if (exc_fps[pos] == NULL) - return(NULL); - - /* first time through load line from exception file */ - if(word != NULL){ -+ if (strlen(word) > WORDBUF - 1) -+ return(NULL); - if ((excline = bin_search(word, exc_fps[pos])) != NULL) { - strcpy(line, excline); - endlp = strchr(line,' '); -@@ -403,6 +410,9 @@ static char *morphprep(char *s) - char word[WORDBUF], end[WORDBUF]; - static char retval[WORDBUF]; - -+ if (strlen(s) > WORDBUF - 1) -+ return (NULL); -+ - /* Assume that the verb is the first word in the phrase. Strip it - off, check for validity, then try various morphs with the - rest of the phrase tacked on, trying to find a match. */ -@@ -410,7 +420,7 @@ static char *morphprep(char *s) - rest = strchr(s, '_'); - last = strrchr(s, '_'); - if (rest != last) { /* more than 2 words */ -- if (lastwd = morphword(last + 1, NOUN)) { -+ if ((lastwd = morphword(last + 1, NOUN)) != NULL) { - strncpy(end, rest, last - rest + 1); - end[last-rest+1] = '\0'; - strcat(end, lastwd); -diff --git a/lib/search.c b/lib/search.c -index 1cdedc3..bc781cd 100644 ---- a/lib/search.c -+++ b/lib/search.c -@@ -13,6 +13,7 @@ - #include <stdlib.h> - #include <string.h> - #include <assert.h> -+#include <limits.h> - - #include "wn.h" - -@@ -119,33 +120,22 @@ IndexPtr parse_index(long offset, int dbase, char *line) { - if ( !line ) - line = read_index( offset, indexfps[dbase] ); - -- idx = (IndexPtr)malloc(sizeof(Index)); -+ idx = (IndexPtr)calloc(1, sizeof(Index)); - assert(idx); - - /* set offset of entry in index file */ - idx->idxoffset = offset; - -- idx->wd='\0'; -- idx->pos='\0'; -- idx->off_cnt=0; -- idx->tagged_cnt = 0; -- idx->sense_cnt=0; -- idx->offset='\0'; -- idx->ptruse_cnt=0; -- idx->ptruse='\0'; -- - /* get the word */ - ptrtok=strtok(line," \n"); - -- idx->wd = malloc(strlen(ptrtok) + 1); -+ idx->wd = strdup(ptrtok); - assert(idx->wd); -- strcpy(idx->wd, ptrtok); - - /* get the part of speech */ - ptrtok=strtok(NULL," \n"); -- idx->pos = malloc(strlen(ptrtok) + 1); -+ idx->pos = strdup(ptrtok); - assert(idx->pos); -- strcpy(idx->pos, ptrtok); - - /* get the collins count */ - ptrtok=strtok(NULL," \n"); -@@ -154,7 +144,12 @@ IndexPtr parse_index(long offset, int dbase, char *line) { - /* get the number of pointers types */ - ptrtok=strtok(NULL," \n"); - idx->ptruse_cnt = atoi(ptrtok); -- -+ -+ if (idx->ptruse_cnt < 0 || (unsigned int)idx->ptruse_cnt > UINT_MAX/sizeof(int)) { -+ free_index(idx); -+ return(NULL); -+ } -+ - if (idx->ptruse_cnt) { - idx->ptruse = (int *) malloc(idx->ptruse_cnt * (sizeof(int))); - assert(idx->ptruse); -@@ -173,9 +168,14 @@ IndexPtr parse_index(long offset, int dbase, char *line) { - /* get the number of senses that are tagged */ - ptrtok=strtok(NULL," \n"); - idx->tagged_cnt = atoi(ptrtok); -- -+ -+ if (idx->off_cnt < 0 || (unsigned long)idx->off_cnt > ULONG_MAX/sizeof(long)) { -+ free_index(idx); -+ return(NULL); -+ } -+ - /* make space for the offsets */ -- idx->offset = (long *) malloc(idx->off_cnt * (sizeof(long))); -+ idx->offset = (unsigned long *) malloc(idx->off_cnt * sizeof(long)); - assert(idx->offset); - - /* get the offsets */ -@@ -197,15 +197,21 @@ IndexPtr getindex(char *searchstr, int dbase) - char strings[MAX_FORMS][WORDBUF]; /* vector of search strings */ - static IndexPtr offsets[MAX_FORMS]; - static int offset; -- -+ - /* This works like strrok(): if passed with a non-null string, - prepare vector of search strings and offsets. If string - is null, look at current list of offsets and return next - one, or NULL if no more alternatives for this word. */ - - if (searchstr != NULL) { -- -- offset = 0; -+ /* Bail out if the input is too long for us to handle */ -+ if (strlen(searchstr) > (WORDBUF - 1)) { -+ strcpy(msgbuf, "WordNet library error: search term is too long\n"); -+ display_message(msgbuf); -+ return(NULL); -+ } -+ -+ offset = 0; - strtolower(searchstr); - for (i = 0; i < MAX_FORMS; i++) { - strcpy(strings[i], searchstr); -@@ -229,11 +235,11 @@ IndexPtr getindex(char *searchstr, int dbase) - /* Get offset of first entry. Then eliminate duplicates - and get offsets of unique strings. */ - -- if (strings[0][0] != NULL) -+ if (strings[0] != NULL) - offsets[0] = index_lookup(strings[0], dbase); - - for (i = 1; i < MAX_FORMS; i++) -- if ((strings[i][0]) != NULL && (strcmp(strings[0], strings[i]))) -+ if (strings[i] != NULL && (strcmp(strings[0], strings[i]))) - offsets[i] = index_lookup(strings[i], dbase); - } - -@@ -272,7 +278,7 @@ SynsetPtr read_synset(int dbase, long boffset, char *word) - SynsetPtr parse_synset(FILE *fp, int dbase, char *word) - { - static char line[LINEBUF]; -- char tbuf[SMLINEBUF]; -+ char tbuf[SMLINEBUF] = ""; - char *ptrtok; - char *tmpptr; - int foundpert = 0; -@@ -286,33 +292,11 @@ SynsetPtr parse_synset(FILE *fp, int dbase, char *word) - if ((tmpptr = fgets(line, LINEBUF, fp)) == NULL) - return(NULL); - -- synptr = (SynsetPtr)malloc(sizeof(Synset)); -+ synptr = (SynsetPtr)calloc(1, sizeof(Synset)); - assert(synptr); -- -- synptr->hereiam = 0; -+ - synptr->sstype = DONT_KNOW; -- synptr->fnum = 0; -- synptr->pos = '\0'; -- synptr->wcount = 0; -- synptr->words = '\0'; -- synptr->whichword = 0; -- synptr->ptrcount = 0; -- synptr->ptrtyp = '\0'; -- synptr->ptroff = '\0'; -- synptr->ppos = '\0'; -- synptr->pto = '\0'; -- synptr->pfrm = '\0'; -- synptr->fcount = 0; -- synptr->frmid = '\0'; -- synptr->frmto = '\0'; -- synptr->defn = '\0'; -- synptr->key = 0; -- synptr->nextss = NULL; -- synptr->nextform = NULL; - synptr->searchtype = -1; -- synptr->ptrlist = NULL; -- synptr->headword = NULL; -- synptr->headsense = 0; - - ptrtok = line; - -@@ -322,7 +306,7 @@ SynsetPtr parse_synset(FILE *fp, int dbase, char *word) - - /* sanity check - make sure starting file offset matches first field */ - if (synptr->hereiam != loc) { -- sprintf(msgbuf, "WordNet library error: no synset at location %d\n", -+ sprintf(msgbuf, "WordNet library error: no synset at location %ld\n", - loc); - display_message(msgbuf); - free(synptr); -@@ -335,16 +319,20 @@ SynsetPtr parse_synset(FILE *fp, int dbase, char *word) - - /* looking at POS */ - ptrtok = strtok(NULL, " \n"); -- synptr->pos = malloc(strlen(ptrtok) + 1); -+ synptr->pos = strdup(ptrtok); - assert(synptr->pos); -- strcpy(synptr->pos, ptrtok); - if (getsstype(synptr->pos) == SATELLITE) - synptr->sstype = INDIRECT_ANT; - - /* looking at numwords */ - ptrtok = strtok(NULL, " \n"); - synptr->wcount = strtol(ptrtok, NULL, 16); -- -+ -+ if (synptr->wcount < 0 || (unsigned int)synptr->wcount > UINT_MAX/sizeof(char *)) { -+ free_syns(synptr); -+ return(NULL); -+ } -+ - synptr->words = (char **)malloc(synptr->wcount * sizeof(char *)); - assert(synptr->words); - synptr->wnsns = (int *)malloc(synptr->wcount * sizeof(int)); -@@ -354,9 +342,8 @@ SynsetPtr parse_synset(FILE *fp, int dbase, char *word) - - for (i = 0; i < synptr->wcount; i++) { - ptrtok = strtok(NULL, " \n"); -- synptr->words[i] = malloc(strlen(ptrtok) + 1); -+ synptr->words[i] = strdup(ptrtok); - assert(synptr->words[i]); -- strcpy(synptr->words[i], ptrtok); - - /* is this the word we're looking for? */ - -@@ -371,6 +358,12 @@ SynsetPtr parse_synset(FILE *fp, int dbase, char *word) - ptrtok = strtok(NULL," \n"); - synptr->ptrcount = atoi(ptrtok); - -+ /* Should we check for long here as well? */ -+ if (synptr->ptrcount < 0 || (unsigned int)synptr->ptrcount > UINT_MAX/sizeof(int)) { -+ free_syns(synptr); -+ return(NULL); -+ } -+ - if (synptr->ptrcount) { - - /* alloc storage for the pointers */ -@@ -455,21 +448,23 @@ SynsetPtr parse_synset(FILE *fp, int dbase, char *word) - ptrtok = strtok(NULL," \n"); - if (ptrtok) { - ptrtok = strtok(NULL," \n"); -- sprintf(tbuf, ""); - while (ptrtok != NULL) { -+ if (strlen(ptrtok) + strlen(tbuf) + 1 + 1 > sizeof(tbuf)) { -+ free_syns(synptr); -+ return(NULL); -+ } - strcat(tbuf,ptrtok); - ptrtok = strtok(NULL, " \n"); - if(ptrtok) - strcat(tbuf," "); - } -- assert((1 + strlen(tbuf)) < sizeof(tbuf)); -- synptr->defn = malloc(strlen(tbuf) + 4); -+ synptr->defn = malloc(strlen(tbuf) + 3); - assert(synptr->defn); - sprintf(synptr->defn,"(%s)",tbuf); - } - - if (keyindexfp) { /* we have unique keys */ -- sprintf(tmpbuf, "%c:%8.8d", partchars[dbase], synptr->hereiam); -+ sprintf(tmpbuf, "%c:%8.8ld", partchars[dbase], synptr->hereiam); - synptr->key = GetKeyForOffset(tmpbuf); - } - -@@ -635,7 +630,7 @@ static void traceptrs(SynsetPtr synptr, int ptrtyp, int dbase, int depth) - - if ((ptrtyp == PERTPTR || ptrtyp == PPLPTR) && - synptr->pto[i] != 0) { -- sprintf(tbuf, " (Sense %d)\n", -+ snprintf(tbuf, sizeof(tbuf), " (Sense %d)\n", - cursyn->wnsns[synptr->pto[i] - 1]); - printsynset(prefix, cursyn, tbuf, DEFOFF, synptr->pto[i], - SKIP_ANTS, PRINT_MARKER); -@@ -656,7 +651,7 @@ static void traceptrs(SynsetPtr synptr, int ptrtyp, int dbase, int depth) - traceptrs(cursyn, HYPERPTR, getpos(cursyn->pos), 0); - } - } else if (ptrtyp == ANTPTR && dbase != ADJ && synptr->pto[i] != 0) { -- sprintf(tbuf, " (Sense %d)\n", -+ snprintf(tbuf, sizeof(tbuf), " (Sense %d)\n", - cursyn->wnsns[synptr->pto[i] - 1]); - printsynset(prefix, cursyn, tbuf, DEFOFF, synptr->pto[i], - SKIP_ANTS, PRINT_MARKER); -@@ -817,7 +812,7 @@ static void tracenomins(SynsetPtr synptr, int dbase) - - cursyn = read_synset(synptr->ppos[i], synptr->ptroff[i], ""); - -- sprintf(tbuf, "#%d\n", -+ snprintf(tbuf, sizeof(tbuf), "#%d\n", - cursyn->wnsns[synptr->pto[i] - 1]); - printsynset(prefix, cursyn, tbuf, DEFOFF, synptr->pto[i], - SKIP_ANTS, SKIP_MARKER); -@@ -989,12 +984,12 @@ void getexample(char *offset, char *wd) - char sentbuf[512]; - - if (vsentfilefp != NULL) { -- if (line = bin_search(offset, vsentfilefp)) { -+ if ((line = bin_search(offset, vsentfilefp)) != NULL) { - while(*line != ' ') - line++; - - printbuffer(" EX: "); -- sprintf(sentbuf, line, wd); -+ snprintf(sentbuf, sizeof(sentbuf), line, wd); - printbuffer(sentbuf); - } - } -@@ -1011,7 +1006,7 @@ int findexample(SynsetPtr synptr) - if (vidxfilefp != NULL) { - wdnum = synptr->whichword - 1; - -- sprintf(tbuf,"%s%%%-1.1d:%-2.2d:%-2.2d::", -+ snprintf(tbuf, sizeof(tbuf), "%s%%%-1.1d:%-2.2d:%-2.2d::", - synptr->words[wdnum], - getpos(synptr->pos), - synptr->fnum, -@@ -1124,7 +1119,7 @@ static void freq_word(IndexPtr index) - if (cnt >= 17 && cnt <= 32) familiar = 6; - if (cnt > 32 ) familiar = 7; - -- sprintf(tmpbuf, -+ snprintf(tmpbuf, sizeof(tmpbuf), - "\n%s used as %s is %s (polysemy count = %d)\n", - index->wd, a_an[getpos(index->pos)], freqcats[familiar], cnt); - printbuffer(tmpbuf); -@@ -1147,6 +1142,9 @@ void wngrep (char *word_passed, int pos) { - } - rewind(inputfile); - -+ if (strlen(word_passed) + 1 > sizeof(word)) -+ return; -+ - strcpy (word, word_passed); - ToLowerCase(word); /* map to lower case for index file search */ - strsubst (word, ' ', '_'); /* replace spaces with underscores */ -@@ -1169,7 +1167,7 @@ void wngrep (char *word_passed, int pos) { - ((line[loc + wordlen] == '-') || (line[loc + wordlen] == '_'))) - ) { - strsubst (line, '_', ' '); -- sprintf (tmpbuf, "%s\n", line); -+ snprintf (tmpbuf, sizeof(tmpbuf), "%s\n", line); - printbuffer (tmpbuf); - break; - } -@@ -1570,7 +1568,8 @@ char *findtheinfo(char *searchstr, int dbase, int ptrtyp, int whichsense) - bufstart[0] = '\n'; - bufstart++; - } -- strncpy(bufstart, tmpbuf, strlen(tmpbuf)); -+ /* Don't include the \0 */ -+ memcpy(bufstart, tmpbuf, strlen(tmpbuf)); - bufstart = searchbuffer + strlen(searchbuffer); - } - } -@@ -1683,9 +1682,8 @@ SynsetPtr traceptrs_ds(SynsetPtr synptr, int ptrtyp, int dbase, int depth) - cursyn = read_synset(synptr->ppos[i], - synptr->ptroff[i], - ""); -- synptr->headword = malloc(strlen(cursyn->words[0]) + 1); -+ synptr->headword = strdup(cursyn->words[0]); - assert(synptr->headword); -- strcpy(synptr->headword, cursyn->words[0]); - synptr->headsense = cursyn->lexid[0]; - free_synset(cursyn); - break; -@@ -2013,7 +2011,7 @@ static int getsearchsense(SynsetPtr synptr, int whichword) - strsubst(strcpy(wdbuf, synptr->words[whichword - 1]), ' ', '_'); - strtolower(wdbuf); - -- if (idx = index_lookup(wdbuf, getpos(synptr->pos))) { -+ if ((idx = index_lookup(wdbuf, getpos(synptr->pos))) != NULL) { - for (i = 0; i < idx->off_cnt; i++) - if (idx->offset[i] == synptr->hereiam) { - free_index(idx); -@@ -2037,7 +2035,7 @@ static void printsynset(char *head, SynsetPtr synptr, char *tail, int definition - by flags */ - - if (offsetflag) /* print synset offset */ -- sprintf(tbuf + strlen(tbuf),"{%8.8d} ", synptr->hereiam); -+ sprintf(tbuf + strlen(tbuf),"{%8.8ld} ", synptr->hereiam); - if (fileinfoflag) { /* print lexicographer file information */ - sprintf(tbuf + strlen(tbuf), "<%s> ", lexfiles[synptr->fnum]); - prlexid = 1; /* print lexicographer id after word */ -@@ -2072,7 +2070,7 @@ static void printantsynset(SynsetPtr synptr, char *tail, int anttype, int defini - tbuf[0] = '\0'; - - if (offsetflag) -- sprintf(tbuf,"{%8.8d} ", synptr->hereiam); -+ sprintf(tbuf,"{%8.8ld} ", synptr->hereiam); - if (fileinfoflag) { - sprintf(tbuf + strlen(tbuf),"<%s> ", lexfiles[synptr->fnum]); - prlexid = 1; -diff --git a/lib/wnutil.c b/lib/wnutil.c -index 5ee5d76..7b7948a 100644 ---- a/lib/wnutil.c -+++ b/lib/wnutil.c -@@ -48,7 +48,7 @@ int wninit(void) - char *env; - - if (!done) { -- if (env = getenv("WNDBVERSION")) { -+ if ((env = getenv("WNDBVERSION")) != NULL) { - wnrelease = strdup(env); /* set release */ - assert(wnrelease); - } -@@ -70,7 +70,7 @@ int re_wninit(void) - - closefps(); - -- if (env = getenv("WNDBVERSION")) { -+ if ((env = getenv("WNDBVERSION")) != NULL) { - wnrelease = strdup(env); /* set release */ - assert(wnrelease); - } -@@ -149,25 +149,25 @@ static int do_init(void) - sprintf(searchdir, DEFAULTPATH); - #else - if ((env = getenv("WNSEARCHDIR")) != NULL) -- strcpy(searchdir, env); -+ snprintf(searchdir, sizeof(searchdir), "%s", env); - else if ((env = getenv("WNHOME")) != NULL) -- sprintf(searchdir, "%s%s", env, DICTDIR); -+ snprintf(searchdir, sizeof(searchdir), "%s%s", env, DICTDIR); - else - strcpy(searchdir, DEFAULTPATH); - #endif - - for (i = 1; i < NUMPARTS + 1; i++) { -- sprintf(tmpbuf, DATAFILE, searchdir, partnames[i]); -+ snprintf(tmpbuf, sizeof(tmpbuf), DATAFILE, searchdir, partnames[i]); - if((datafps[i] = fopen(tmpbuf, "r")) == NULL) { -- sprintf(msgbuf, -+ snprintf(msgbuf, sizeof(msgbuf), - "WordNet library error: Can't open datafile(%s)\n", - tmpbuf); - display_message(msgbuf); - openerr = -1; - } -- sprintf(tmpbuf, INDEXFILE, searchdir, partnames[i]); -+ snprintf(tmpbuf, sizeof(tmpbuf), INDEXFILE, searchdir, partnames[i]); - if((indexfps[i] = fopen(tmpbuf, "r")) == NULL) { -- sprintf(msgbuf, -+ snprintf(msgbuf, sizeof(msgbuf), - "WordNet library error: Can't open indexfile(%s)\n", - tmpbuf); - display_message(msgbuf); -@@ -178,35 +178,35 @@ static int do_init(void) - /* This file isn't used by the library and doesn't have to - be present. No error is reported if the open fails. */ - -- sprintf(tmpbuf, SENSEIDXFILE, searchdir); -+ snprintf(tmpbuf, sizeof(tmpbuf), SENSEIDXFILE, searchdir); - sensefp = fopen(tmpbuf, "r"); - - /* If this file isn't present, the runtime code will skip printint out - the number of times each sense was tagged. */ - -- sprintf(tmpbuf, CNTLISTFILE, searchdir); -+ snprintf(tmpbuf, sizeof(tmpbuf), CNTLISTFILE, searchdir); - cntlistfp = fopen(tmpbuf, "r"); - - /* This file doesn't have to be present. No error is reported if the - open fails. */ - -- sprintf(tmpbuf, KEYIDXFILE, searchdir); -+ snprintf(tmpbuf, sizeof(tmpbuf), KEYIDXFILE, searchdir); - keyindexfp = fopen(tmpbuf, "r"); - -- sprintf(tmpbuf, REVKEYIDXFILE, searchdir); -+ snprintf(tmpbuf, sizeof(tmpbuf), REVKEYIDXFILE, searchdir); - revkeyindexfp = fopen(tmpbuf, "r"); - -- sprintf(tmpbuf, VRBSENTFILE, searchdir); -+ snprintf(tmpbuf, sizeof(tmpbuf), VRBSENTFILE, searchdir); - if ((vsentfilefp = fopen(tmpbuf, "r")) == NULL) { -- sprintf(msgbuf, -+ snprintf(msgbuf, sizeof(msgbuf), - "WordNet library warning: Can't open verb example sentence file(%s)\n", - tmpbuf); - display_message(msgbuf); - } - -- sprintf(tmpbuf, VRBIDXFILE, searchdir); -+ snprintf(tmpbuf, sizeof(tmpbuf), VRBIDXFILE, searchdir); - if ((vidxfilefp = fopen(tmpbuf, "r")) == NULL) { -- sprintf(msgbuf, -+ snprintf(msgbuf, sizeof(msgbuf), - "WordNet library warning: Can't open verb example sentence index file(%s)\n", - tmpbuf); - display_message(msgbuf); -diff --git a/src/wn.c b/src/wn.c -index ddb27aa..5c6a255 100644 ---- a/src/wn.c -+++ b/src/wn.c -@@ -129,7 +129,7 @@ static void printusage(), printlicense(), - printsearches(char *, int, unsigned long); - static int error_message(char *); - --main(int argc,char *argv[]) -+int main(int argc,char *argv[]) - { - display_message = error_message; - -@@ -225,14 +225,14 @@ static int do_search(char *searchword, int pos, int search, int whichsense, - printf("\n%s of %s %s\n%s", - label, partnames[pos], searchword, outbuf); - -- if (morphword = morphstr(searchword, pos)) -+ if ((morphword = morphstr(searchword, pos)) != NULL) - do { - outbuf = findtheinfo(morphword, pos, search, whichsense); - totsenses += wnresults.printcnt; - if (strlen(outbuf) > 0) - printf("\n%s of %s %s\n%s", - label, partnames[pos], morphword, outbuf); -- } while (morphword = morphstr(NULL, pos)); -+ } while ((morphword = morphstr(NULL, pos)) != NULL); - - return(totsenses); - } |