[技术问答] NUC505 USB 虚拟串口的一个Bug

[复制链接]
835|3
 楼主| seawwh 发表于 2020-4-16 09:28 | 显示全部楼层 |阅读模式
NUC505_Series_BSP_CMSIS_V3.03.001/SampleCode/USBD_VCOM_SerialEmulator

vcom_serial.c 中有下列定义

#define EPA_MAX_PKT_SIZE        512
uint8_t gRxBuf[64] = {0};

   if(i32Len > EPA_MAX_PKT_SIZE)
       i32Len = EPA_MAX_PKT_SIZE;

    for(i=0; i<i32Len; i++) {
        gRxBuf[i] = comRbuf[comRhead++];
        if(comRhead >= RXBUFSIZE)
             comRhead = 0;
     }
  由于gRxBuf的大小只有64字节,而赋值循环的最大值是512,这样就可能会导致写越界。
  我是在发送较大数据包时发现这个Bug的,改正方法是:
将   uint8_t gRxBuf[64] = {0};
改为 uint8_t gRxBuf[EPA_MAX_PKT_SIZE] = {0};
xuanhuanzi 发表于 2020-4-16 22:10 | 显示全部楼层
哈哈,估计是程序员失误,忘了。
xuanhuanzi 发表于 2020-4-16 22:11 | 显示全部楼层
楼主非常棒,这个如果不深入理解,真难以发现。
天灵灵地灵灵 发表于 2020-4-16 23:16 | 显示全部楼层
666的操作。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

145

主题

368

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部