Procházet zdrojové kódy

add protection for index out of bounds

marionbarker před 2 roky
rodič
revize
fd285829be

+ 5 - 5
LoopFollow/Controllers/Alarms.swift

@@ -27,7 +27,7 @@ extension MainViewController {
         let date = Date()
         let now = date.timeIntervalSince1970
         let currentBG = bgs[bgs.count - 1].sgv
-        let lastBG = bgs[bgs.count - 2].sgv
+        //let lastBG = bgs[bgs.count - 2].sgv // not used, protect index out of bounds
         
         var skipZero = false
         if UserDefaultsRepository.alertIgnoreZero.value && currentBG == 0 {
@@ -185,8 +185,8 @@ extension MainViewController {
                 }
             }
             
-            // Check Low
-            let persistentLowReadings = Int(UserDefaultsRepository.alertLowPersistent.value / 5)
+            // Check Low, protect index out of bounds
+            let persistentLowReadings = min(Int(UserDefaultsRepository.alertLowPersistent.value / 5), bgData.count - 1)
             let persistentLowBG = bgData[bgData.count - 1 - persistentLowReadings].sgv
             let persistentLowTriggerImmediatelyBG = UserDefaultsRepository.alertLowBG.value - UserDefaultsRepository.alertLowPersistenceMax.value
             
@@ -241,8 +241,8 @@ extension MainViewController {
                 
             }
             
-            // Check High
-            let persistentHighReadings = Int(UserDefaultsRepository.alertHighPersistent.value / 5)
+            // Check High, protect index out of bounds
+            let persistentHighReadings = min(Int(UserDefaultsRepository.alertHighPersistent.value / 5), bgData.count-1)
             let persistentHighBG = bgData[bgData.count - 1 - persistentHighReadings].sgv
             if UserDefaultsRepository.alertHighActive.value &&
                 !UserDefaultsRepository.alertHighIsSnoozed.value &&

+ 1 - 1
LoopFollow/Controllers/Nightscout/BGData.swift

@@ -220,7 +220,7 @@ extension MainViewController {
                 self.writeDebugLog(value: "Num BG: " + self.bgData.count.description)
             }
             let entries = self.bgData
-            if entries.count < 1 { return }
+            if entries.count < 2 { return } // protect index out of bounds
             
             self.updateBGGraph()
             self.updateStats()

+ 4 - 1
LoopFollow/ViewControllers/MainViewController.swift

@@ -688,7 +688,10 @@ class MainViewController: UIViewController, UITableViewDataSource, ChartViewDele
         }
 
             // Create Event info
-            let deltaBG = self.bgData[self.bgData.count - 1].sgv -  self.bgData[self.bgData.count - 2].sgv as Int
+        var deltaBG = 0 // protect index out of bounds
+        if self.bgData.count > 1 {
+            deltaBG = self.bgData[self.bgData.count - 1].sgv -  self.bgData[self.bgData.count - 2].sgv as Int
+        }
             let deltaTime = (TimeInterval(Date().timeIntervalSince1970) - self.bgData[self.bgData.count - 1].date) / 60
             var deltaString = ""
             if deltaBG < 0 {