blf: use common code to read the log object header.
This commit is contained in:
parent
6fe68991df
commit
5aad28d773
111
wiretap/blf.c
111
wiretap/blf.c
|
@ -712,23 +712,31 @@ blf_init_rec(blf_params_t *params, blf_logobjectheader_t *header, int pkt_encap,
|
|||
/* TODO: before we had to remove comments and verdict here to not leak memory but APIs have changed ... */
|
||||
}
|
||||
|
||||
static gboolean
|
||||
blf_read_log_object_header(blf_params_t *params, int *err, gchar **err_info, gint64 header2_start, gint64 data_start, blf_logobjectheader_t *logheader) {
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_log_object_header: not enough bytes for timestamp header");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, logheader, sizeof(*logheader), err, err_info)) {
|
||||
ws_debug("blf_read_log_object_header: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(logheader);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
blf_read_ethernetframe(blf_params_t *params, int *err, gchar **err_info, gint64 block_start, gint64 header2_start, gint64 data_start, gint64 object_length) {
|
||||
blf_logobjectheader_t logheader;
|
||||
blf_ethernetframeheader_t ethheader;
|
||||
guint8 tmpbuf[18];
|
||||
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_ethernetframe: not enough bytes for timestamp header");
|
||||
if (!blf_read_log_object_header(params, err, err_info, header2_start, data_start, &logheader)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, &logheader, sizeof(logheader), err, err_info)) {
|
||||
ws_debug("blf_read_ethernetframe: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(&logheader);
|
||||
|
||||
if (object_length < (data_start - block_start) + (int) sizeof(blf_ethernetframeheader_t)) {
|
||||
ws_debug("blf_read_ethernetframe: not enough bytes for ethernet frame header in object");
|
||||
return FALSE;
|
||||
|
@ -797,17 +805,10 @@ blf_read_ethernetframe_ext(blf_params_t *params, int *err, gchar **err_info, gin
|
|||
blf_logobjectheader_t logheader;
|
||||
blf_ethernetframeheader_ex_t ethheader;
|
||||
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_ethernetframe_ex: not enough bytes for timestamp header");
|
||||
if (!blf_read_log_object_header(params, err, err_info, header2_start, data_start, &logheader)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, &logheader, sizeof(logheader), err, err_info)) {
|
||||
ws_debug("blf_read_ethernetframe_ex: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(&logheader);
|
||||
|
||||
if (object_length < (data_start - block_start) + (int) sizeof(blf_ethernetframeheader_ex_t)) {
|
||||
ws_debug("blf_read_ethernetframe_ex: not enough bytes for ethernet frame header in object");
|
||||
return FALSE;
|
||||
|
@ -845,17 +846,10 @@ blf_read_wlanframe(blf_params_t* params, int* err, gchar** err_info, gint64 bloc
|
|||
blf_logobjectheader_t logheader;
|
||||
blf_wlanframeheader_t wlanheader;
|
||||
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_wlanframe: not enough bytes for timestamp header");
|
||||
if (!blf_read_log_object_header(params, err, err_info, header2_start, data_start, &logheader)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, &logheader, sizeof(logheader), err, err_info)) {
|
||||
ws_debug("blf_read_wlanframe: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(&logheader);
|
||||
|
||||
if (object_length < (data_start - block_start) + (int)sizeof(blf_wlanframeheader_t)) {
|
||||
ws_debug("blf_read_wlanframe: not enough bytes for wlan frame header in object");
|
||||
return FALSE;
|
||||
|
@ -930,17 +924,10 @@ blf_read_canmessage(blf_params_t *params, int *err, gchar **err_info, gint64 blo
|
|||
guint8 payload_length;
|
||||
guint8 payload_length_valid;
|
||||
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_canmessage: not enough bytes for timestamp header");
|
||||
if (!blf_read_log_object_header(params, err, err_info, header2_start, data_start, &logheader)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, &logheader, sizeof(logheader), err, err_info)) {
|
||||
ws_debug("blf_read_canmessage: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(&logheader);
|
||||
|
||||
if (object_length < (data_start - block_start) + (int) sizeof(canheader)) {
|
||||
ws_debug("blf_read_canmessage: not enough bytes for canfd header in object");
|
||||
return FALSE;
|
||||
|
@ -1006,17 +993,10 @@ blf_read_canfdmessage(blf_params_t *params, int *err, gchar **err_info, gint64 b
|
|||
guint8 payload_length;
|
||||
guint8 payload_length_valid;
|
||||
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_canfdmessage64: not enough bytes for timestamp header");
|
||||
if (!blf_read_log_object_header(params, err, err_info, header2_start, data_start, &logheader)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, &logheader, sizeof(logheader), err, err_info)) {
|
||||
ws_debug("blf_read_canfdmessage64: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(&logheader);
|
||||
|
||||
if (object_length < (data_start - block_start) + (int) sizeof(canheader)) {
|
||||
ws_debug("blf_read_canfdmessage64: not enough bytes for canfd header in object");
|
||||
return FALSE;
|
||||
|
@ -1078,17 +1058,10 @@ blf_read_canfdmessage64(blf_params_t *params, int *err, gchar **err_info, gint64
|
|||
guint8 payload_length;
|
||||
guint8 payload_length_valid;
|
||||
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_canfdmessage64: not enough bytes for timestamp header");
|
||||
if (!blf_read_log_object_header(params, err, err_info, header2_start, data_start, &logheader)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, &logheader, sizeof(logheader), err, err_info)) {
|
||||
ws_debug("blf_read_canfdmessage64: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(&logheader);
|
||||
|
||||
if (object_length < (data_start - block_start) + (int) sizeof(canheader)) {
|
||||
ws_debug("blf_read_canfdmessage64: not enough bytes for canfd header in object");
|
||||
return FALSE;
|
||||
|
@ -1157,17 +1130,10 @@ blf_read_flexraydata(blf_params_t *params, int *err, gchar **err_info, gint64 bl
|
|||
guint8 payload_length_valid;
|
||||
guint8 tmpbuf[7];
|
||||
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_flexraydata: not enough bytes for timestamp header");
|
||||
if (!blf_read_log_object_header(params, err, err_info, header2_start, data_start, &logheader)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, &logheader, sizeof(logheader), err, err_info)) {
|
||||
ws_debug("blf_read_flexraydata: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(&logheader);
|
||||
|
||||
if (object_length < (data_start - block_start) + (int) sizeof(frheader)) {
|
||||
ws_debug("blf_read_flexraydata: not enough bytes for flexrayheader in object");
|
||||
return FALSE;
|
||||
|
@ -1238,17 +1204,10 @@ blf_read_flexraymessage(blf_params_t *params, int *err, gchar **err_info, gint64
|
|||
guint8 payload_length_valid;
|
||||
guint8 tmpbuf[7];
|
||||
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_flexraymessage: not enough bytes for timestamp header");
|
||||
if (!blf_read_log_object_header(params, err, err_info, header2_start, data_start, &logheader)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, &logheader, sizeof(logheader), err, err_info)) {
|
||||
ws_debug("blf_read_flexraymessage: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(&logheader);
|
||||
|
||||
if (object_length < (data_start - block_start) + (int) sizeof(frheader)) {
|
||||
ws_debug("blf_read_flexraymessage: not enough bytes for flexrayheader in object");
|
||||
return FALSE;
|
||||
|
@ -1337,21 +1296,14 @@ blf_read_flexrayrcvmessageex(blf_params_t *params, int *err, gchar **err_info, g
|
|||
guint8 tmpbuf[7];
|
||||
gint frheadersize = sizeof(frheader);
|
||||
|
||||
if (!blf_read_log_object_header(params, err, err_info, header2_start, data_start, &logheader)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (ext) {
|
||||
frheadersize += 40;
|
||||
}
|
||||
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_flexraymessage: not enough bytes for timestamp header");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, &logheader, sizeof(logheader), err, err_info)) {
|
||||
ws_debug("blf_read_flexraymessage: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(&logheader);
|
||||
|
||||
if ((gint64)object_length < (data_start - block_start) + frheadersize) {
|
||||
ws_debug("blf_read_flexraymessage: not enough bytes for flexrayheader in object");
|
||||
return FALSE;
|
||||
|
@ -1441,17 +1393,10 @@ blf_read_linmessage(blf_params_t *params, int *err, gchar **err_info, gint64 blo
|
|||
guint8 payload_length;
|
||||
guint8 payload_length_valid;
|
||||
|
||||
if (data_start - header2_start < (gint64)sizeof(blf_logobjectheader_t)) {
|
||||
ws_debug("blf_read_linmessage: not enough bytes for timestamp header");
|
||||
if (!blf_read_log_object_header(params, err, err_info, header2_start, data_start, &logheader)) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (!blf_read_bytes_or_eof(params, header2_start, &logheader, sizeof(logheader), err, err_info)) {
|
||||
ws_debug("blf_read_linmessage: not enough bytes for logheader");
|
||||
return FALSE;
|
||||
}
|
||||
fix_endianness_blf_logobjectheader(&logheader);
|
||||
|
||||
if (object_length < (data_start - block_start) + (int)sizeof(linheader)) {
|
||||
ws_debug("blf_read_linmessage: not enough bytes for linmessage header in object");
|
||||
return FALSE;
|
||||
|
|
Loading…
Reference in New Issue