fix(source): guard NULL curl_buf & fix xy_strcat count in parse_and_say_curl_result - #390
fix(source): guard NULL curl_buf & fix xy_strcat count in parse_and_say_curl_result#390YuruiHong wants to merge 1 commit into
Conversation
|
Hi @YuruiHong, ❤️ 感谢你的贡献!你的 PR 当前基于 |
fe45b9e to
1766dc9
Compare
|
@YuruiHong 👍 感谢你的调试和解决! 出错原因的另一种可能
我们调用 curl -w "%{http_code} %{speed_download}"可能 但是你在调试过程中发现 维护性最好分析清楚上述原因,并借此机会加一些注释,调整代码(比如引入新变量,区分 split 前后的两个字符串),增加维护性。 贡献者的身份可以参照文档 第一次贡献者 注册你的贡献者信息!以及在该文件的 header 处添加你自己为 |
另外,我看了一下 这个时候, |
|
感谢 review。 我做了两点复核,结论如下:
综合来看,本 PR 剩下的这 1 行改动属于防御性代码,覆盖的是 curl 输出未按 |
|
感谢 review。 我做了两点复核,结论如下:
综合来看,本 PR 剩下的这 1 行改动属于防御性代码,覆盖的是 curl 输出未按 |
|
是的,我这边暂时也无法复现。 另外,出现问题时你使用的版本是多少?是 如果是 int http_code = xy_str2int (curl_buf);
double speed = xy_str2float (split+1);
char *speedstr = to_human_readable_speed (speed);
if (0==http_code)
{
char *msg = ENGLISH ? "ERROR curl output: " : "错误 curl 输出: ";
println (red (xy_2strcat (msg, curl_buf))); // 原错误代码在这里是 xy_strcat(3, msg, curl_buf);
} |
问题
当
curl未产生任何输出(例如镜像站不可达导致xy_run内popen出现异常),或者输出中不含空格(例如"000")时,parse_and_say_curl_result里:会在
strtof中解引用非法地址,触发SIGSEGV。复现
在屏蔽
mirrors.tuna.tsinghua.edu.cn段 TCP:443 的网络中:gdb backtrace(debug 构建)确认
split=NULL时进入xy_str2float后崩溃。修复
仅一行:
split为 NULL 时不再对split+1求值,speed 取 0。验证
同一网络下
chsrc measure debian遍历完所有镜像,退出码 0,选出最快源。