为 curl 编写 C 语言代码

主要观点:如何在curl中编写 C 代码以实现数十亿安装的安全,包括采取的预防措施和决策。
关键信息:

  • “c”在 curl 中代表“client”,而非 C 语言。
  • 重视测试,包括写大量测试、运行静态代码分析工具和模糊测试。
  • C 语言非内存安全,虽有约 40%安全漏洞源于使用 C,但近 5 年关键和高严重级漏洞少。
  • 注重代码可读性,函数宜小,代码风格应一致,有工具验证代码风格合规。
  • 代码应写得窄,限制每行 80 列,标识符宜短。
  • 构建代码无编译器警告,避免使用“坏”函数,如 gets 等。
  • 统一动态缓冲区处理,引入新的解析函数集,监控内存函数使用,避免多余内存分配,双重检查乘法。
  • 2023 年起放弃在无 64 位整数类型系统上构建 curl,保证 64 位支持。
  • 对库的字符串输入有最大长度限制。
  • 不允许破坏 master 分支,总是检查并处理错误,公共函数前缀为“curl_”,人人都可编写 curl 代码。
    重要细节:
  • 有接近 180,000 行 C89 生产代码,坚持使用 C89 以保证可移植性。
  • 介绍了一些避免内存相关问题的具体函数和方法,如 strdup 等。
  • 展示了 curl 内存函数调用密度随时间的变化图。
  • 强调在各种环境中都要检查错误,不能依赖现代操作系统不返回错误。
阅读 8
0 条评论