Browse Source

fix: throw error when inserting menu items out-of-range (backport: 4-0-x) (#17434)

* fix: throw error when inserting menu items out-of-range

* also check pos < 0
trop[bot] 6 years ago
parent
commit
61fddb6606
2 changed files with 24 additions and 0 deletions
  1. 6 0
      lib/browser/api/menu.js
  2. 18 0
      spec/api-menu-spec.js

+ 6 - 0
lib/browser/api/menu.js

@@ -109,6 +109,12 @@ Menu.prototype.insert = function (pos, item) {
     throw new TypeError('Invalid item')
   }
 
+  if (pos < 0) {
+    throw new RangeError(`Position ${pos} cannot be less than 0`)
+  } else if (pos > this.getItemCount()) {
+    throw new RangeError(`Position ${pos} cannot be greater than the total MenuItem count`)
+  }
+
   // insert item depending on its type
   insertItemByType.call(this, item, pos)
 

+ 18 - 0
spec/api-menu-spec.js

@@ -614,6 +614,24 @@ describe('Menu module', () => {
   })
 
   describe('Menu.insert', () => {
+    it('should throw when attempting to insert at out-of-range indices', () => {
+      const menu = Menu.buildFromTemplate([
+        { label: '1' },
+        { label: '2' },
+        { label: '3' }
+      ])
+
+      const item = new MenuItem({ label: 'badInsert' })
+
+      expect(() => {
+        menu.insert(9999, item)
+      }).to.throw(/Position 9999 cannot be greater than the total MenuItem count/)
+
+      expect(() => {
+        menu.insert(-9999, item)
+      }).to.throw(/Position -9999 cannot be less than 0/)
+    })
+
     it('should store item in @items by its index', () => {
       const menu = Menu.buildFromTemplate([
         { label: '1' },