bug 1440673 - Fix off-by-one errors in keyed scalars r?Dexter
The maximum key length constraint should be strict greater-than, and the
maximum number of keys constraint should only be checked if we are creating a
new key.
MozReview-Commit-ID: 5fhfV8BbmRH
--- a/toolkit/components/telemetry/TelemetryScalar.cpp
+++ b/toolkit/components/telemetry/TelemetryScalar.cpp
@@ -781,32 +781,32 @@ KeyedScalar::GetValue(nsTArray<KeyValueP
*/
ScalarResult
KeyedScalar::GetScalarForKey(const nsAString& aKey, ScalarBase** aRet)
{
if (aKey.IsEmpty()) {
return ScalarResult::KeyIsEmpty;
}
- if (aKey.Length() >= kMaximumKeyStringLength) {
+ if (aKey.Length() > kMaximumKeyStringLength) {
return ScalarResult::KeyTooLong;
}
- if (mScalarKeys.Count() >= kMaximumNumberOfKeys) {
- return ScalarResult::TooManyKeys;
- }
-
NS_ConvertUTF16toUTF8 utf8Key(aKey);
ScalarBase* scalar = nullptr;
if (mScalarKeys.Get(utf8Key, &scalar)) {
*aRet = scalar;
return ScalarResult::Ok;
}
+ if (mScalarKeys.Count() >= kMaximumNumberOfKeys) {
+ return ScalarResult::TooManyKeys;
+ }
+
scalar = internal_ScalarAllocate(mScalarKind);
if (!scalar) {
return ScalarResult::InvalidType;
}
mScalarKeys.Put(utf8Key, scalar);
*aRet = scalar;