From acce657f637419192212830dba8c4ce3fce2503b Mon Sep 17 00:00:00 2001 From: XANTRONIX Development Date: Sun, 19 Jul 2020 22:51:17 -0400 Subject: [PATCH] Fix byte order of extended control encode, decode Fix byte order of extended format control encoding and decoding in the following src/frame.c functions: * patty_ax25_frame_decode_control() * patty_ax25_frame_encode_reply_to() --- src/frame.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/frame.c b/src/frame.c index 135a3d1..85dee75 100644 --- a/src/frame.c +++ b/src/frame.c @@ -195,14 +195,13 @@ ssize_t patty_ax25_frame_decode_control(patty_ax25_frame *frame, break; case PATTY_AX25_FRAME_EXTENDED: - frame->control = (uint16_t)(buf[offset++] << 8); - frame->control |= (uint16_t)(buf[offset++]); + frame->control = (uint16_t)(buf[offset++]); - if (PATTY_AX25_FRAME_CONTROL_U(frame->control)) { - errno = EIO; - - goto error; + if (!PATTY_AX25_FRAME_CONTROL_U(frame->control)) { + frame->control |= (uint16_t)(buf[offset++] << 8); } + + break; } if (PATTY_AX25_FRAME_CONTROL_I(frame->control)) { @@ -638,8 +637,11 @@ ssize_t patty_ax25_frame_encode_reply_to(patty_ax25_frame *frame, break; case PATTY_AX25_FRAME_EXTENDED: - ((uint8_t *)buf)[offset++] = (reply->control & 0xff00) >> 8; - ((uint8_t *)buf)[offset++] = reply->control & 0xf00ff; + ((uint8_t *)buf)[offset++] = reply->control & 0x00ff; + + if (!PATTY_AX25_FRAME_CONTROL_U(reply->control)) { + ((uint8_t *)buf)[offset++] = (reply->control & 0xff00) >> 8; + } break; }