diff --git a/HISTORY.md b/HISTORY.md
index 1734efad..eacf1e04 100755
--- a/HISTORY.md
+++ b/HISTORY.md
@@ -5,11 +5,13 @@
* **Notable Fixes:**
* fixed recursive calls in PIPE
* the "length of list" block no longer appears twice in search results
+ * prevent inserting items at non-integer / out-of-bounds indices
### 2021-03-09
* new dev version
* objects: fixed #2797
-* fixed recursive calls in PIPE
+* fixed recursive calls in PIPE
+* lists: prevent usage of lists as dictionaries
## 6.7.0
* **New Features:**
diff --git a/snap.html b/snap.html
index 0c0f97d9..348f6f1c 100755
--- a/snap.html
+++ b/snap.html
@@ -13,7 +13,7 @@
-
+
diff --git a/src/lists.js b/src/lists.js
index d7c307ce..b541efc8 100644
--- a/src/lists.js
+++ b/src/lists.js
@@ -63,7 +63,7 @@ MorphicPreferences, TableDialogMorph, SpriteBubbleMorph, SpeechBubbleMorph,
TableFrameMorph, TableMorph, Variable, isSnapObject, Costume, contains, detect,
ZERO, WHITE*/
-modules.lists = '2021-February-20';
+modules.lists = '2021-March-09';
var List;
var ListWatcherMorph;
@@ -192,7 +192,7 @@ List.prototype.add = function (element, index) {
insert the element before the given slot index,
if no index is specifed, append the element
*/
- var idx = index || this.length() + 1,
+ var idx = Math.round(+index) || this.length() + 1,
obj = isNil(element) ? null : element;
this.becomeArray();
@@ -202,19 +202,23 @@ List.prototype.add = function (element, index) {
List.prototype.put = function (element, index) {
// exchange the element at the given slot for another
- var data = element === 0 ? 0
+ var idx = Math.round(+index) || 0,
+ data = element === 0 ? 0
: element === false ? false
: element || null;
this.becomeArray();
- this.contents[index - 1] = data;
+ if (idx < 1 || idx > this.contents.length) {
+ return;
+ }
+ this.contents[idx - 1] = data;
this.changed();
};
List.prototype.remove = function (index) {
// remove the given slot, shortening the list
this.becomeArray();
- this.contents.splice(index - 1, 1);
+ this.contents.splice(Math.round(+index || 0) - 1, 1);
this.changed();
};
@@ -256,7 +260,9 @@ List.prototype.length = function () {
};
List.prototype.at = function (index) {
- var value, idx = +index, pair = this;
+ var value,
+ idx = Math.round(+index || 0),
+ pair = this;
while (pair.isLinked) {
if (idx > 1) {
pair = pair.rest;