- 主题:找找bug:chatgpt写的IPv4 range转换为CIDR的函数
输入主机字节序的IP range,输出对应的主机字节序的CIDR(网络地址 + 掩码)。
// IPv4 范围转最少 CIDR(无 log2,纯位运算)
static void ipv4_range_to_cidr(uint32_t start, uint32_t end,
std::vector<std::pair<uint32_t,uint32_t>>& out)
{
while (start <= end)
{
uint32_t max_size = start & (~start + 1); // 最大对齐块
if (max_size == 0) max_size = 1u << 31; // 溢出保护
uint32_t remain = end - start + 1;
while (max_size > remain)
max_size >>= 1;
uint32_t mask = ~(max_size - 1); // 主机序掩码
out.push_back({start, mask});
start += max_size;
}
}
--
FROM 111.199.144.*
把这个给 DeepSeek R1 0528 看,至少找到一个问题,start, end 都为 0xffffffff 会死循环。
【 在 z16166 的大作中提到: 】
: 输入主机字节序的IP range,输出对应的主机字节序的CIDR(网络地址 + 掩码)。
: // IPv4 范围转最少 CIDR(无 log2,纯位运算)
: static void ipv4_range_to_cidr(uint32_t start, uint32_t end,
: ...................
--
FROM 124.64.16.*
更精确一点的是 end=0xffffffff 一定死循环,因为这个是 uint32_t 的最大值,start <= end 永远成立。
【 在 ArchLinux 的大作中提到: 】
: 把这个给 DeepSeek R1 0528 看,至少找到一个问题,start, end 都为 0xffffffff 会死循环。
--
FROM 124.64.16.*
ds直接分析的?
我让豆包设计了测试用例,然后跑了一下它给的测试用例,发现一些问题,包括这个死循环问题(溢出也会导致死循环)。
然后发现豆包的测试代码也有点问题,本应报PASS的一个用例,报了FAILED。
【 在 ArchLinux 的大作中提到: 】
: 更精确一点的是 end=0xffffffff 一定死循环,因为这个是 uint32_t 的最大值,start <= end 永远成立。
:
--
FROM 111.199.144.*
OpenRouter 的 R1 0528 (free) 和 ds 官网都是看到 start 结果回卷或者 remain 结果溢出的问题。后面 end=0xffffffff 导致死循环是我之后再看代码发现的。
【 在 z16166 的大作中提到: 】
: ds直接分析的?
: 我让豆包设计了测试用例,然后跑了一下它给的测试用例,发现一些问题,包括这个死循环问题(溢出也会导致死循环)。
: 然后发现豆包的测试代码也有点问题,本应报PASS的一个用例,报了FAILED。
: ...................
--
FROM 124.64.16.*