mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-14 13:55:43 +00:00
Bug 1444735 - Guard AutoCounter and RuntimeAutoCounter against over/under flows. r=chutten
Made sure the telemetry AutoCounter and RuntimeAutoCounter increments are guarded against over/under flows. MozReview-Commit-ID: 8CZhpKkthoB --HG-- extra : rebase_source : 4eafb249555128f9bc9fc3ecea13983bfa402aab
This commit is contained in:
parent
22273d6ed4
commit
bad7346661
@ -325,12 +325,26 @@ public:
|
||||
// Prefix increment only, to encourage good habits.
|
||||
void operator++()
|
||||
{
|
||||
if (NS_WARN_IF(counter == std::numeric_limits<uint32_t>::max())) {
|
||||
return;
|
||||
}
|
||||
++counter;
|
||||
}
|
||||
|
||||
// Chaining doesn't make any sense, don't return anything.
|
||||
void operator+=(int increment)
|
||||
{
|
||||
if (NS_WARN_IF(increment > 0 &&
|
||||
static_cast<uint32_t>(increment) >
|
||||
(std::numeric_limits<uint32_t>::max() - counter))) {
|
||||
counter = std::numeric_limits<uint32_t>::max();
|
||||
return;
|
||||
}
|
||||
if (NS_WARN_IF(increment < 0 &&
|
||||
static_cast<uint32_t>(-increment) > counter)) {
|
||||
counter = std::numeric_limits<uint32_t>::min();
|
||||
return;
|
||||
}
|
||||
counter += increment;
|
||||
}
|
||||
|
||||
@ -354,12 +368,28 @@ public:
|
||||
}
|
||||
|
||||
// Prefix increment only, to encourage good habits.
|
||||
void operator++() {
|
||||
void operator++()
|
||||
{
|
||||
if (NS_WARN_IF(counter == std::numeric_limits<uint32_t>::max())) {
|
||||
return;
|
||||
}
|
||||
++counter;
|
||||
}
|
||||
|
||||
// Chaining doesn't make any sense, don't return anything.
|
||||
void operator+=(int increment) {
|
||||
void operator+=(int increment)
|
||||
{
|
||||
if (NS_WARN_IF(increment > 0 &&
|
||||
static_cast<uint32_t>(increment) >
|
||||
(std::numeric_limits<uint32_t>::max() - counter))) {
|
||||
counter = std::numeric_limits<uint32_t>::max();
|
||||
return;
|
||||
}
|
||||
if (NS_WARN_IF(increment < 0 &&
|
||||
static_cast<uint32_t>(-increment) > counter)) {
|
||||
counter = std::numeric_limits<uint32_t>::min();
|
||||
return;
|
||||
}
|
||||
counter += increment;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user