So basically, here are 2 AIS sentences which contain an array of 1 struct:
!AIVDM,1,1,,A,address@hidden,0*02
!AIVDM,1,1,,A,6h2E3N0rThqP0600J00000000000,0*51
The dumping doesn't seems to cause any trouble, but reading back the
JSON crashes gpsdecode:
echo '!AIVDM,1,1,,A,address@hidden,0*02' | gpsdecode -ju
{"class":"AIS","device":"stdin","type":6,"repeat":3,"mmsi":2442101,"scaled":false,"seqno":2,"dest_mmsi":246351000,"retransmit":false,"dac":1,"fid":32,"month":0,"day":0,"tidals":[{"lon":-16777216,"lat":0,"from_hour":0,"from_min":0,"to_hour":0,"to_min":0,"cdir":0,"cspeed":0}]}
echo '!AIVDM,1,1,,A,address@hidden,0*02' | gpsdecode -ju |
gpsdecode -jeu
Segmentation fault
I saw some other messages with arrays of 0 structures, they don't crash
the json parser.
I have activated the debug messages in json.c, but it didn't help me
that much (it seems that the parser doesn't "see" the end of struct or
end of array).
Maybe someone familiar with the json parser code could help me to fix
this nasty bug.
Chris
PS: I'm running an AIS test campaign on live data from aishub.net.
Input data is ca. 25 millions sentences (1.2GB of logs), and goes
through these steps:
- AIVDM decoding
- JSON scaled dump
- JSON validity check
- JSON unscaled dump
- JSON validity check
- JSON idempotency check
I fixed a dozen of bugs so far, this one seems to be the last one!