- fixing protection against writing outside of buffer
authorodjuvsla <odjuvsla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 12 Feb 2010 01:13:19 +0000 (01:13 +0000)
committerodjuvsla <odjuvsla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Fri, 12 Feb 2010 01:13:19 +0000 (01:13 +0000)
HLT/CALO/AliHLTCaloClusterizer.cxx
HLT/CALO/AliHLTCaloClusterizer.h

index a2bc5b2..17c2b3b 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
index 5c7587a..d71996d 100644 (file)
@@ -46,6 +46,7 @@
 #include "AliHLTCaloConstantsHandler.h"\r
 \r
 //#include "AliPHOSGeometry.h"\r
+#include "AliHLTLogging.h"\r
 \r
 class TClonesArray;\r
 class TString;\r
@@ -63,7 +64,7 @@ class TString;
  */\r
 \r
 \r
-class AliHLTCaloClusterizer : public AliHLTCaloConstantsHandler\r
+class AliHLTCaloClusterizer : public AliHLTCaloConstantsHandler, public AliHLTLogging\r
 {\r
   \r
 public:\r
@@ -73,30 +74,7 @@ public:
 \r
   /** Destructor */\r
   virtual ~AliHLTCaloClusterizer();\r
-\r
-//   /** Copy constructor */  \r
-//   AliHLTCaloClusterizer(const AliHLTCaloClusterizer &) : \r
-//     //    AliHLTCaloBase(),\r
-//     AliHLTCaloConstants(NULL),\r
-//     fRecPointDataPtr(0),\r
-//     fDigitDataPtr(0),\r
-//     fEmcClusteringThreshold(0),\r
-//     fEmcMinEnergyThreshold(0),\r
-//     fEmcTimeGate(0),\r
-//     fDigitsInCluster(0),\r
-//     fDigitContainerPtr(0),\r
-//     fMaxDigitIndexDiff(2*NZROWSMOD)\r
-//   {\r
-//     //Copy constructor not implemented\r
-//   }\r
   \r
-  /** Assignment */\r
-  AliHLTCaloClusterizer & operator = (const AliHLTCaloClusterizer)\r
-  {\r
-    //Assignment\r
-    return *this; \r
-  }\r
-\r
   /** Set digit container */\r
   void SetDigitContainer(AliHLTCaloDigitContainerDataStruct* digitContainerPtr)\r
   { fDigitContainerPtr = digitContainerPtr; }\r
@@ -130,7 +108,7 @@ public:
    * @param digIndex index of the digit in the digit container\r
    * @param recPoint pointer to the current rec point\r
    */\r
-  virtual void ScanForNeighbourDigits(Int_t digIndex, AliHLTCaloRecPointDataStruct* recPoint);\r
+  virtual Int_t ScanForNeighbourDigits(Int_t digIndex, AliHLTCaloRecPointDataStruct* recPoint);\r
 \r
   /**\r
    * Checks if two digits are neighbours\r
@@ -173,18 +151,21 @@ protected:
   Int_t fNDigits;                                              //COMMENT\r
 \r
 private:\r
+   \r
+   /** Size of the available write buffer */\r
+  UInt_t fAvailableSize;                                 //COMMENT\r
 \r
-  AliHLTCaloClusterizer();\r
-\r
-  AliHLTCaloClusterizer (const AliHLTCaloClusterizer &);\r
-//   AliHLTCaloClusterizer & operator = (const AliHLTCaloClusterizer &)\r
-//   {\r
-//     return *this;\r
-//   }\r
+  /** Default constructor, prohibited */\r
+  AliHLTCaloClusterizer();                          // COMMENT\r
+  \r
+  /** Copy constructor, prohibited */\r
+  AliHLTCaloClusterizer (const AliHLTCaloClusterizer &); //COMMENT\r
+  \r
+  /** Assignment operator, prohibited */\r
+  AliHLTCaloClusterizer & operator = (const AliHLTCaloClusterizer &); //COMMENT\r
 \r
   ClassDef(AliHLTCaloClusterizer, 0);\r
 \r
-\r
 };\r
 \r
 #endif\r