- fixing protection against writing outside of buffer
[u/mrichter/AliRoot.git] / HLT / CALO / AliHLTCaloClusterizer.cxx
index a2bc5b269b35952a6a579efe28d6a68fbec46245..17c2b3b99b47edc0e0a3b5cd0870b2e24139a59c 100644 (file)
@@ -94,7 +94,9 @@ AliHLTCaloClusterizer::ClusterizeEvent(Int_t nDigits, UInt_t availableSize, UInt
 {\r
   //see header file for documentation\r
   Int_t nRecPoints = 0;\r
-\r
+  \r
+  fAvailableSize = availableSize;\r
+  \r
   fNDigits = nDigits;\r
 \r
   UInt_t maxRecPointSize = sizeof(AliHLTCaloRecPointDataStruct) + (sizeof(AliHLTCaloDigitDataStruct) << 7); //Reasonable estimate... \r
@@ -108,10 +110,13 @@ AliHLTCaloClusterizer::ClusterizeEvent(Int_t nDigits, UInt_t availableSize, UInt
        {\r
          continue;\r
        }\r
-      if(availableSize < (totSize + maxRecPointSize)) \r
+       \r
+       if(fAvailableSize < (sizeof(AliHLTCaloRecPointDataStruct)))\r
        {\r
-         return -1; //Might get out of buffer, exiting\r
+         HLTError("Out of buffer, stopping clusterisation");\r
+         return -1; \r
        }\r
+       \r
       //            printf("cluster candidate!\n");\r
       // First digit is placed at the fDigits member variable in the recpoint\r
       fDigitIndexPtr = &(fRecPointDataPtr->fDigits);\r
@@ -131,7 +136,10 @@ AliHLTCaloClusterizer::ClusterizeEvent(Int_t nDigits, UInt_t availableSize, UInt
       nRecPoints++;\r
 \r
       // Scanning for the neighbours\r
-      ScanForNeighbourDigits(i, fRecPointDataPtr);\r
+      if(ScanForNeighbourDigits(i, fRecPointDataPtr) != 0)\r
+      {\r
+        return -1;\r
+      }\r
 \r
       totSize += sizeof(AliHLTCaloRecPointDataStruct) + (fDigitsInCluster-1)*sizeof(AliHLTCaloDigitDataStruct);   \r
       fRecPointDataPtr->fMultiplicity = fDigitsInCluster;     \r
@@ -143,7 +151,7 @@ AliHLTCaloClusterizer::ClusterizeEvent(Int_t nDigits, UInt_t availableSize, UInt
    return nRecPoints;\r
 }\r
 \r
-void\r
+Int_t\r
 AliHLTCaloClusterizer::ScanForNeighbourDigits(Int_t index, AliHLTCaloRecPointDataStruct* recPoint)\r
 {\r
   //see header file for documentation\r
@@ -161,7 +169,12 @@ AliHLTCaloClusterizer::ScanForNeighbourDigits(Int_t index, AliHLTCaloRecPointDat
              if(AreNeighbours(fDigitsPointerArray[index],\r
                               fDigitsPointerArray[j]))\r
                {\r
-                 // Assigning value to digit ptr\r
+                 if(fAvailableSize < (sizeof(Int_t)))\r
+                    {\r
+                       HLTError("Out of buffer, stopping clusterisation");\r
+                       return -1; \r
+                    }  \r
+                 // Assigning index to digit\r
                  *fDigitIndexPtr = j;\r
                  // Incrementing digit pointer to be ready for new entry\r
                  fDigitIndexPtr++;\r
@@ -174,7 +187,7 @@ AliHLTCaloClusterizer::ScanForNeighbourDigits(Int_t index, AliHLTCaloRecPointDat
            }\r
        }\r
     }\r
-  return;\r
+  return 0;\r
 }\r
 \r
 Int_t \r