summaryrefslogtreecommitdiff
path: root/packet.c
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2011-06-20 10:18:39 -0400
committerEric S. Raymond <esr@thyrsus.com>2011-06-20 10:18:39 -0400
commitd537484d69c3116fd4493e8cfd663fdf80fff7ac (patch)
treef09e893638082a5217335e63fa6c03f3158b888b /packet.c
parent9f6ab53dffc25b8b958b071c7690e9edfe9a6c32 (diff)
downloadgpsd-d537484d69c3116fd4493e8cfd663fdf80fff7ac.tar.gz
Make JSON support a full driver to avoid a crash bug in gpsmon.
All regression tests pass.
Diffstat (limited to 'packet.c')
-rw-r--r--packet.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/packet.c b/packet.c
index 03b8f407..2b277f86 100644
--- a/packet.c
+++ b/packet.c
@@ -1908,7 +1908,12 @@ void packet_parse(struct gps_packet_t *lexer)
#endif
#ifdef PASSTHROUGH_ENABLE
else if (lexer->state == JSON_RECOGNIZED) {
- packet_accept(lexer, JSON_PACKET);
+ size_t packetlen = lexer->inbufptr - lexer->inbuffer;
+ if (packetlen >= 11)
+ /* {"class": } */
+ packet_accept(lexer, JSON_PACKET);
+ else
+ packet_accept(lexer, BAD_PACKET);
packet_discard(lexer);
lexer->state = GROUND_STATE;
break;