我们将 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