import wordnet-3.0-33.el8

This commit is contained in:
CentOS Sources 2019-05-07 01:40:34 -04:00 committed by Stepan Oksanichenko
commit 0bfe1f5c67
13 changed files with 2470 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
SOURCES/WordNet-3.0.tar.bz2
SOURCES/wn3.1.dict.tar.gz

2
.wordnet.metadata Normal file
View File

@ -0,0 +1,2 @@
aeb7887cb4935756cf77deb1ea86973dff0e32fb SOURCES/WordNet-3.0.tar.bz2
67dee39f6e83c9a05d98c5790722b807812cda87 SOURCES/wn3.1.dict.tar.gz

View File

@ -0,0 +1,12 @@
--- wordnet-3.0.orig/src/wn.c
+++ wordnet-3.0/src/wn.c
@@ -206,7 +206,8 @@
outsenses += do_search(av[1], optptr->pos, optptr->search,
whichsense, optptr->label);
} else {
- sprintf(tmpbuf, "wn: invalid search option: %s\n", av[j]);
+ /* Fix CVE-2008-2149: buffer overflows Andreas Tille <tille@debian.org> */
+ sprintf(tmpbuf, "wn: invalid search option: %.200s\n", av[j]);
display_message(tmpbuf);
errcount++;
}

View File

@ -0,0 +1,732 @@
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);
}

View File

@ -0,0 +1,55 @@
From ab6d29e9056173145cf49ebf9804e6caf2f870ea Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Petr=20P=C3=ADsa=C5=99?= <ppisar@redhat.com>
Date: Wed, 4 Dec 2013 15:58:30 +0100
Subject: [PATCH] Pass compilation with -Werror=format-security
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
<https://bugzilla.redhat.com/show_bug.cgi?id=1037386>
Signed-off-by: Petr Písař <ppisar@redhat.com>
---
lib/binsrch.c | 4 ++--
src/wn.c | 3 +--
2 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/lib/binsrch.c b/lib/binsrch.c
index 8b71216..6b17325 100644
--- a/lib/binsrch.c
+++ b/lib/binsrch.c
@@ -193,7 +193,7 @@ char *replace_line(char *new_line, char *searchkey, FILE *fp)
copyfile(fp, tfp);
if (fseek(fp, offset, 0) == -1)
return(NULL); /* could not seek to offset */
- fprintf(fp, new_line); /* write line */
+ fputs(new_line, fp); /* write line */
rewind(tfp);
copyfile(tfp, fp);
@@ -220,7 +220,7 @@ char *insert_line(char *new_line, char *searchkey, FILE *fp)
copyfile(fp, tfp);
if (fseek(fp, offset, 0) == -1)
return(NULL); /* could not seek to offset */
- fprintf(fp, new_line); /* write line */
+ fputs(new_line, fp); /* write line */
rewind(tfp);
copyfile(tfp, fp);
diff --git a/src/wn.c b/src/wn.c
index 6870a60..7eef283 100644
--- a/src/wn.c
+++ b/src/wn.c
@@ -284,8 +284,7 @@ static void printsearches(char *word, int dbase, unsigned long search)
printf("\t");
printf(searchstr[j].template,
partchars[dbase], partchars[dbase]);
- printf(searchstr[j].helpstr);
- printf("\n");
+ printf("%s\n", searchstr[j].helpstr);
}
}
--
1.8.3.1

View File

