From e80005ea63bb9b1eee33a8876ad74ed5d50478ed Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 11 Nov 2017 20:44:27 -0800 Subject: [PATCH] altoslib: Don't write KML record when height data is missing This avoids a crash dealing with corrupted flight data Signed-off-by: Keith Packard --- altoslib/AltosKML.java | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/altoslib/AltosKML.java b/altoslib/AltosKML.java index aa98f0e6..d5248a17 100644 --- a/altoslib/AltosKML.java +++ b/altoslib/AltosKML.java @@ -308,19 +308,23 @@ public class AltosKML implements AltosWriter { stats = new AltosFlightStats(series); cal_data = series.cal_data(); start(); - folder_start("Barometric Altitude"); - path_style_start("baro", style_color(0)); - out.printf("Barometric Altitude\n"); - out.printf("Max height: %s\n", AltosConvert.height.show(6, stats.max_height)); - path_style_end(); - path_start("Barometric Altitude", "baro"); - for (AltosGPSTimeValue gtv : series.gps_series) - write(gtv.gps, baro_altitude(series, gtv.time)); - path_end(); - for (AltosTimeValue tv : series.state_series) { - write_point(tv, false); + if (series.height_series != null) { + folder_start("Barometric Altitude"); + path_style_start("baro", style_color(0)); + out.printf("Barometric Altitude\n"); + out.printf("Max height: %s\n", AltosConvert.height.show(6, stats.max_height)); + path_style_end(); + path_start("Barometric Altitude", "baro"); + for (AltosGPSTimeValue gtv : series.gps_series) + write(gtv.gps, baro_altitude(series, gtv.time)); + path_end(); + if (series.state_series != null) { + for (AltosTimeValue tv : series.state_series) { + write_point(tv, false); + } + } + folder_end(); } - folder_end(); folder_start("GPS Altitude"); path_style_start("gps", style_color(1)); out.printf("GPS Altitude"); @@ -330,8 +334,10 @@ public class AltosKML implements AltosWriter { for (AltosGPSTimeValue gtv : series.gps_series) write(gtv.gps, gtv.gps.alt); path_end(); - for (AltosTimeValue tv : series.state_series) { - write_point(tv, true); + if (series.state_series != null) { + for (AltosTimeValue tv : series.state_series) { + write_point(tv, true); + } } folder_end(); end(); -- 2.30.2