Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

创建补丁

ℹ️我们已于 2020 年 8 月从 Gerrit 迁移到 GitLab

Development/SubmittingPatches wiki 页面和 Developer's Guide 的贡献章节包含有关补丁提交流程的完整信息。

⚠️在提交你的更改之前:

  • 对它们进行 Fuzz 测试!更多详细信息请参见 FuzzTesting。

  • 通过运行 tools/checkAPIs.pl <file> 验证你只使用了批准的函数调用

  • 使用 tools/checkhf.pl <file> 验证 header fields

  • 通过运行 tools/checkfiltername.pl <file> 验证正确命名的 display filter fields

  • 如果你的更改不只是一个微不足道的错误修复,那么最好为被修改的协议添加一个捕获文件,以便其他人测试。

捕获文件可以通过错误报告添加到 Wireshark 生态系统中(随后可以在提交消息中使用 Bug: 或 Ping-Bug: 条目引用),也可以作为对 wiki SampleCaptures 页面的补充。附加捕获文件后,它会自动成为回归套件的一部分,并定期接受测试。

如果更改修复了一个错误,提交的错误报告应说明它们修复的问题(不要依赖提交消息来说明);如果它们为新协议增加支持或增强对现有协议的支持,提交的错误报告应描述该新协议或增强。不要只提交一个占位错误,标题类似于“Capture file for change XXX”。还应将错误状态更改为 IN_PROGRESS,以便清楚表明你已经在处理它。

如果你的更改涉及多个方面,例如你正在更新多个 dissector,或者你的更改包含一项新功能、一个小错误修复以及一个崩溃修复,那么你应该发送多个补丁。

提交更改之前,请阅读 doc/README.developer 的“Code style”部分。该部分有两个重要小节:“Portability”和“Robustness”。

“Portability”部分指出:

Wireshark runs on many platforms, and can be compiled with a number of different compilers;here are some rules for writing code that will work on multiple platforms.

提交给 Wireshark 的代码应能在多种处理器类型上运行(包括 big-endian 和 little-endian 处理器,甚至包括访问未对齐数据时会触发异常的处理器),应能在许多不同操作系统上运行,并且应能使用许多不同编译器编译。

仅仅因为某些东西能在你的平台上编译,并不意味着它能在 Wireshark 所构建的所有其他平台上正确编译或运行。尤其要注意,Wireshark 可以使用非 GCC 编译器编译,并在 big-endian 处理器上运行。仅仅因为代码能在你的开发机器上工作,并不意味着它能在例如以下环境中工作:

  • PC 上的 Linux 或某个 BSD(little-endian 处理器,并且可能使用 GCC 或 Clang)
  • Macintosh(big-endian PowerPC 处理器或 little-endian Intel 处理器,并且可能使用 GCC 或 Clang)
  • PC 上的 Windows(little-endian 处理器,并且可能使用 Microsoft Visual C++)
  • SPARC 机器上的 Solaris(big-endian 处理器,对未对齐访问会触发异常,编译器可能是 Sun C)。

“Robustness”部分指出:

Wireshark is not guaranteed to read only network traces that contain correctly-formed packets. Wireshark is commonly used is to track down networking problems,and the problems might be due to a buggy protocol implementation sending outbad packets.Therefore, protocol dissectors not only have to be able to handlecorrectly-formed packets without, for example, crashing or loopinginfinitely, they also have to be able to handle *incorrectly*-formedpackets without crashing or looping infinitely.

例如,在处理 TLV(Type, Length, Value)协议头时实现出无限循环是一个常见错误。请处理长度小于 type 和 length 字段长度的情况;尤其是,如果长度为零,代码绝不能尝试继续循环处理 TLV,因为这样循环会一遍又一遍地处理同一个 TLV,永远不会停止。

于 2020-08-11 23:12:24 UTC 从 https://wiki.wireshark.org/CreatingPatches 导入

相关 Wireshark Wiki 页面

网络分析技术档案