From 6e04e9db12d0696dcd3dcc40ec61615fa5762592 Mon Sep 17 00:00:00 2001 From: Anton Bannikov Date: Thu, 1 Sep 2022 16:48:07 +0300 Subject: [PATCH] [svace] fix errors found by svace static analyzer --- src/core/CLucene/debug/error.cpp | 12 ++++++++++ src/core/CLucene/debug/error.h | 1 + src/core/CLucene/index/TermInfosReader.cpp | 28 ++++++++++++---------- src/core/CLucene/search/MultiSearcher.cpp | 24 ++++++++++++------- src/core/CLucene/util/_MD5Digester.h | 1 - src/shared/CLucene/util/StringBuffer.cpp | 25 ++++++++++--------- 6 files changed, 57 insertions(+), 34 deletions(-) diff --git a/src/core/CLucene/debug/error.cpp b/src/core/CLucene/debug/error.cpp index 9b4fe3ee..e661cb86 100644 --- a/src/core/CLucene/debug/error.cpp +++ b/src/core/CLucene/debug/error.cpp @@ -46,6 +46,18 @@ CL_NS_USE(util) } #endif + CLuceneError& CLuceneError::operator=(const CLuceneError& other) + { + if (&other != this) + { + _awhat = STRDUP_AtoA(other._awhat); + _twhat = STRDUP_TtoT(other._twhat); + error_number = other.error_number; + } + + return *this; + } + CLuceneError::CLuceneError(const CLuceneError& clone) { this->error_number = clone.error_number; diff --git a/src/core/CLucene/debug/error.h b/src/core/CLucene/debug/error.h index 9fe980fa..62da1e62 100644 --- a/src/core/CLucene/debug/error.h +++ b/src/core/CLucene/debug/error.h @@ -70,6 +70,7 @@ class CLUCENE_EXPORT CLuceneError public: CLuceneError(); CLuceneError(const CLuceneError& clone); + CLuceneError& operator=(const CLuceneError&); #ifndef _ASCII CLuceneError(int num, const char* str, bool ownstr); #endif diff --git a/src/core/CLucene/index/TermInfosReader.cpp b/src/core/CLucene/index/TermInfosReader.cpp index 6ede797a..87e3bd83 100644 --- a/src/core/CLucene/index/TermInfosReader.cpp +++ b/src/core/CLucene/index/TermInfosReader.cpp @@ -26,7 +26,7 @@ CL_NS_DEF(index) TermInfosReader::TermInfosReader(Directory* dir, const char* seg, FieldInfos* fis, const int32_t readBufferSize): - directory (dir),fieldInfos (fis), indexTerms(NULL), indexInfos(NULL), indexPointers(NULL), indexDivisor(1) + directory (dir),fieldInfos (fis), indexTerms(NULL), indexInfos(NULL), indexPointers(NULL), indexDivisor(1), indexTermsLength(0) { //Func - Constructor. // Reads the TermInfos file (.tis) and eventually the Term Info Index file (.tii) @@ -172,18 +172,20 @@ CL_NS_DEF(index) SegmentTermEnum* enumerator = getEnum(); - if ( - enumerator != NULL //an enumeration exists - && enumerator->term(false) != NULL // term is at or past current - && position >= enumerator->position - && position < (enumerator->position + totalIndexInterval) - ) - { - return scanEnum(position); // can avoid seek - } - - //random-access: must seek - seekEnum(position / totalIndexInterval); + if (enumerator != NULL) //an enumeration exists + { + if ( + enumerator->term(false) != NULL // term is at or past current + && position >= enumerator->position + && position < (enumerator->position + totalIndexInterval) + ) + { + return scanEnum(position); // can avoid seek + } + + //random-access: must seek + seekEnum(position / totalIndexInterval); + } //Get the Term at position return scanEnum(position); diff --git a/src/core/CLucene/search/MultiSearcher.cpp b/src/core/CLucene/search/MultiSearcher.cpp index 0f2a6862..1f8e99c6 100644 --- a/src/core/CLucene/search/MultiSearcher.cpp +++ b/src/core/CLucene/search/MultiSearcher.cpp @@ -207,16 +207,22 @@ CL_NS_DEF(search) _CLDELETE(docs); } - int32_t hqlen = hq->size(); - fieldDocs = _CL_NEWARRAY(FieldDoc*,hqlen); - for (j = hqlen - 1; j >= 0; j--) // put docs in array - fieldDocs[j] = hq->pop(); - - SortField** hqFields = hq->getFields(); - hq->setFields(NULL); //move ownership of memory over to TopFieldDocs - _CLDELETE(hq); + TopFieldDocs* pResult = NULL; + if (hq) + { + int32_t hqlen = hq->size(); + fieldDocs = _CL_NEWARRAY(FieldDoc*,hqlen); + for (j = hqlen - 1; j >= 0; j--) // put docs in array + fieldDocs[j] = hq->pop(); + + SortField** hqFields = hq->getFields(); + hq->setFields(NULL); //move ownership of memory over to TopFieldDocs + _CLDELETE(hq); + + pResult = _CLNEW TopFieldDocs (totalHits, fieldDocs, hqlen, hqFields); + } - return _CLNEW TopFieldDocs (totalHits, fieldDocs, hqlen, hqFields); + return pResult; } Query* MultiSearcher::rewrite(Query* query) { diff --git a/src/core/CLucene/util/_MD5Digester.h b/src/core/CLucene/util/_MD5Digester.h index aff913ac..e7060a24 100644 --- a/src/core/CLucene/util/_MD5Digester.h +++ b/src/core/CLucene/util/_MD5Digester.h @@ -102,7 +102,6 @@ private: uint32_t m_Count[2]; uint8_t m_Buffer[64]; uint8_t m_Digest[16]; - uint8_t m_Finalized; }; diff --git a/src/shared/CLucene/util/StringBuffer.cpp b/src/shared/CLucene/util/StringBuffer.cpp index 63c78bb2..57ffcba5 100644 --- a/src/shared/CLucene/util/StringBuffer.cpp +++ b/src/shared/CLucene/util/StringBuffer.cpp @@ -292,14 +292,15 @@ CL_NS_DEF(util) //Allocate a new buffer of length bufferLength TCHAR* tmp = _CL_NEWARRAY(TCHAR,bufferLength); - _tcsncpy(tmp, buffer, len); - tmp[len] = '\0'; + if (buffer){ + _tcsncpy(tmp, buffer, len); + tmp[len] = '\0'; - //destroy the old buffer - if (buffer){ - _CLDELETE_CARRAY(buffer); - } - //Assign the new buffer tmp to buffer + //destroy the old buffer + _CLDELETE_CARRAY(buffer); + } + + //Assign the new buffer tmp to buffer buffer = tmp; } @@ -337,11 +338,13 @@ CL_NS_DEF(util) //The old buffer might not have been null-terminated, so we _tcsncpy //only len bytes, not len+1 bytes (the latter might read one char off the //end of the old buffer), then apply the terminator to the new buffer. - _tcsncpy(tmp + skippingNInitialChars, buffer, len); - tmp[skippingNInitialChars + len] = '\0'; + if (buffer) { + _tcsncpy(tmp + skippingNInitialChars, buffer, len); + tmp[skippingNInitialChars + len] = '\0'; - //destroy the old buffer - _CLDELETE_LCARRAY(buffer); + //destroy the old buffer + _CLDELETE_LCARRAY(buffer); + } //Assign the new buffer tmp to buffer buffer = tmp; -- 2.37.1 (Apple Git-137.1)