blf: use common code to read the log object header.

This commit is contained in:
Guy Harris 2021-09-11 17:04:23 -07:00
parent 6fe68991df
commit 5aad28d773
1 changed files with 28 additions and 83 deletions

View File

@ -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;