bug 1218576 - Ensure Telemetry IDs coming from IPC are valid r=gfritzsche
I saw a one-off crash on try in internal_GetHistogramByEnumId. Not reproducible
but maybe possible if we're trying to accumulate using an invalid ID. So let's
guard against that.
MozReview-Commit-ID: Ei6eTlV91mJ
--- a/toolkit/components/telemetry/TelemetryHistogram.cpp
+++ b/toolkit/components/telemetry/TelemetryHistogram.cpp
@@ -2160,29 +2160,39 @@ void
TelemetryHistogram::AccumulateChild(const nsTArray<Accumulation>& aAccumulations)
{
MOZ_ASSERT(XRE_IsParentProcess());
StaticMutexAutoLock locker(gTelemetryHistogramMutex);
if (!internal_CanRecordBase()) {
return;
}
for (uint32_t i = 0; i < aAccumulations.Length(); ++i) {
+ bool isValid = internal_IsHistogramEnumId(aAccumulations[i].mId);
+ MOZ_ASSERT(isValid);
+ if (!isValid) {
+ continue;
+ }
internal_AccumulateChild(aAccumulations[i].mId, aAccumulations[i].mSample);
}
}
void
TelemetryHistogram::AccumulateChildKeyed(const nsTArray<KeyedAccumulation>& aAccumulations)
{
MOZ_ASSERT(XRE_IsParentProcess());
StaticMutexAutoLock locker(gTelemetryHistogramMutex);
if (!internal_CanRecordBase()) {
return;
}
for (uint32_t i = 0; i < aAccumulations.Length(); ++i) {
+ bool isValid = internal_IsHistogramEnumId(aAccumulations[i].mId);
+ MOZ_ASSERT(isValid);
+ if (!isValid) {
+ continue;
+ }
internal_AccumulateChildKeyed(aAccumulations[i].mId,
aAccumulations[i].mKey,
aAccumulations[i].mSample);
}
}
void
TelemetryHistogram::ClearHistogram(mozilla::Telemetry::ID aId)