Fix bad logic parsing XID parameters

This commit is contained in:
XANTRONIX Development 2020-07-17 01:30:17 -04:00 committed by XANTRONIX Industrial
parent b34cffc0f3
commit 708d347e14

View file

@ -278,8 +278,8 @@ ssize_t patty_ax25_frame_decode_xid(patty_ax25_frame_xid_callback callback,
void *ctx) {
size_t start = offset;
patty_ax25_frame_xid_element *elem = ((patty_ax25_frame_xid_element *)
(uint8_t *)data + offset);
patty_ax25_frame_xid_element *elem = (patty_ax25_frame_xid_element *)
((uint8_t *)data + offset);
if (elem->format != 0x82 || elem->group != 0x80) {
errno = EIO;
@ -287,7 +287,7 @@ ssize_t patty_ax25_frame_decode_xid(patty_ax25_frame_xid_callback callback,
goto error;
}
if (be16toh(elem->len) != len - offset) {
if (be16toh(elem->len) != len - sizeof(*elem) - offset) {
errno = EIO;
goto error;
@ -295,7 +295,7 @@ ssize_t patty_ax25_frame_decode_xid(patty_ax25_frame_xid_callback callback,
offset += sizeof(*elem);
while (offset < start + len) {
while (offset < len) {
patty_ax25_frame_xid_param *param = (patty_ax25_frame_xid_param *)
((uint8_t *)data + offset);
@ -309,7 +309,7 @@ ssize_t patty_ax25_frame_decode_xid(patty_ax25_frame_xid_callback callback,
offset += sizeof(*param) + param->len;
}
if (offset != start + len) {
if (offset != len) {
errno = EIO;
goto error;