TI中文支持网
TI专业的中文技术问题搜集分享网站

发现Z-Stack Home 1.2.1的MT.c文件似乎存在一处bug

协议栈版本:Z-Stack Home 1.2.1

MT.c文件 -> MT_BuildEndpointDesc函数中,有这样一段代码:

if ( ret == ZMemError )

{

    if (epDesc->simpleDesc->pAppInClusterList)           {    osal_mem_free(epDesc->simpleDesc->pAppInClusterList);         }

    if (epDesc->simpleDesc->AppNumOutClusters)      {     osal_mem_free(epDesc->simpleDesc->pAppOutClusterList);         }

    osal_mem_free(epDesc->simpleDesc);

}

红字注明部分,似乎应该改成:pAppOutClusterList。

gancheng:

应该也可以的,因为epDesc->simpleDesc->AppNumOutClusters非零说明epDesc->simpleDesc->pAppOutClusterList非空。

AndyChen:

回复 gancheng:

不对,按程序的思路,执行过程应该是这样的:

1、判断epDesc->simpleDesc->AppNumInClusters是否非零,若非零,则分配内存epDesc->simpleDesc->pAppInClusterList用来存储InClusterList。

2、判断epDesc->simpleDesc->AppNumOutClusters是否非零,若非零,则分配内存epDesc->simpleDesc->pAppOutClusterList用来存储OutClusterList。

3、之后会判断上面是否顺利执行,若有某一步执行错误,需将之前分配成功的内存释放。

例如epDesc->simpleDesc->AppNumInClusters非零且epDesc->simpleDesc->pAppInClusterList分配成功,epDesc->simpleDesc->AppNumOutClusters非零且epDesc->simpleDesc->pAppOutClusterList分配失败,

此时会释放epDesc->simpleDesc->pAppInClusterList,而对epDesc->simpleDesc->pAppOutClusterList则不应该执行释放(因为它没有分配成功)。

但按我指出的bug,此时仍会对epDesc->simpleDesc->pAppOutClusterList执行释放,即对一个指向0000H的指针执行了osal_mem_free。

 

 

AndyChen:

回复 AndyChen:

能否确认一下

赞(0)
未经允许不得转载:TI中文支持网 » 发现Z-Stack Home 1.2.1的MT.c文件似乎存在一处bug
分享到: 更多 (0)