summaryrefslogblamecommitdiff
path: root/legacy/clucene/static-fixes.patch
blob: 8e80e81af9bb3d600029742d82620ca2726acf44 (plain) (tree)






























































































































































































                                                                                                                                      
From 6e04e9db12d0696dcd3dcc40ec61615fa5762592 Mon Sep 17 00:00:00 2001
From: Anton Bannikov <Anton.Bannikov@Kaspersky.com>
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)