Prechádzať zdrojové kódy

Added an assert to detect too large variants (issue #1414)

Benoit Blanchon 5 rokov pred
rodič
commit
9d5c1b3742
1 zmenil súbory, kde vykonal 9 pridanie a 0 odobranie
  1. 9 0
      src/ArduinoJson/Variant/VariantSlot.hpp

+ 9 - 0
src/ArduinoJson/Variant/VariantSlot.hpp

@@ -6,6 +6,7 @@
 
 #include <stdint.h>  // int8_t, int16_t
 
+#include <ArduinoJson/Polyfills/limits.hpp>
 #include <ArduinoJson/Polyfills/type_traits.hpp>
 #include <ArduinoJson/Strings/StoragePolicy.hpp>
 #include <ArduinoJson/Variant/VariantContent.hpp>
@@ -61,11 +62,19 @@ class VariantSlot {
   }
 
   void setNext(VariantSlot* slot) {
+    ARDUINOJSON_ASSERT(!slot || slot - this >=
+                       numeric_limits<VariantSlotDiff>::lowest());
+    ARDUINOJSON_ASSERT(!slot || slot - this <=
+                       numeric_limits<VariantSlotDiff>::highest());
     _next = VariantSlotDiff(slot ? slot - this : 0);
   }
 
   void setNextNotNull(VariantSlot* slot) {
     ARDUINOJSON_ASSERT(slot != 0);
+    ARDUINOJSON_ASSERT(slot - this >=
+                       numeric_limits<VariantSlotDiff>::lowest());
+    ARDUINOJSON_ASSERT(slot - this <=
+                       numeric_limits<VariantSlotDiff>::highest());
     _next = VariantSlotDiff(slot - this);
   }