diff options
author | Eric S. Raymond <esr@thyrsus.com> | 2014-08-23 15:22:49 -0400 |
---|---|---|
committer | Eric S. Raymond <esr@thyrsus.com> | 2014-08-23 15:22:49 -0400 |
commit | 3f51a3473aeeecf668bff11739e2e2ea45544f6b (patch) | |
tree | 3501cfb7ec6aefd9a4e74b3cc3dfd4574e5ab1ec /driver_ais.c | |
parent | e7cc65587ab1adbd73f1d4d086914e1d7f39d4a3 (diff) | |
download | gpsd-3f51a3473aeeecf668bff11739e2e2ea45544f6b.tar.gz |
Full implementation of AIS 'structured' bit. All regression tests pass.
Diffstat (limited to 'driver_ais.c')
-rw-r--r-- | driver_ais.c | 10 |
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) |