altoslib: Avoid crashing when computing stats for empty flight logs
authorKeith Packard <keithp@keithp.com>
Mon, 18 Sep 2017 16:57:41 +0000 (09:57 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 18 Sep 2017 16:59:24 +0000 (09:59 -0700)
Signed-off-by: Keith Packard <keithp@keithp.com>
altoslib/AltosFlightStats.java
altoslib/AltosTimeSeries.java

index c2e4e2a36bb8a72fc9b023bdebfffc7eb2c47b3a..ea1a9675aba8c818c814481bb45e6e545568cae0 100644 (file)
@@ -212,8 +212,11 @@ public class AltosFlightStats {
                                        add_times(series, (int) prev.value, prev.time, state.time);
                                prev = state;
                        }
-                       if (prev != null)
-                               add_times(series, (int) prev.value, prev.time, series.accel_series.last().time);
+                       if (prev != null) {
+                               AltosTimeValue last_accel = series.accel_series.last();
+                               if (last_accel != null)
+                                       add_times(series, (int) prev.value, prev.time, last_accel.time);
+                       }
                }
 
                for (int s = 0; s <= AltosLib.ao_flight_invalid; s++) {
@@ -245,14 +248,15 @@ public class AltosFlightStats {
                        has_gps = true;
                        lat = pad_lat = gps.lat;
                        lon = pad_lon = gps.lon;
-                       for (AltosGPSTimeValue gtv : series.gps_series) {
-                               gps = gtv.gps;
-                               if (gps.locked && gps.nsat >= 4) {
-                                       lat = gps.lat;
-                                       lon = gps.lon;
+                       if (series.gps_series != null) {
+                               for (AltosGPSTimeValue gtv : series.gps_series) {
+                                       gps = gtv.gps;
+                                       if (gps.locked && gps.nsat >= 4) {
+                                               lat = gps.lat;
+                                               lon = gps.lon;
+                                       }
                                }
                        }
-
                }
 
                max_height = AltosLib.MISSING;
index b3c432fcf565e1b481d63e0025024334a8d90061..9f3b4d807ef26bb36ae9a358515ac41c17f3bad5 100644 (file)
@@ -151,11 +151,15 @@ public class AltosTimeSeries implements Iterable<AltosTimeValue>, Comparable<Alt
        }
 
        public AltosTimeValue first() {
-               return values.get(0);
+               if (values.size() > 0)
+                       return values.get(0);
+               return null;
        }
 
        public AltosTimeValue last() {
-               return values.get(values.size() - 1);
+               if (values.size() > 0)
+                       return values.get(values.size() - 1);
+               return null;
        }
 
        public double average() {