Closed zmqccj closed 4 years ago
谢谢指出问题。bug1的int和size_t类型转换确实不妥,我们会检查。bug2目前两个指针都只在_serialize_connect_packet内使用,运行不会有问题。不过确实Free之后应该置为NULL比较合理。
bug1在跑OTAdemo的时候应该会复现,下载时会出现段错误,因为len变量附近的一个指针被改了。第二个bug在自动重连的时候会复现,一方面是重复Free导致程序挂掉,另一方面是,这里Free掉了username和password,怎么重连上呢?你们的SDK真的测试过了么?
请问你的运行环境是什么?可有改动过SDK的代码?64位系统在我们ubuntu14.04/16.04都有测试过,并没有出现你所说的问题。 关于bug2,你可以仔细看看代码,username和password在_serialize_connect_packet内使用前都是会重新malloc并赋值的,所以不会有问题。
我重新看了下,bug2是我们以前改了代码,和你们的SDK不一样了,你们这里是可以的。bug1你们没有复现应该是因为你们的优化选项是-Os,你们可以试下-O0,应该会出现Segmentation fault
bug1
src/utils/farra/utils_httpc.c中368行
在64位系统中size_t和int长度可能不一样,这样强转会导致p_read_len指向地址附近的内存会被异常覆盖。
bug2
src/mqtt/src/mqtt_client_connect.c中187行
HAL_Free后建议将指针置为NULL,否则mqtt重连的时候程序会挂掉