В моей пользовательской разборе, я добавить значение gint16 вWireshark ошибка при дисплей знаковое 32-битное значение в два раза в дереве протокола
gint16 stmp16 = 0;
stmp16 = (gint16)tvb_get_letohs(tvb, suboffset);
proto_tree_add_int_format_value(Din_tree, hf_distanceValue, tvb, suboffset, 2, stmp16, "%lf", stmp16/100.0);
suboffset += 2;
Он правильно отображает 16 разрядное значение gint16 в датаграммы, чье поле заголовка описано в
&hf_distanceValue,
{ "Distance Value", "veh.in",
FT_INT16, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
Однако при попытке отобразить 32 разрядное значение подписал gint32, я получаю ошибку
[Dissector bug, protocol CUSTOM: ..\build\epan\proto.c:4128: failed assertion "DISSECTOR_ASSERT_NOT_REACHED"]
Значение выбирается таким же образом с использованием функции tvb_get_letohl(),
gint32 stmp32 = 0;
stmp32 = (gint32)tvb_get_letohl(tvb, suboffset);
proto_tree_add_int_format_value(Din_tree, hf_speedValue, tvb, suboffset, 4, stmp32, "%lf", stmp32/1000000.0);
suboffset += 4;
&hf_speedValue,
{ "Speed Value", "veh.in",
FT_INT32, BASE_DEC, NULL, 0x0,
NULL, HFILL }
},
Утверждение терпит неудачу на proto_tree_add_int_format_value() в случае, если значение типа gint32, он отлично работает в gint16 случае.
Спасибо за ответ. Нет, смена имени фильтра не помогла. –