ports/textproc/clucene/files/patch-src__contribs-lib__CLucene__highlighter__Highlighter.cpp
Jung-uk Kim 31a4a592a1 - Fix a buffer overflow in highlighter. [1]
- Apply upstream patches to plug a memory leak, etc.
- Move CLuceneConfig.cmake to DATADIR as other ports do.
- Fix several problems found by Clang and make it build cleanly.

Submitted by:	Kishore Ramareddy (kishore at niksun dot com)
		(initial version) [1]
2013-03-28 00:18:41 +00:00

56 lines
2 KiB
C++

--- src/contribs-lib/CLucene/highlighter/Highlighter.cpp.orig 2011-03-16 20:21:07.000000000 -0400
+++ src/contribs-lib/CLucene/highlighter/Highlighter.cpp 2013-03-27 19:05:00.000000000 -0400
@@ -214,8 +214,9 @@
int32_t startOffset;
int32_t endOffset;
int32_t lastEndOffset = 0;
+ int len;
_textFragmenter->start(text);
- TCHAR substringBuffer[LUCENE_MAX_WORD_LEN];
+ TCHAR substringBuffer[LUCENE_MAX_WORD_LEN+1];
TokenGroup* tokenGroup=_CLNEW TokenGroup();
@@ -229,8 +230,9 @@
startOffset = tokenGroup->getStartOffset();
endOffset = tokenGroup->getEndOffset();
- _tcsncpy(substringBuffer,text+startOffset,endOffset-startOffset);
- substringBuffer[endOffset-startOffset]=_T('\0');
+ len = cl_min(endOffset-startOffset,LUCENE_MAX_WORD_LEN);
+ _tcsncpy(substringBuffer,text+startOffset,len);
+ substringBuffer[len]=_T('\0');
TCHAR* encoded = _encoder->encodeText(substringBuffer);
TCHAR* markedUpText=_formatter->highlightTerm(encoded, tokenGroup);
@@ -238,9 +240,7 @@
//store any whitespace etc from between this and last group
if (startOffset > lastEndOffset){
- int len = startOffset-lastEndOffset;
- if ( len > LUCENE_MAX_FIELD_LEN )
- len = LUCENE_MAX_FIELD_LEN;
+ len = cl_min(startOffset-lastEndOffset,LUCENE_MAX_FIELD_LEN);
_tcsncpy(buffer,text+lastEndOffset,len);
buffer[len]=_T('\0');
@@ -287,8 +287,9 @@
startOffset = tokenGroup->getStartOffset();
endOffset = tokenGroup->getEndOffset();
- _tcsncpy(substringBuffer,text+startOffset,endOffset-startOffset);
- substringBuffer[endOffset-startOffset]=_T('\0');
+ len = cl_min(endOffset-startOffset,LUCENE_MAX_WORD_LEN);
+ _tcsncpy(substringBuffer,text+startOffset,len);
+ substringBuffer[len]=_T('\0');
TCHAR* encoded = _encoder->encodeText(substringBuffer);
TCHAR* markedUpText=_formatter->highlightTerm(encoded, tokenGroup);
@@ -393,6 +394,7 @@
}
}
)
+ return NULL;
}