MISRAC2012-Rule-18.1d以太网MAC存在问题
我的源代码中有一个clasic以太网MAC地址代码:MISRAC2012-Rule-18.1d以太网MAC存在问题,c,static-analysis,misra,C,Static Analysis,Misra,我的源代码中有一个clasic以太网MAC地址代码: netif->hwaddr[0] = heth.Init.MACAddr[0]; netif->hwaddr[1] = heth.Init.MACAddr[1]; netif->hwaddr[2] = heth.Init.MACAddr[2]; netif->hwaddr[3] = heth.Init.MACAddr[3]; netif->hwaddr[4] = heth.Init.
netif->hwaddr[0] = heth.Init.MACAddr[0];
netif->hwaddr[1] = heth.Init.MACAddr[1];
netif->hwaddr[2] = heth.Init.MACAddr[2];
netif->hwaddr[3] = heth.Init.MACAddr[3];
netif->hwaddr[4] = heth.Init.MACAddr[4];
netif->hwaddr[5] = heth.Init.MACAddr[5];
编辑:
当我尝试在我的代码中进行静态分析时,我在所有这些行中都会遇到此错误:
我该如何解决这个问题?MISRA检查器说您访问数组时超出了范围,显然情况也是如此:
#define NETIF_MAX_HWADDR_LEN 5U
u8_t hwaddr[NETIF_MAX_HWADDR_LEN];
...
netif->hwaddr[5] = heth.Init.MACAddr[5];
数组在C语言中是0索引的。解决这个问题的方法是不要声明太小的数组。我们没有足够的信息-如果(例如)
netif->hwaddr
只有4个字节大怎么办?显示更多代码。您需要确保analyzr知道指针指向何处。您需要重写您的数据类型以对其进行原型化。米斯拉是。。。。。headI在我的主题中添加了一些细节请不要破坏你的问题,也不要使用自制的整数类型并使用stdint.h
。你完全没有理由不使用这个。很抱歉我写的信息是5U,但它是6U。很抱歉。@gogogo Ok,但工具说你正在访问索引42或其他东西。。。
#define NETIF_MAX_HWADDR_LEN 5U
u8_t hwaddr[NETIF_MAX_HWADDR_LEN];
...
netif->hwaddr[5] = heth.Init.MACAddr[5];