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:
Jeremy Lempereur 2018-03-20 20:04:13 +01:00
parent 22273d6ed4
commit bad7346661

View File

@ -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;
}