#34150·ardupilot

NovAtel 解析器中的规格不匹配

作者: Arslan8创建于 2026年8月22日更新于 2026年9月12日

□ 错误报告

· 问题细节

NovAtel 二进制 GPS 解析器将其有效载荷-缓冲限制应用到读取的字节总数上,包括信件头,尽管目的地缓冲器只包含有效载荷数据.

有效载荷缓冲器容量为256字节:

翻译: 联盟组合 msgbuffer { (一) Bestvel Bestvelu; (一) 最佳操作器; s; uint8 t 字节[256];

  • ;

在 " DATA " 状态期间,分析员进行以下检查:

翻译:
如果(nova msg.read { sixof(nova msg.data)) {,请检查url=值 (帮助)
调试( “ prase data sext year  u msg长  u\ n”,
(未签名)
nova msg.header.nova headeru.message长; 互联网档案馆的存檔,存档日期2014-12-21.
nova msg.nova state = nava msg parser:: PREAMBLE1; 互联网档案馆的存檔,存档日期2013-12-21.
间断;
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

nova msg.data.bytes [永久失效連結] 互联网档案馆的存檔,存档日期2013-10-02.
nova  msg.read - (英语).
nova msg.header.nova headeru.header长] = 临时;

`nova msg.read'既包括标题,也包括有效载荷字节。 由于通常的28字节NovAtel二进制头,因此检查将有效有效有效载荷容量限制在:

页:1 256-28 = 228 字节


接受228字节有效载荷。 当解析器收到一个较长的有效载荷的字节229时,`nova msg.read'已经是256个了,因此在复制字节之前它重新发送。 该消息从未达到CRC验证或“process message ()” 。

这似乎不会影响ArduPilot的正常NovAtel配置. 驱动程序执行“ unlogall” , 只要求:

页:1
最佳做法
最佳状态
PSRDOPB( PSRDOPBB) (英语).

BESTPOSB ' 有72字节的有效载荷,而BESTVELB ' 有44字节的有效载荷,因此两者均不靠近有缺陷的边界。

`PSRDOPB ' 有可变的有效载荷长度:

页:1 28 + (4 × PRN数)


只有在至少51个PRN上市时才会超过228字节. 我们没有证明目前得到支持的NovAtel、Tersus或ComNav接收器在正常ArduPilot操作期间发出这样的`PSRDOPB'信息。

尽管如此,这是规格和执行上的不匹配。 NovAtel协议支持大于228字节的有效消息. 例如,一个二进制`RANGE'有效载荷包含四个初始字节,然后是每次观测的44个字节,因此,一个有六个观测的有效信息已经有一个268字节的有效载荷。 ArduPilot通常不要求或处理`RANGE',但它表明228字节不是全协议的有效载荷限制。

因此,本报告没有声称目前观察到的作业失败或安全脆弱。 它识别出一个防御性解析器bug,不必要地将所申报的有效载荷缓冲能力从256字节降低到228字节. 如果未来支持的信息更大,如果`PSRDOPB'包含足够的PRN,或者如果接收器被独立配置以发出额外的二进制日志,那么它就可以被看到.

边界检查应使用有效载荷抵消:

翻译:
Cont uint16 t 有效载荷 负载=
nova  msg.read - (英语).
nova msg.header.nova headeru.header长; 互联网档案馆的存檔,存档日期2013-12-21.

如果( 负载  offset QQ 大小( nova  msg. data.bytes)) {
调试( “ parse data slipped difference u msglight u\n”,
. . . . . . .

内容来源: ArduPilot/ardupilot