This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

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

Other Parts Discussed in Thread: Z-STACK

协议栈版本: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。

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

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

    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。

     

     

  • 能否确认一下