From: Frank T. <ch...@us...> - 2003-08-29 21:42:45
|
Update of /cvsroot/bzflag/bzflag/src/common In directory sc8-pr-cvs1:/tmp/cvs-serv17716/src/common Modified Files: WordFilter.cxx Log Message: fix some warnings because a char was used as array index; can cuase problem when char is signed and contains values<0 (>=128); does filter work at all for 8 bit characters? can that occur? Index: WordFilter.cxx =================================================================== RCS file: /cvsroot/bzflag/bzflag/src/common/WordFilter.cxx,v retrieving revision 1.23 retrieving revision 1.24 diff -w -u -r1.23 -r1.24 --- WordFilter.cxx 27 Aug 2003 01:00:53 -0000 1.23 +++ WordFilter.cxx 29 Aug 2003 21:42:41 -0000 1.24 @@ -42,8 +42,11 @@ word = line.substr(startPosition, endPosition-startPosition); findWord.word = word; - if (filters[word[0]].find(findWord) != \ - filters[word[0]].end()) { + int firstchar = word[0]; + if (firstchar < 0) + firstchar+=256; // FIXME, not very clean? + if (filters[firstchar].find(findWord) != \ + filters[firstchar].end()) { /* fill with asterisks */ // memset(input+startPosition,'*', endPosition-startPosition); @@ -86,14 +89,14 @@ startPosition = 0; int endPosition; - char wordIndices[MAX_WORDS]; + unsigned char wordIndices[MAX_WORDS]; unsigned int wordIndexLength=0; char characterIndex; /* clear memory for arrays */ - memset(matchPair, 0, MAX_WORDS * 2 * sizeof(int)); - memset(wordIndices, 0, MAX_WORDS * sizeof(char)); + memset(matchPair, 0, MAX_WORDS * 2 * sizeof matchPair[0]); + memset(wordIndices, 0, MAX_WORDS * sizeof wordIndices[0]); /* iterate over all the words start position in the input and keep track * of the starting character of each word (we only need to check those) @@ -637,12 +640,15 @@ newFilter.expression = expression; newFilter.compiled = getCompiledExpression(expression); + int firstchar = tolower(word[0]); + if (firstchar < 0) + firstchar += 256; // FIXME, not too clean? /* check if the word is already added */ - if (filters[tolower(word[0])].find(newFilter) != \ - filters[word[0]].end()) { + if (filters[firstchar].find(newFilter) != \ + filters[firstchar].end()) { return false; } else { - filters[tolower(word[0])].insert(newFilter); + filters[firstchar].insert(newFilter); } return true; } |