ubx.c: Add some more error checking code
This commit is contained in:
parent
fa32567711
commit
4db6eb8841
15
ubx.c
15
ubx.c
|
@ -60,11 +60,26 @@ ubx_msg_dispatch(struct ubx_dispatch_entry *dt,
|
||||||
uint8_t cksum[2], *cksum_ptr;
|
uint8_t cksum[2], *cksum_ptr;
|
||||||
ubx_msg_handler_t h;
|
ubx_msg_handler_t h;
|
||||||
|
|
||||||
|
if (len < 2) {
|
||||||
|
fprintf(stderr, "[!] Length too small (%d)\n", len);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
if ((hdr->sync[0] != UBX_SYNC0) || (hdr->sync[1] != UBX_SYNC1)) {
|
if ((hdr->sync[0] != UBX_SYNC0) || (hdr->sync[1] != UBX_SYNC1)) {
|
||||||
fprintf(stderr, "[!] Invalid sync bytes\n");
|
fprintf(stderr, "[!] Invalid sync bytes\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (len < sizeof(struct ubx_hdr)) {
|
||||||
|
fprintf(stderr, "[!] Length too small for UBX header (%d)\n", len);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len < sizeof(struct ubx_hdr) + hdr->payload_len - 2) {
|
||||||
|
fprintf(stderr, "[!] Length too small for UBX header and payload (%d)\n", len);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
ubx_checksum(msg + 2, sizeof(struct ubx_hdr) + hdr->payload_len - 2, cksum);
|
ubx_checksum(msg + 2, sizeof(struct ubx_hdr) + hdr->payload_len - 2, cksum);
|
||||||
cksum_ptr = msg + (sizeof(struct ubx_hdr) + hdr->payload_len);
|
cksum_ptr = msg + (sizeof(struct ubx_hdr) + hdr->payload_len);
|
||||||
if ((cksum_ptr[0] != cksum[0]) || (cksum_ptr[1] != cksum[1])) {
|
if ((cksum_ptr[0] != cksum[0]) || (cksum_ptr[1] != cksum[1])) {
|
||||||
|
|
Loading…
Reference in New Issue