@ -0,0 +1,12 @@
diff --git a/src/wn.c b/src/wn.c
index ddb27aa..b160392 100644
--- a/src/wn.c
+++ b/src/wn.c
@@ -344,7 +344,7 @@ static int getoptidx(char *searchtype)
static int error_message(char *msg)
{
- fprintf(stderr, msg);
+ fprintf(stderr, "%s", msg);
return(0);
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,12 @@
diff -urNad wordnet-3.0/src/wnb.orig wordnet-3.0/src/wnb
--- wordnet-3.0/src/wnb.orig 2005-06-07 21:19:22.000000000 +0200
+++ wordnet-3.0/src/wnb 2006-01-08 13:54:23.537621328 +0100
@@ -103,7 +103,7 @@
if {$tcl_platform(platform) == "unix"} {
if {[lsearch -exact [array names env] WNHOME] == -1} {
- set resourcedir "/usr/local/WordNet-3.0/lib/wnres"
+ set resourcedir "/usr/share/wordnet-3.0/lib/wnres"
} else {
set resourcedir "$env(WNHOME)/lib/wnres"
}

View File

@ -0,0 +1,26 @@
diff -up WordNet-3.0/configure.ac.orig WordNet-3.0/configure.ac
--- WordNet-3.0/configure.ac.orig 2009-05-27 11:57:53.000000000 +0200
+++ WordNet-3.0/configure.ac 2009-05-27 11:58:30.000000000 +0200
@@ -8,7 +8,8 @@ AC_CONFIG_HEADER([config.h])
# Checks for programs.
AC_PROG_CC
-AC_PROG_RANLIB
+AM_PROG_CC_C_O
+AC_PROG_LIBTOOL
AC_PROG_INSTALL
# Checks for header files.
diff -up WordNet-3.0/lib/Makefile.am.orig WordNet-3.0/lib/Makefile.am
--- WordNet-3.0/lib/Makefile.am.orig 2009-05-27 11:58:03.000000000 +0200
+++ WordNet-3.0/lib/Makefile.am 2009-05-27 11:59:35.000000000 +0200
@@ -1,5 +1,6 @@
-lib_LIBRARIES = libWN.a
-libWN_a_SOURCES = binsrch.c morph.c search.c wnglobal.c wnhelp.c wnrtl.c wnutil.c
-libWN_a_CPPFLAGS = $(INCLUDES)
+lib_LTLIBRARIES = libWN.la
+libWN_la_SOURCES = binsrch.c morph.c search.c wnglobal.c wnhelp.c wnrtl.c wnutil.c
+libWN_la_CPPFLAGS = $(INCLUDES)
+libWN_la_LDFLAGS = -version-number 3:0:0
INCLUDES = -I$(top_srcdir) -I$(top_srcdir)/include
SUBDIRS = wnres

View File

@ -0,0 +1,12 @@
diff -urNad wordnet-3.0/src/stubs.c.orig wordnet-3.0/src/stubs.c
--- wordnet-3.0/src/stubs.c.orig 2007-01-04 18:47:55.000000000 +0100
+++ wordnet-3.0/src/stubs.c 2007-01-20 19:01:19.000000000 +0100
@@ -14,7 +14,7 @@
#include <tk.h>
#include <wn.h>
-static char *Id = "$Id: stubs.c,v 1.7 2005/04/29 19:01:57 wn Exp $";
+static const char Id[] = "$Id: stubs.c,v 1.7 2005/04/29 19:01:57 wn Exp $";
static char resultbuf[SEARCHBUF];

View File

@ -0,0 +1,49 @@
diff -up WordNet-3.0/include/Makefile.am.BAD WordNet-3.0/include/Makefile.am
--- WordNet-3.0/include/Makefile.am.BAD 2009-02-18 13:59:09.000000000 -0500
+++ WordNet-3.0/include/Makefile.am 2009-02-18 13:59:12.000000000 -0500
@@ -1,2 +1 @@
include_HEADERS = wn.h
-SUBDIRS = tk
diff -up WordNet-3.0/include/Makefile.in.BAD WordNet-3.0/include/Makefile.in
--- WordNet-3.0/include/Makefile.in.BAD 2009-02-18 13:59:28.000000000 -0500
+++ WordNet-3.0/include/Makefile.in 2009-02-18 13:59:32.000000000 -0500
@@ -147,7 +147,6 @@ sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
include_HEADERS = wn.h
-SUBDIRS = tk
all: all-recursive
.SUFFIXES:
diff -up WordNet-3.0/configure.ac.BAD WordNet-3.0/configure.ac
--- WordNet-3.0/configure.ac.BAD 2009-02-18 14:02:54.000000000 -0500
+++ WordNet-3.0/configure.ac 2009-02-18 14:03:15.000000000 -0500
@@ -47,7 +47,7 @@ AC_DEFINE_UNQUOTED(DEFAULTPATH, ["$ac_pr
# This doesn't do anything
AC_CONFIG_COMMANDS([default])
-AC_CONFIG_FILES(Makefile dict/Makefile doc/Makefile doc/html/Makefile doc/man/Makefile doc/pdf/Makefile doc/ps/Makefile include/Makefile include/tk/Makefile
+AC_CONFIG_FILES(Makefile dict/Makefile doc/Makefile doc/html/Makefile doc/man/Makefile doc/pdf/Makefile doc/ps/Makefile include/Makefile
src/Makefile lib/Makefile lib/wnres/Makefile)
AC_OUTPUT
diff -up WordNet-3.0/configure.BAD WordNet-3.0/configure
--- WordNet-3.0/configure.BAD 2009-02-18 14:02:35.000000000 -0500
+++ WordNet-3.0/configure 2009-02-18 14:02:45.000000000 -0500
@@ -4296,7 +4296,7 @@ _ACEOF
ac_config_commands="$ac_config_commands default"
- ac_config_files="$ac_config_files Makefile dict/Makefile doc/Makefile doc/html/Makefile doc/man/Makefile doc/pdf/Makefile doc/ps/Makefile include/Makefile include/tk/Makefile src/Makefile lib/Makefile lib/wnres/Makefile"
+ ac_config_files="$ac_config_files Makefile dict/Makefile doc/Makefile doc/html/Makefile doc/man/Makefile doc/pdf/Makefile doc/ps/Makefile include/Makefile src/Makefile lib/Makefile lib/wnres/Makefile"
cat >confcache <<\_ACEOF
@@ -4856,7 +4856,6 @@ do
"doc/pdf/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/pdf/Makefile" ;;
"doc/ps/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/ps/Makefile" ;;
"include/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
- "include/tk/Makefile" ) CONFIG_FILES="$CONFIG_FILES include/tk/Makefile" ;;
"src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
"lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
"lib/wnres/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/wnres/Makefile" ;;

View File

@ -0,0 +1,48 @@
diff -up WordNet-3.0/doc/man/wishwn.1.orig WordNet-3.0/doc/man/wishwn.1
--- WordNet-3.0/doc/man/wishwn.1.orig 2009-01-14 00:47:21.000000000 +0100
+++ WordNet-3.0/doc/man/wishwn.1 2009-01-14 00:47:43.000000000 +0100
@@ -0,0 +1,44 @@
+.\" Copyright (c) 2001 Andreas Tille <tille@debian.org>
+.\"
+.\" This manual page is free software; you can redistribute it and/or modify
+.\" it under the terms of the GNU General Public License as published by
+.\" the Free Software Foundation; either version 2 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" This program is distributed in the hope that it will be useful,
+.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
+.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+.\" GNU General Public License for more details.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program; if not, write to the Free Software
+.\" Foundation, Inc.,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+.\"
+.\" This manual page is written especially for Debian Linux.
+.\"
+.TH WISHWN 1 "May 2001" "Debian Project" "Debian GNU/Linux"
+.SH NAME
+wishwn \- default version of the Tcl_AppInit procedure for wnb(1)
+
+.SH SYNOPSIS
+it is intended to be run from wnb (see wnb.1)
+
+.SH DESCRIPTION
+
+Provides a default version of the Tcl_AppInit procedure for
+use in wish and similar Tk-based applications.
+
+Acts as a gateway between Tcl and the Wordnet C library. It
+contains stubs for all the commands added to the default Tcl and Tk set
+for this Wordnet application, as well as the routine that initializes them.
+
+.SH SEE ALSO
+.BR wn (1),
+.BR wnb (1).
+
+.SH AUTHOR
+.B wishwn
+was written by the authors of wordnet 1.6.
+.PP
+This manual page was created by Andreas Tille <tille@debian.org>
+for the Debian GNU/Linux system. Feel free to improve this!

262
SPECS/wordnet.spec Normal file
View File

@ -0,0 +1,262 @@
Name: wordnet
Version: 3.0
Release: 33%{?dist}
Summary: A lexical database for the English language
License: MIT and GPLv2+
URL: http://wordnet.princeton.edu/
Source0: http://wordnetcode.princeton.edu/%{version}/WordNet-%{version}.tar.bz2
# Updated database
Source1: http://wordnetcode.princeton.edu/wn3.1.dict.tar.gz
Patch0: wordnet-3.0-CVE-2008-2149.patch
Patch1: wordnet-3.0-CVE-2008-3908.patch
Patch2: wordnet-3.0-fix_man.patch
Patch3: wordnet-3.0-fix_resourcedir_path.patch
Patch4: wordnet-3.0-src_stubs_c.patch
# wordnet-3.0-wishwn_manpage.patch is GPLv2+
Patch5: wordnet-3.0-wishwn_manpage.patch
Patch6: wordnet-3.0-use_system_tk_headers.patch
Patch7: wordnet-3.0-libtool.patch
# Bug #585206
Patch8: wordnet-3.0-error_message.patch
# Bug #1037386
Patch9: wordnet-3.0-Pass-compilation-with-Werror-format-security.patch
BuildRequires: automake >= 1.8
BuildRequires: coreutils
BuildRequires: gcc
BuildRequires: gzip
BuildRequires: libtool
BuildRequires: make
BuildRequires: tar
BuildRequires: tcl-devel
BuildRequires: tk-devel
%description
WordNet is a large lexical database of English, developed under the direction
of George A. Miller. Nouns, verbs, adjectives and adverbs are grouped into sets
of cognitive synonyms (synsets), each expressing a distinct concept. Synsets
are interlinked by means of conceptual-semantic and lexical relations. The
resulting network of meaningfully related words and concepts can be navigated
with the browser. WordNet is also freely and publicly available for download.
WordNet's structure makes it a useful tool for computational linguistics and
natural language processing.
%package browser
Summary: Tk browser for WordNet
Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: font(:lang=en)
%description browser
This package contains graphical browser for WordNet database.
%package devel
Summary: The development libraries and header files for WordNet
Requires: %{name} = %{version}-%{release}
%description devel
This package contains the libraries and header files required to create
applications based on WordNet.
%package doc
Summary: Manual pages for WordNet in alternative formats
BuildArch: noarch
%description doc
This package contains manual pages for WordNet package in HTML, PDF,
and PostScript format.
%prep
%setup -q -n WordNet-%{version}
%patch0 -p1 -b .cve-2008-2149
%patch1 -p1 -b .cve-2008-3908
%patch2 -p1 -b .fix_man
%patch3 -p1 -b .fix_resourcedir_path
%patch4 -p1 -b .src_stubs_c
%patch5 -p1 -b .wishwn_manpage
sed -e '/man_MANS/ s/$/ wishwn.1/' -i doc/man/Makefile.am
%patch6 -p1 -b .use_system_tk_headers
%patch7 -p1 -b .libtool
%patch8 -p1 -b .error_message
%patch9 -p1 -b .format
# delete the include/tk dir, since we do not use the included tk headers
rm -rf include/tk
# Update a database
tar -xozf %{SOURCE1}
# Remove database byproducts brought by the database update
rm -rf dict/dbfiles
%build
libtoolize && aclocal
autoupdate
autoreconf -i
%if 0%{?fedora} >= 21 || 0%{?rhel} > 7
export CFLAGS="%{?optflags} -DUSE_INTERP_RESULT"
export CXXFLAGS="%{?optflags} -DUSE_INTERP_RESULT"
%endif #0%{?fedora} >= 21 || 0%{?rhel} > 7
%configure --enable-static=no --prefix=%{_datadir}/wordnet-%{version}/
make %{?_smp_mflags}
%install
make install DESTDIR=$RPM_BUILD_ROOT
# delete the libWN.la files (reasoning in the packaging guidelines)
rm -f $RPM_BUILD_ROOT%{_libdir}/libWN.la
# Remove duplicate copies of docs installed by make install
rm -rf $RPM_BUILD_ROOT%{_datadir}/%{name}-%{version}/doc
# Remove useless Makefiles installed by %%doc
rm -rf doc/{html,ps,pdf}/Makefile*
%ldconfig_scriptlets
%files
%doc AUTHORS COPYING ChangeLog README
%{_bindir}/wn
%{_mandir}/man1/grind.1.gz
%{_mandir}/man1/wn.1.gz
%{_mandir}/man1/wnintro.1.gz
%{_mandir}/man5/*.5.gz
%{_mandir}/man7/*.7.gz
%{_datadir}/%{name}-%{version}/
%exclude %{_datadir}/%{name}-%{version}/lib/wnres/
%{_libdir}/libWN.so.*
%files browser
%{_bindir}/wishwn
%{_bindir}/wnb
%{_mandir}/man1/wishwn.1.gz
%{_mandir}/man1/wnb.1.gz
%{_datadir}/%{name}-%{version}/lib/wnres/
%files devel
%{_mandir}/man3/*.3.gz
%{_includedir}/wn.h
%{_libdir}/libWN.so
%files doc
%doc COPYING doc/{html,ps,pdf}
%changelog
* Fri Mar 23 2018 Petr Pisar <ppisar@redhat.com> - 3.0-33
- Modernize spec file
- Update database to version 3.1
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-32
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
* Wed Jan 24 2018 Merlin Mathesius <mmathesi@redhat.com> - 3.0-31
- Cleanup spec file conditionals
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-30
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
* Thu Jul 27 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-29
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
* Sat Feb 11 2017 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-28
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
* Fri Feb 05 2016 Fedora Release Engineering <releng@fedoraproject.org> - 3.0-27
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
* Fri Jun 19 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-26
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
* Mon Aug 18 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-25
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
* Sun Jun 08 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-24
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
* Sat May 31 2014 Björn Esser <bjoern.esser@gmail.com> - 3.0-23
- fix build with tcl-8.6 (#1102111)
- append `-DUSE_INTERP_RESULT` to C[XX]FLAGS on Fedora >= 21
* Wed May 21 2014 Jaroslav Škarvada <jskarvad@redhat.com> - 3.0-22
- Rebuilt for https://fedoraproject.org/wiki/Changes/f21tcl86
* Wed Dec 04 2013 Petr Pisar <ppisar@redhat.com> - 3.0-21
- Pass compilation with -Werror=format-security (bug #1037386)
* Sun Aug 04 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-20
- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild
* Fri Feb 15 2013 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-19
- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild
* Thu Sep 06 2012 Petr Pisar <ppisar@redhat.com> - 3.0-18
- wnb requires a font to start
- Move Tk browser to sub-package wordnet-browser
- Move alternative manual pages to wordnet-doc package
- Do not package INSTALL instructions and correct URL
- Modernize spec file
* Sun Jul 22 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-17
- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild
* Sat Jan 14 2012 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-16
- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild
* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-15
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
* Mon Nov 29 2010 Petr Pisar <ppisar@redhat.com> - 3.0-14
- Remove Makefiles from documentation clashing in multiarch installation
(#658118).
* Fri Apr 30 2010 Petr Pisar <ppisar@redhat.com> - 3.0-13
- Add GPLv2+ license tag because wishwn(1) manual page is GPLv2+-licensed.
* Wed Apr 28 2010 Petr Pisar <ppisar@redhat.com> - 3.0-12
- Devel subpackages requires tcl-devel and tk-devel.
- Install wishwn(1) manual page
* Mon Apr 26 2010 Petr Pisar <ppisar@redhat.com> - 3.0-11
- Fix error message printing (#585206)
- Fix Source0 URL and Summary typo
- Remove libX11-devel and libXft-devel BuildRequires as they are inherited
from tk-devel. Keep tcl-devel as tcl.h is included directly.
* Mon Jul 27 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 3.0-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild
* Wed Jun 10 2009 Caolan McNamara <caolanm@redhat.com> - 3.0-9
- Fixed fedora BZ 504957 - references to non-existing dirs in wnb
* Wed May 27 2009 Steven Fernandez <steve@lonetwin.net> - 3.0-8
- Fixed issues with the doc files duplication and ownership
* Wed May 27 2009 Steven Fernandez <steve@lonetwin.net> - 3.0-7
- Modified the %%files sections for both packages to only include the link in
the devel package and the .so in the main package.
- Added %%pre and %%post sections
* Wed May 27 2009 Steven Fernandez <steve@lonetwin.net> - 3.0-6
- Added commands to build only shared libs and remove libtool's .la files
before packaging
* Tue May 19 2009 Steven Fernandez <steve@lonetwin.net> - 3.0-5
- Added the libtool patch to build libWN.so dynamic lib
* Wed Feb 18 2009 Steven Fernandez <steve@lonetwin.net> - 3.0-4
- Added Tom 'spot' Callaway's patch to not include the tk.h and tkDecls.h from
the upstream source, but instead rely on system tk headers
* Sun Jan 18 2009 Steven Fernandez <steve@lonetwin.net> - 3.0-3
- renamed rpm from WordNet to wordnet to be more consistent with other distos
- split the devel package
- borrowed more patches from the debian package
* Tue Jan 13 2009 Steven Fernandez <steve@lonetwin.net> - 3.0-2
- patch to fix CVE-2008-3908
- Added the wishwn man page from the debian wordnet package
* Sat Nov 29 2008 Steven Fernandez <steve@lonetwin.net> - 3.0-1
- First build for Fedora 10