From: tsteven4 <13596209+tsteven4@users.noreply.github.com>
Date: Fri, 6 Jan 2023 17:05:50 +0000 (-0700)
Subject: another use of potentially invalid waypt field. (#974)
X-Git-Tag: archive/raspbian/1.10.0+ds-2+rpi1~1^2~12^2~1^2~137
X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=9568674036933068b65d976f1a7200405c5104a8;p=gpsbabel.git
another use of potentially invalid waypt field. (#974)
* another use of potentially invalid waypt field.
* fix erroneous comparison of optional waypt values.
---
diff --git a/defs.h b/defs.h
index 0b50d1f95..e159b4319 100644
--- a/defs.h
+++ b/defs.h
@@ -323,6 +323,9 @@ struct bounds {
#define WAYPT_GET(wpt,member,def) (((wpt)->wpt_flags.member) ? ((wpt)->member) : (def))
#define WAYPT_UNSET(wpt,member) wpt->wpt_flags.member = 0
#define WAYPT_HAS(wpt,member) ((wpt)->wpt_flags.member)
+#define WAYPT_EQUAL(wpta,wptb,member) (((wpta)->wpt_flags.member && (wptb)->wpt_flags.member && \
+ ((wpta)->member == (wptb)->member)) || \
+ (!(wpta)->wpt_flags.member && !(wptb)->wpt_flags.member))
/*
* This is a waypoint, as stored in the GPSR. It tries to not
diff --git a/gtrnctr.cc b/gtrnctr.cc
index 81f1dcee6..b9ff1b816 100644
--- a/gtrnctr.cc
+++ b/gtrnctr.cc
@@ -192,11 +192,11 @@ GtrnctrFormat::gtc_waypt_pr(const Waypoint* wpt)
if (wpt->cadence) {
gtc_write_xml(0, "%d\n", wpt->cadence);
}
- if (wpt->speed || wpt->power) {
+ if (WAYPT_HAS(wpt, speed) || wpt->power) {
gtc_write_xml(1, "\n");
gtc_write_xml(1, "\n");
/* see http://www8.garmin.com/xmlschemas/ActivityExtensionv2.xsd */
- if (wpt->speed) {
+ if (WAYPT_HAS(wpt, speed)) {
gtc_write_xml(0, "%.3f\n", wpt->speed);
}
if (wpt->power) {
diff --git a/trackfilter.cc b/trackfilter.cc
index f60371f26..4482afe35 100644
--- a/trackfilter.cc
+++ b/trackfilter.cc
@@ -903,12 +903,11 @@ bool TrackFilter::trackfilter_points_are_same(const Waypoint* wpta, const Waypoi
std::abs(wpta->latitude - wptb->latitude) < .00001 &&
std::abs(wpta->longitude - wptb->longitude) < .00001 &&
std::abs(wpta->altitude - wptb->altitude) < 20 &&
- (WAYPT_HAS(wpta,course) == WAYPT_HAS(wptb,course)) &&
- (wpta->course == wptb->course) &&
- (wpta->speed == wptb->speed) &&
+ WAYPT_EQUAL(wpta, wptb, course) &&
+ WAYPT_EQUAL(wpta, wptb, speed) &&
(wpta->heartrate == wptb->heartrate) &&
(wpta->cadence == wptb->cadence) &&
- (wpta->temperature == wptb->temperature);
+ WAYPT_EQUAL(wpta, wptb, temperature);
}
void TrackFilter::trackfilter_segment_head(const route_head* rte)