@@ -493,13 +493,14 @@ static DXLLibErrorCode_t parse_dxl1_0_packet(InfoToParseDXLPacket_t* p_parse_pac
493
493
static DXLLibErrorCode_t parse_dxl2_0_packet (InfoToParseDXLPacket_t* p_parse_packet, uint8_t recv_data)
494
494
{
495
495
DXLLibErrorCode_t ret = DXL_LIB_PROCEEDING;
496
- uint16_t byte_stuffing_cnt = 0 ;
496
+ static uint16_t byte_stuffing_cnt = 0 ; // static variable
497
497
498
498
switch (p_parse_packet->parse_state )
499
499
{
500
500
case DXL2_0_PACKET_PARSING_STATE_IDLE:
501
501
if (p_parse_packet->header_cnt >= 3 ){
502
502
p_parse_packet->header_cnt = 0 ;
503
+ byte_stuffing_cnt = 0 ; // static variable initialization
503
504
}
504
505
p_parse_packet->header [p_parse_packet->header_cnt ++] = recv_data;
505
506
if (p_parse_packet->header_cnt == 3 ){
@@ -568,17 +569,11 @@ static DXLLibErrorCode_t parse_dxl2_0_packet(InfoToParseDXLPacket_t* p_parse_pac
568
569
if (p_parse_packet->packet_len < 4 ){ // 4 = Instruction(1)+Error(1)+CRC(2)
569
570
ret = DXL_LIB_ERROR_LENGTH;
570
571
p_parse_packet->parse_state = DXL2_0_PACKET_PARSING_STATE_IDLE;
571
- }else if (p_parse_packet->packet_len > p_parse_packet->param_buf_capacity +4 ){ // 4 = Instruction(1)+Error(1)+CRC(2)
572
- ret = DXL_LIB_ERROR_BUFFER_OVERFLOW;
573
- p_parse_packet->parse_state = DXL2_0_PACKET_PARSING_STATE_IDLE;
574
572
}else {
575
573
p_parse_packet->parse_state = DXL2_0_PACKET_PARSING_STATE_ERROR;
576
574
}
577
575
}else {
578
- if (p_parse_packet->packet_len > p_parse_packet->param_buf_capacity +3 ){ // 3 = Instruction(1)+CRC(2)
579
- ret = DXL_LIB_ERROR_BUFFER_OVERFLOW;
580
- p_parse_packet->parse_state = DXL2_0_PACKET_PARSING_STATE_IDLE;
581
- }else if (p_parse_packet->packet_len == 3 ){ // 3 = Instruction(1)+CRC(2)
576
+ if (p_parse_packet->packet_len == 3 ){ // 3 = Instruction(1)+CRC(2)
582
577
p_parse_packet->parse_state = DXL2_0_PACKET_PARSING_STATE_CRC_L;
583
578
}else {
584
579
p_parse_packet->parse_state = DXL2_0_PACKET_PARSING_STATE_PARAM;
@@ -600,8 +595,13 @@ static DXLLibErrorCode_t parse_dxl2_0_packet(InfoToParseDXLPacket_t* p_parse_pac
600
595
if (p_parse_packet->p_param_buf == NULL ){
601
596
ret = DXL_LIB_ERROR_NULLPTR;
602
597
p_parse_packet->parse_state = DXL2_0_PACKET_PARSING_STATE_IDLE;
598
+ break ;
599
+ }
600
+ if (p_parse_packet->param_buf_capacity < p_parse_packet->recv_param_len ) {
601
+ ret = DXL_LIB_ERROR_BUFFER_OVERFLOW;
602
+ p_parse_packet->parse_state = DXL2_0_PACKET_PARSING_STATE_IDLE;
603
+ break ;
603
604
}
604
-
605
605
p_parse_packet->p_param_buf [p_parse_packet->recv_param_len ++] = recv_data;
606
606
update_dxl_crc (&p_parse_packet->calculated_crc , recv_data);
607
607
0 commit comments