bug 1440673 - Fix off-by-one errors in keyed scalars r?Dexter draft
authorChris H-C <chutten@mozilla.com>
Tue, 27 Mar 2018 16:59:15 -0400
changeset 777933 54668f4982a9100a4108c5d6a20f56800ea593e2
parent 777823 1b258f938525fda65ef80ffa0408bc665d5d8948
child 777934 ff68bf2d34edbcdcdeb3e77b02bf0580017eb498
push id105342
push userbmo:chutten@mozilla.com
push dateThu, 05 Apr 2018 15:24:31 +0000
reviewersDexter
bugs1440673
milestone61.0a1
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
toolkit/components/telemetry/TelemetryScalar.cpp
--- 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;