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.

[参考译文] CC3235S:Simplelink SDK:在 httpclient 中使用 malloc#39;ed 存储器、无需初始化

Guru**** 2556590 points
Other Parts Discussed in Thread: CC3235S

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1005651/cc3235s-simplelink-sdk-use-of-malloc-ed-memory-without-initialization-in-httpclient

器件型号:CC3235S

我们将 Simplelink SDK 4.4 (并使用5.1版对其进行了测试)与 CC3235S 结合使用。
在将 httpclient 与自定义请求标头一起使用时、我们注意到 HttpClient_connect 调用似乎会随机失败、并显示错误 HttpClient_EHOSTHEADERALREADYEXIST (-3019)。

你(们)好

进行一些挖掘后、我们注意到 HttpClient_setHeaderByName 函数会对内存 REQ_HField 进行 malloc、并且只设置值和 CustomName 成员。 发送请求时使用链接的请求标头列表时,代码会检查 Name 属性是否为 NULL,然后使用 CustomName 属性。 否则,Name 属性用于查找实际的标头名称。
现在、通常情况下、这不会是一个问题:如果之前未使用存储器、该区域可能为 NULL、并且在对 Name 属性进行 NULL 检查时、代码将按预期工作。 如果之前使用过、则名称映射到的区域中可能存在任何值。 在本例中、有时这将是主机报头的数值、从而导致 http 代码随机失败。

我们的解决方法是:

memset (node、0、sizeof (REQ_HField));

在 httpclient.c 文件的第2669行中、整个块的读数为:

/*分配请求标头节点*/
节点=(REQ_HField *) malloc (sizeof (REQ_HField));
if (节点!= NULL)

memset (node、0、sizeof (REQ_HField));
node->value =(char *) malloc (len);


请考虑在 SDK 的未来版本中包含此修复:此外、请查看调用 malloc 的其他位置、以确保仅使用已初始化的数据结构。

此致、

William

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

    尊敬的 William:

    感谢这次修复!

    我相信我们只能设置“node->Name = 0;”。

    另一个参数(node->Next)已设置。

    我们将把它添加到下一个 SDK 中。

    BR、

    Kobi