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.

[参考译文] CC2530:ZSTACK3.0.2:对 zdpProcessAddrReq 中超出范围的局部变量的引用。

Guru**** 2464780 points
Other Parts Discussed in Thread: SIMPLELINK-CC13XX-CC26XX-SDK

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1188537/cc2530-zstack3-0-2-reference-to-out-of-scope-local-variable-in-zdpprocessaddrreq

器件型号:CC2530
主题中讨论的其他器件:SIMPLELINK-CC13XX-CC26XX-SDK

当我在现场遇到器件问题时、我将对项目和 ZStack 代码执行新的静态分析。

在 Components/stack/zdo/ZDProfile.c 中、作为指针的变量 IEEE 被分配给一个局部变量的地址、该变量是一个数组。

一旦该本地数组超出范围(因此可能被丢弃)、它就会复制到缓冲区中。

这个相对容易修复。

        //CCB 2113 Zigbee Core spec
        uint8 invalidIEEEAddr[Z_EXTADDR_LEN];
        osal_memset(invalidIEEEAddr,0xFF,Z_EXTADDR_LEN);
        ieee = invalidIEEEAddr;
      }
    }

    *pBuf++ = stat;

    pBuf = osal_cpyExtAddr( pBuf, ieee );

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Mario、

    以下是在 SIMPLELINK-CC13XX-CC26XX-SDK 中处理它的方法:

    void zdpProcessAddrReq( zdoIncomingMsg_t *inMsg )
    {
      AddrMgrEntry_t addrEntry;
      associated_devices_t *pAssoc;
      uint8_t reqType;
      uint16_t aoi = INVALID_NODE_ADDR;
      uint8_t invalidIEEEAddr[Z_EXTADDR_LEN] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
      uint8_t *ieee = NULL;
      
    //...  
      
          else
          {
            //CCB 2113 Zigbee Core spec
            ieee = invalidIEEEAddr;
          }
        }
    
        *pBuf++ = stat;
    
        if(ieee != NULL)
        {
          pBuf = osal_cpyExtAddr( pBuf, ieee );
        }
        else
        {
          pBuf = osal_cpyExtAddr( pBuf, invalidIEEEAddr );
        }

    此致、
    Ryan

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我所做的或多或少, 我使它成为一个静态的 const……