Skip to content

Commit 176c154

Browse files
authored
Merge pull request #3865 from nxdefiant/master
gipy: Avoid crash on negative array access
2 parents e05b80d + 59c6a0e commit 176c154

File tree

4 files changed

+24
-12
lines changed

4 files changed

+24
-12
lines changed

apps/gipy/ChangeLog

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,5 @@
141141
0.26: Add option to plot openstmap if installed
142142

143143
0.27: Support for large paths (grid sizes > 65k)
144+
145+
0.28: Avoid crash on negative array access

apps/gipy/app.js

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ var settings = Object.assign(
3434
power_lcd_off: false,
3535
powersave_by_default: false,
3636
sleep_between_waypoints: false,
37+
keep_gps_alive: true
3738
},
3839
s.readJSON("gipy.json", true) || {}
3940
);
@@ -255,6 +256,7 @@ class Map {
255256
add_to_tile_image(img, absolute_tile_x, absolute_tile_y) {
256257
let tile_x = absolute_tile_x - this.first_tile[0];
257258
let tile_y = absolute_tile_y - this.first_tile[1];
259+
if (tile_x < 0 || tile_y < 0) return; // FIXME: Negative Array index
258260
let side = img.getWidth() - 6;
259261

260262
let thick = this.color[0] == 1;
@@ -609,16 +611,16 @@ class Status {
609611
);
610612

611613
// disable gps when far from next point and locked
612-
// if (Bangle.isLocked() && !settings.keep_gps_alive) {
613-
// let time_to_next_point =
614-
// (this.distance_to_next_point * 3.6) / settings.max_speed;
615-
// if (time_to_next_point > 60) {
616-
// Bangle.setGPSPower(false, "gipy");
617-
// setTimeout(function () {
618-
// Bangle.setGPSPower(true, "gipy");
619-
// }, time_to_next_point);
620-
// }
621-
// }
614+
if (Bangle.isLocked() && !settings.keep_gps_alive) {
615+
let time_to_next_point =
616+
(this.distance_to_next_point * 3.6) / settings.max_speed;
617+
if (time_to_next_point > 60) {
618+
Bangle.setGPSPower(false, "gipy");
619+
setTimeout(function () {
620+
Bangle.setGPSPower(true, "gipy");
621+
}, time_to_next_point);
622+
}
623+
}
622624
let reaching_waypoint = this.path.is_waypoint(next_point);
623625
if (this.distance_to_next_point <= 100) {
624626
if (reaching_waypoint || !settings.sleep_between_waypoints) {

apps/gipy/metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"id": "gipy",
33
"name": "Gipy",
44
"shortName": "Gipy",
5-
"version": "0.27",
5+
"version": "0.28",
66
"description": "Follow gpx files using the gps. Don't get lost in your bike trips and hikes.",
77
"allow_emulator":false,
88
"icon": "gipy.png",

apps/gipy/settings.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
power_lcd_off: false,
1212
powersave_by_default: false,
1313
sleep_between_waypoints: false,
14+
keep_gps_alive: true
1415
},
1516
require("Storage").readJSON(FILE, true) || {}
1617
);
@@ -97,6 +98,13 @@
9798
settings.sleep_between_waypoints = v;
9899
writeSettings();
99100
}
100-
}
101+
},
102+
"keep gps alive": {
103+
value: !!settings.keep_gps_alive, // !! converts undefined to false
104+
onchange: (v) => {
105+
settings.keep_gps_alive = v;
106+
writeSettings();
107+
},
108+
},
101109
});
102110
})

0 commit comments

Comments
 (0)