diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/PropSet.cxx | 64 | 
1 files changed, 50 insertions, 14 deletions
| diff --git a/src/PropSet.cxx b/src/PropSet.cxx index 66018544a..27cd51baa 100644 --- a/src/PropSet.cxx +++ b/src/PropSet.cxx @@ -572,9 +572,18 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b  				do { // browse sequentially the rest after the hit  					brace = strchr(word, '(');  					if (brace) -						wordlen = brace - word; -					else -						wordlen = strlen(word); +						do +							if (--brace < word) +								break; +						while (isspace(*brace)); +					else { +						brace = word + strlen(word); +						do +							if (--brace < word) +								break; +						while (isspace(*brace)); +					} +					wordlen = brace - word + 1;  					newlength = length + wordlen; // stretch the buffer  					if (length)  						newlength++; @@ -589,7 +598,7 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b  					memcpy(buffer + length, word, wordlen);  					length = newlength;  					buffer[length] = '\0'; -					if (++pivot >= end) +					if (++pivot > end)  						break;  					word = wordsNoCase[pivot];  				} while (!strncasecmp(wordStart, word, searchLen)); @@ -603,9 +612,18 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b  						break;                   					brace = strchr(word, '(');  					if (brace) -						wordlen = brace - word; -					else -						wordlen = strlen(word); +						do +							if (--brace < word) +								break; +						while (isspace(*brace)); +					else { +						brace = word + strlen(word); +						do +							if (--brace < word) +								break; +						while (isspace(*brace)); +					} +					wordlen = brace - word + 1;  					newlength = length + wordlen; // stretch the buffer  					if (length)  						newlength++; @@ -639,9 +657,18 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b  				do { // browse sequentially the rest after the hit  					brace = strchr(word, '(');  					if (brace) -						wordlen = brace - word; -					else -						wordlen = strlen(word); +						do +							if (--brace < word) +								break; +						while (isspace(*brace)); +					else { +						brace = word + strlen(word); +						do +							if (--brace < word) +								break; +						while (isspace(*brace)); +					} +					wordlen = brace - word + 1;  					newlength = length + wordlen; // stretch the buffer  					if (length)  						newlength++; @@ -657,7 +684,7 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b  					memcpy(buffer + length, word, wordlen);  					length = newlength;  					buffer[length] = '\0'; -					if (++pivot >= end) +					if (++pivot > end)  						break;  					word = words[pivot];  				} while (!strncmp(wordStart, word, searchLen)); @@ -671,9 +698,18 @@ char *WordList::GetNearestWords(const char *wordStart, int searchLen /*= -1*/, b  						break;  					brace = strchr(word, '(');  					if (brace) -						wordlen = brace - word; -					else -						wordlen = strlen(word); +						do +							if (--brace < word) +								break; +						while (isspace(*brace)); +					else { +						brace = word + strlen(word); +						do +							if (--brace < word) +								break; +						while (isspace(*brace)); +					} +					wordlen = brace - word + 1;  					newlength = length + wordlen; // stretch the buffer  					if (length)  						newlength++; | 
