master/master.c
changeset 1303 448f2e9fa483
parent 1279 6911450535b7
child 1312 74853e018898
equal deleted inserted replaced
1302:92a2a3d1bb79 1303:448f2e9fa483
   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