equal
deleted
inserted
replaced
748 unsigned int cmd_follows, matched; |
748 unsigned int cmd_follows, matched; |
749 const uint8_t *cur_data; |
749 const uint8_t *cur_data; |
750 ec_datagram_t *datagram; |
750 ec_datagram_t *datagram; |
751 |
751 |
752 if (unlikely(size < EC_FRAME_HEADER_SIZE)) { |
752 if (unlikely(size < EC_FRAME_HEADER_SIZE)) { |
|
753 if (master->debug_level) { |
|
754 EC_DBG("Corrupted frame received (size %u < %u byte):\n", |
|
755 size, EC_FRAME_HEADER_SIZE); |
|
756 ec_print_data(frame_data, size); |
|
757 } |
753 master->stats.corrupted++; |
758 master->stats.corrupted++; |
754 ec_master_output_stats(master); |
759 ec_master_output_stats(master); |
755 return; |
760 return; |
756 } |
761 } |
757 |
762 |
760 // check length of entire frame |
765 // check length of entire frame |
761 frame_size = EC_READ_U16(cur_data) & 0x07FF; |
766 frame_size = EC_READ_U16(cur_data) & 0x07FF; |
762 cur_data += EC_FRAME_HEADER_SIZE; |
767 cur_data += EC_FRAME_HEADER_SIZE; |
763 |
768 |
764 if (unlikely(frame_size > size)) { |
769 if (unlikely(frame_size > size)) { |
|
770 if (master->debug_level) { |
|
771 EC_DBG("Corrupted frame received (invalid frame size %u for " |
|
772 "received size %u):\n", frame_size, size); |
|
773 ec_print_data(frame_data, size); |
|
774 } |
765 master->stats.corrupted++; |
775 master->stats.corrupted++; |
766 ec_master_output_stats(master); |
776 ec_master_output_stats(master); |
767 return; |
777 return; |
768 } |
778 } |
769 |
779 |
776 cmd_follows = EC_READ_U16(cur_data + 6) & 0x8000; |
786 cmd_follows = EC_READ_U16(cur_data + 6) & 0x8000; |
777 cur_data += EC_DATAGRAM_HEADER_SIZE; |
787 cur_data += EC_DATAGRAM_HEADER_SIZE; |
778 |
788 |
779 if (unlikely(cur_data - frame_data |
789 if (unlikely(cur_data - frame_data |
780 + data_size + EC_DATAGRAM_FOOTER_SIZE > size)) { |
790 + data_size + EC_DATAGRAM_FOOTER_SIZE > size)) { |
|
791 if (master->debug_level) { |
|
792 EC_DBG("Corrupted frame received (invalid data size %u):\n", |
|
793 data_size); |
|
794 ec_print_data(frame_data, size); |
|
795 } |
781 master->stats.corrupted++; |
796 master->stats.corrupted++; |
782 ec_master_output_stats(master); |
797 ec_master_output_stats(master); |
783 return; |
798 return; |
784 } |
799 } |
785 |
800 |