summaryrefslogtreecommitdiff
path: root/driver_ais.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2014-08-23 15:22:49 -0400
committerEric S. Raymond <esr@thyrsus.com>2014-08-23 15:22:49 -0400
commit3f51a3473aeeecf668bff11739e2e2ea45544f6b (patch)
tree3501cfb7ec6aefd9a4e74b3cc3dfd4574e5ab1ec /driver_ais.c
parente7cc65587ab1adbd73f1d4d086914e1d7f39d4a3 (diff)
downloadgpsd-3f51a3473aeeecf668bff11739e2e2ea45544f6b.tar.gz
Full implementation of AIS 'structured' bit. All regression tests pass.
Diffstat (limited to 'driver_ais.c')
-rw-r--r--driver_ais.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/driver_ais.c b/driver_ais.c
index d47c380a..9b5065ab 100644
--- a/driver_ais.c
+++ b/driver_ais.c
@@ -666,7 +666,15 @@ bool ais_binary_decode(const int debug,
ais->type8.dac200fid10.course_q = (bool)UBITS(158, 1);
ais->type8.dac200fid10.heading_q = (bool)UBITS(159, 1);
/* skip 8 bits */
- ais->type8.structured = true;
+ /*
+ * Attempt to prevent false matches with this message type
+ * by range-checking certain fields.
+ */
+ if (ais->type8.dac200fid10.hazard > DAC200FID10_HAZARD_MAX
+ || !isascii((int)ais->type8.dac200fid10.vin[0]))
+ ais->type8.structured = false;
+ else
+ ais->type8.structured = true;
break;
case 23: /* EMMA warning */
if (bitlen != 256)