From 48f13821db90a9b6afdcc5c97149d3fd83a51ba4 Mon Sep 17 00:00:00 2001 From: Felix Weiglhofer <weiglhofer@fias.uni-frankfurt.de> Date: Mon, 25 Oct 2021 08:03:01 +0000 Subject: [PATCH] StsDigi: Add more error handling against timestamp overflows. --- core/data/sts/CbmStsAddress.cxx | 4 ++++ core/data/sts/CbmStsDigi.cxx | 2 +- core/data/sts/CbmStsDigi.h | 3 ++- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/data/sts/CbmStsAddress.cxx b/core/data/sts/CbmStsAddress.cxx index d6d8331b8e..8670d4b82f 100644 --- a/core/data/sts/CbmStsAddress.cxx +++ b/core/data/sts/CbmStsAddress.cxx @@ -203,6 +203,10 @@ int32_t CbmStsAddress::PackDigiAddress(int32_t address) | kMask[1][kStsModule] << kShift[1][kStsModule]; int32_t ret = (address & kDMask) >> kShift[1][kStsUnit]; + + // Check that no bits were set, that are stripped by this function. + assert(address == UnpackDigiAddress(ret)); + return ret; } // ------------------------------------------------------------------------- diff --git a/core/data/sts/CbmStsDigi.cxx b/core/data/sts/CbmStsDigi.cxx index 733544a0e8..15618dc4c0 100644 --- a/core/data/sts/CbmStsDigi.cxx +++ b/core/data/sts/CbmStsDigi.cxx @@ -37,7 +37,7 @@ void CbmStsDigi::PackAddressAndTime(int32_t newAddress, uint32_t newTime) uint32_t lowerAddr = packedAddr & ((1 << kNumLowerAddrBits) - 1); fAddress = lowerAddr; - fTime = (highestBitAddr << kNumTimestampBits) | newTime; + fTime = (highestBitAddr << kNumTimestampBits) | (kTimestampMask & newTime); } int32_t CbmStsDigi::UnpackAddress() const diff --git a/core/data/sts/CbmStsDigi.h b/core/data/sts/CbmStsDigi.h index 94594b483e..7867329e5a 100644 --- a/core/data/sts/CbmStsDigi.h +++ b/core/data/sts/CbmStsDigi.h @@ -47,8 +47,9 @@ public: ** @param time Measurement time [ns] ** @param charge Charge [ADC units] **/ - CbmStsDigi(int32_t address, int32_t channel, uint32_t time, uint16_t charge) + CbmStsDigi(int32_t address, int32_t channel, double time, uint16_t charge) { + assert(time >= 0 && time <= kMaxTimestamp); PackAddressAndTime(address, time); PackChannelAndCharge(channel, charge); } -- GitLab