aboutsummaryrefslogtreecommitdiffstats
path: root/wiretap
diff options
context:
space:
mode:
authorGuy Harris <gharris@sonic.net>2021-08-29 19:12:13 -0700
committerGuy Harris <gharris@sonic.net>2021-08-29 19:12:13 -0700
commit3cb6403a4caecd763e8e9a45a81160aac0644515 (patch)
tree3a321d42c17675aee99bcde1a6e59b5f9f146a91 /wiretap
parenteb2037fda4e3310c00ed4afb73195f3c4a9f27c9 (diff)
wiretap: always allocate a block for a record.
Without that, you could add a comment to a record in a file format the reading code for which doesn't allocate blocks, but the comment doesn't get saved, as there's no block in which to save the comment option. This simplifies some code paths, as we're either using the record's modified block or we're using the block as read from the file, there's no third possibility. If we attempt to read a record, and we get an error, and a block was allocated for the record, unreference it, so the individual file readers don't have to worry about it.
Diffstat (limited to 'wiretap')
-rw-r--r--wiretap/5views.c1
-rw-r--r--wiretap/aethra.c1
-rw-r--r--wiretap/ascendtext.c1
-rw-r--r--wiretap/btsnoop.c1
-rw-r--r--wiretap/busmaster.c1
-rw-r--r--wiretap/camins.c1
-rw-r--r--wiretap/candump.c1
-rw-r--r--wiretap/capsa.c1
-rw-r--r--wiretap/catapult_dct2000.c1
-rw-r--r--wiretap/commview.c2
-rw-r--r--wiretap/cosine.c1
-rw-r--r--wiretap/csids.c1
-rw-r--r--wiretap/daintree-sna.c1
-rw-r--r--wiretap/dbs-etherwatch.c1
-rw-r--r--wiretap/dct3trace.c1
-rw-r--r--wiretap/dpa400.c4
-rw-r--r--wiretap/erf.c5
-rw-r--r--wiretap/eyesdn.c1
-rw-r--r--wiretap/hcidump.c1
-rw-r--r--wiretap/i4btrace.c1
-rw-r--r--wiretap/ipfix.c1
-rw-r--r--wiretap/iseries.c1
-rw-r--r--wiretap/k12.c1
-rw-r--r--wiretap/k12text.l1
-rw-r--r--wiretap/lanalyzer.c1
-rw-r--r--wiretap/libpcap.c1
-rw-r--r--wiretap/log3gpp.c2
-rw-r--r--wiretap/logcat.c1
-rw-r--r--wiretap/logcat_text.c1
-rw-r--r--wiretap/mp2t.c1
-rw-r--r--wiretap/mpeg.c1
-rw-r--r--wiretap/mplog.c1
-rw-r--r--wiretap/netmon.c1
-rw-r--r--wiretap/netscaler.c6
-rw-r--r--wiretap/netscreen.c1
-rw-r--r--wiretap/nettl.c1
-rw-r--r--wiretap/nettrace_3gpp_32_423.c1
-rw-r--r--wiretap/netxray.c1
-rw-r--r--wiretap/observer.c1
-rw-r--r--wiretap/packetlogger.c1
-rw-r--r--wiretap/pppdump.c1
-rw-r--r--wiretap/radcom.c1
-rw-r--r--wiretap/snoop.c1
-rw-r--r--wiretap/stanag4607.c1
-rw-r--r--wiretap/systemd_journal.c1
-rw-r--r--wiretap/toshiba.c1
-rw-r--r--wiretap/visual.c1
-rw-r--r--wiretap/vms.c1
-rw-r--r--wiretap/vwr.c5
-rw-r--r--wiretap/wtap.c17
50 files changed, 80 insertions, 4 deletions
diff --git a/wiretap/5views.c b/wiretap/5views.c
index c2a87dc325..0c525c8c51 100644
--- a/wiretap/5views.c
+++ b/wiretap/5views.c
@@ -281,6 +281,7 @@ _5views_read_header(wtap *wth, FILE_T fh, t_5VW_TimeStamped_Header *hdr,
hdr->NanoSecondes = pletoh32(&hdr->NanoSecondes);
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->ts.secs = hdr->Utc;
rec->ts.nsecs = hdr->NanoSecondes;
diff --git a/wiretap/aethra.c b/wiretap/aethra.c
index 172e4ad63a..c693680107 100644
--- a/wiretap/aethra.c
+++ b/wiretap/aethra.c
@@ -330,6 +330,7 @@ aethra_read_rec_header(wtap *wth, FILE_T fh, struct aethrarec_hdr *hdr,
msecs = pletoh32(hdr->timestamp);
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->ts.secs = aethra->start + (msecs / 1000);
rec->ts.nsecs = (msecs % 1000) * 1000000;
diff --git a/wiretap/ascendtext.c b/wiretap/ascendtext.c
index 75e73dcfa4..5d768cdf3b 100644
--- a/wiretap/ascendtext.c
+++ b/wiretap/ascendtext.c
@@ -369,6 +369,7 @@ parse_ascend(ascend_t *ascend, FILE_T fh, wtap_rec *rec, Buffer *buf,
ascend->inittime -= parser_state.secs;
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
rec->ts.secs = parser_state.secs + ascend->inittime;
rec->ts.nsecs = parser_state.usecs * 1000;
diff --git a/wiretap/btsnoop.c b/wiretap/btsnoop.c
index 5ba65cbae4..36904ac86f 100644
--- a/wiretap/btsnoop.c
+++ b/wiretap/btsnoop.c
@@ -203,6 +203,7 @@ static gboolean btsnoop_read_record(wtap *wth, FILE_T fh,
ts -= KUnixTimeBase;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
rec->ts.secs = (guint)(ts / 1000000);
rec->ts.nsecs = (guint)((ts % 1000000) * 1000);
diff --git a/wiretap/busmaster.c b/wiretap/busmaster.c
index eacfb12efb..c98b9d96aa 100644
--- a/wiretap/busmaster.c
+++ b/wiretap/busmaster.c
@@ -180,6 +180,7 @@ busmaster_gen_packet(wtap_rec *rec, Buffer *buf,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = has_ts ? WTAP_HAS_TS : 0;
rec->ts.secs = secs;
rec->ts.nsecs = nsecs;
diff --git a/wiretap/camins.c b/wiretap/camins.c
index 775c8990ee..5d9680e3a9 100644
--- a/wiretap/camins.c
+++ b/wiretap/camins.c
@@ -377,6 +377,7 @@ camins_read_packet(FILE_T fh, wtap_rec *rec, Buffer *buf,
offset += bytes_read;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = 0; /* we may or may not have a time stamp */
rec->rec_header.packet_header.pkt_encap = WTAP_ENCAP_DVBCI;
if (time_us) {
diff --git a/wiretap/candump.c b/wiretap/candump.c
index 572dbc8c1a..28fda91107 100644
--- a/wiretap/candump.c
+++ b/wiretap/candump.c
@@ -86,6 +86,7 @@ candump_write_packet(wtap_rec *rec, Buffer *buf, const msg_t *msg)
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->ts = msg->ts;
rec->tsprec = WTAP_TSPREC_USEC;
diff --git a/wiretap/capsa.c b/wiretap/capsa.c
index f49314312e..b8bf256d29 100644
--- a/wiretap/capsa.c
+++ b/wiretap/capsa.c
@@ -420,6 +420,7 @@ capsa_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
rec->rec_header.packet_header.pseudo_header.eth.fcs_len = 0;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->rec_header.packet_header.caplen = packet_size;
rec->rec_header.packet_header.len = orig_size;
rec->presence_flags = WTAP_HAS_CAP_LEN|WTAP_HAS_TS;
diff --git a/wiretap/catapult_dct2000.c b/wiretap/catapult_dct2000.c
index fd6ace8af7..a3135c9a4c 100644
--- a/wiretap/catapult_dct2000.c
+++ b/wiretap/catapult_dct2000.c
@@ -1278,6 +1278,7 @@ process_parsed_line(wtap *wth, dct2000_file_externals_t *file_externals,
guint8 *frame_buffer;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
/* Make sure all packets go to Catapult DCT2000 dissector */
diff --git a/wiretap/commview.c b/wiretap/commview.c
index 64a341cdff..a30e613c57 100644
--- a/wiretap/commview.c
+++ b/wiretap/commview.c
@@ -316,6 +316,7 @@ commview_ncf_read_packet(FILE_T fh, wtap_rec *rec, Buffer *buf,
tm.tm_isdst = -1;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->rec_header.packet_header.len = cv_hdr.data_len;
@@ -1003,6 +1004,7 @@ commview_ncfx_read_packet(FILE_T fh, wtap_rec *rec, Buffer *buf,
tm.tm_isdst = -1;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
if (length_remaining > WTAP_MAX_PACKET_SIZE_STANDARD) {
diff --git a/wiretap/cosine.c b/wiretap/cosine.c
index 18ecddd293..b9b1f615ab 100644
--- a/wiretap/cosine.c
+++ b/wiretap/cosine.c
@@ -383,6 +383,7 @@ parse_cosine_packet(FILE_T fh, wtap_rec *rec, Buffer *buf,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
tm.tm_year = yy - 1900;
tm.tm_mon = mm - 1;
diff --git a/wiretap/csids.c b/wiretap/csids.c
index 68849ccb2b..584ef6e34d 100644
--- a/wiretap/csids.c
+++ b/wiretap/csids.c
@@ -185,6 +185,7 @@ csids_read_packet(FILE_T fh, csids_t *csids, wtap_rec *rec,
*/
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->rec_header.packet_header.len = hdr.caplen;
rec->rec_header.packet_header.caplen = hdr.caplen;
diff --git a/wiretap/daintree-sna.c b/wiretap/daintree-sna.c
index 418118b6c5..8570cb2305 100644
--- a/wiretap/daintree-sna.c
+++ b/wiretap/daintree-sna.c
@@ -171,6 +171,7 @@ daintree_sna_read_packet(FILE_T fh, wtap_rec *rec, Buffer *buf,
} while (readLine[0] == COMMENT_LINE);
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
if (sscanf(readLine, "%*s %18" G_GINT64_MODIFIER "u.%9d %9u %" READDATA_MAX_FIELD_SIZE "s",
diff --git a/wiretap/dbs-etherwatch.c b/wiretap/dbs-etherwatch.c
index 9d95ad9985..83ab8647cd 100644
--- a/wiretap/dbs-etherwatch.c
+++ b/wiretap/dbs-etherwatch.c
@@ -435,6 +435,7 @@ parse_dbs_etherwatch_packet(FILE_T fh, wtap_rec *rec, Buffer* buf,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
p = strstr(months, mon);
diff --git a/wiretap/dct3trace.c b/wiretap/dct3trace.c
index 242f47d53d..f361ca4b9c 100644
--- a/wiretap/dct3trace.c
+++ b/wiretap/dct3trace.c
@@ -250,6 +250,7 @@ static gboolean dct3trace_get_packet(FILE_T fh, wtap_rec *rec,
{
/* We've got a full packet! */
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = 0; /* no time stamp, no separate "on the wire" length */
rec->ts.secs = 0;
rec->ts.nsecs = 0;
diff --git a/wiretap/dpa400.c b/wiretap/dpa400.c
index 26fe935ba4..d348d4b691 100644
--- a/wiretap/dpa400.c
+++ b/wiretap/dpa400.c
@@ -106,6 +106,7 @@ static gboolean dpa400_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
get_ts(&hdr, &rec->ts);
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->rec_header.packet_header.caplen = rec->rec_header.packet_header.len = 0;
@@ -134,6 +135,7 @@ static gboolean dpa400_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
ctr++;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->rec_header.packet_header.caplen = rec->rec_header.packet_header.len = ctr;
@@ -171,6 +173,7 @@ static gboolean dpa400_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->rec_header.packet_header.caplen = rec->rec_header.packet_header.len = ctr;
@@ -181,6 +184,7 @@ static gboolean dpa400_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
get_ts_overflow(&rec->ts);
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->rec_header.packet_header.caplen = rec->rec_header.packet_header.len = ctr;
diff --git a/wiretap/erf.c b/wiretap/erf.c
index aedbafe094..b2d96d91db 100644
--- a/wiretap/erf.c
+++ b/wiretap/erf.c
@@ -716,6 +716,7 @@ static gboolean erf_read_header(wtap *wth, FILE_T fh,
/*if ((erf_header->type & 0x7f) != ERF_TYPE_META || wth->file_type_subtype != file_type_subtype_erf) {*/
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
/*
* XXX: ERF_TYPE_META records should ideally be FT_SPECIFIC for display
* purposes, but currently ft_specific_record_phdr clashes with erf_mc_phdr
@@ -733,6 +734,7 @@ static gboolean erf_read_header(wtap *wth, FILE_T fh,
*/
/* For now just treat all Provenance records as reports */
rec->rec_type = REC_TYPE_FT_SPECIFIC_REPORT;
+ rec->block = wtap_block_create(WTAP_BLOCK_FT_SPECIFIC_REPORT);
/* XXX: phdr ft_specific_record_phdr? */
}
#endif
@@ -2257,9 +2259,6 @@ static int erf_update_anchors_from_header(erf_t *erf_priv, wtap_rec *rec, union
}
if (comment) {
- /* Will be freed by either wtap_sequential_close (for rec = &wth->rec) or by
- * the caller of wtap_seek_read. See wtap_rec_cleanup. */
- rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
wtap_block_add_string_option(rec->block, OPT_COMMENT, comment, strlen(comment));
}
diff --git a/wiretap/eyesdn.c b/wiretap/eyesdn.c
index 94730fff12..3f2be31f7c 100644
--- a/wiretap/eyesdn.c
+++ b/wiretap/eyesdn.c
@@ -299,6 +299,7 @@ read_eyesdn_rec(FILE_T fh, wtap_rec *rec, Buffer *buf, int *err,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->ts.secs = secs;
rec->ts.nsecs = usecs * 1000;
diff --git a/wiretap/hcidump.c b/wiretap/hcidump.c
index a57a855b40..b11b91c9ac 100644
--- a/wiretap/hcidump.c
+++ b/wiretap/hcidump.c
@@ -47,6 +47,7 @@ static gboolean hcidump_read_packet(FILE_T fh, wtap_rec *rec,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->ts.secs = GUINT32_FROM_LE(dh.ts_sec);
rec->ts.nsecs = GUINT32_FROM_LE(dh.ts_usec) * 1000;
diff --git a/wiretap/i4btrace.c b/wiretap/i4btrace.c
index 3b95e5ff91..09251bd071 100644
--- a/wiretap/i4btrace.c
+++ b/wiretap/i4btrace.c
@@ -245,6 +245,7 @@ i4b_read_rec(wtap *wth, FILE_T fh, wtap_rec *rec, Buffer *buf,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->rec_header.packet_header.len = length;
diff --git a/wiretap/ipfix.c b/wiretap/ipfix.c
index 020e9895f4..15d8b1ad26 100644
--- a/wiretap/ipfix.c
+++ b/wiretap/ipfix.c
@@ -155,6 +155,7 @@ ipfix_read_message(FILE_T fh, wtap_rec *rec, Buffer *buf, int *err, gchar **err_
*/
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->rec_header.packet_header.len = msg_hdr.message_length;
rec->rec_header.packet_header.caplen = msg_hdr.message_length;
diff --git a/wiretap/iseries.c b/wiretap/iseries.c
index 96ca92b638..be1469a773 100644
--- a/wiretap/iseries.c
+++ b/wiretap/iseries.c
@@ -768,6 +768,7 @@ iseries_parse_packet (wtap * wth, FILE_T fh, wtap_rec *rec,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_CAP_LEN;
/*
diff --git a/wiretap/k12.c b/wiretap/k12.c
index 730ae5abc3..a667a98096 100644
--- a/wiretap/k12.c
+++ b/wiretap/k12.c
@@ -596,6 +596,7 @@ process_packet_data(wtap_rec *rec, Buffer *target, guint8 *buffer,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
ts = pntoh64(buffer + K12_PACKET_TIMESTAMP);
diff --git a/wiretap/k12text.l b/wiretap/k12text.l
index 257ce6fdd6..8133b93497 100644
--- a/wiretap/k12text.l
+++ b/wiretap/k12text.l
@@ -253,6 +253,7 @@ k12text_set_headers(wtap_rec *rec, k12text_state_t *state,
int *err, gchar **err_info)
{
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
rec->ts.secs = 946681200 + (3600*state->g_h) + (60*state->g_m) + state->g_s;
diff --git a/wiretap/lanalyzer.c b/wiretap/lanalyzer.c
index 4f74b77078..c9357c0f56 100644
--- a/wiretap/lanalyzer.c
+++ b/wiretap/lanalyzer.c
@@ -549,6 +549,7 @@ static gboolean lanalyzer_read_trace_record(wtap *wth, FILE_T fh,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
time_low = pletoh16(&descriptor[8]);
diff --git a/wiretap/libpcap.c b/wiretap/libpcap.c
index 204ffc0c2b..9099c143c3 100644
--- a/wiretap/libpcap.c
+++ b/wiretap/libpcap.c
@@ -897,6 +897,7 @@ libpcap_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
packet_size -= phdr_len;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
/* Update the timestamp, if not already done */
diff --git a/wiretap/log3gpp.c b/wiretap/log3gpp.c
index 893538afb6..96afbb6887 100644
--- a/wiretap/log3gpp.c
+++ b/wiretap/log3gpp.c
@@ -286,6 +286,7 @@ gboolean log3gpp_read(wtap* wth, wtap_rec* rec, Buffer* buf,
/* All packets go to 3GPP protocol stub dissector */
rec->rec_header.packet_header.pkt_encap = WTAP_ENCAP_LOG_3GPP;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
/* Set data_offset to the beginning of the line we're returning.
@@ -411,6 +412,7 @@ log3gpp_seek_read(wtap *wth, gint64 seek_off,
/* Make sure all packets go to log3gpp dissector */
rec->rec_header.packet_header.pkt_encap = WTAP_ENCAP_LOG_3GPP;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
/* Fill in timestamp (capture base + packet offset) */
diff --git a/wiretap/logcat.c b/wiretap/logcat.c
index 765fcc3b78..f4f8bef6d6 100644
--- a/wiretap/logcat.c
+++ b/wiretap/logcat.c
@@ -198,6 +198,7 @@ static gboolean logcat_read_packet(struct logcat_phdr *logcat, FILE_T fh,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->ts.secs = (time_t) GINT32_FROM_LE(log_entry->sec);
rec->ts.nsecs = GINT32_FROM_LE(log_entry->nsec);
diff --git a/wiretap/logcat_text.c b/wiretap/logcat_text.c
index 41359166eb..25f6907f1b 100644
--- a/wiretap/logcat_text.c
+++ b/wiretap/logcat_text.c
@@ -224,6 +224,7 @@ static gboolean logcat_text_read_packet(FILE_T fh, wtap_rec *rec,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->rec_header.packet_header.caplen = (guint32)strlen(cbuff);
rec->rec_header.packet_header.len = rec->rec_header.packet_header.caplen;
diff --git a/wiretap/mp2t.c b/wiretap/mp2t.c
index 352fa6b3ef..f9e7bbce4c 100644
--- a/wiretap/mp2t.c
+++ b/wiretap/mp2t.c
@@ -66,6 +66,7 @@ mp2t_read_packet(mp2t_filetype_t *mp2t, FILE_T fh, gint64 offset,
return FALSE;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
/* XXX - relative, not absolute, time stamps */
rec->presence_flags = WTAP_HAS_TS;
diff --git a/wiretap/mpeg.c b/wiretap/mpeg.c
index 7c35b1580a..fc60e66419 100644
--- a/wiretap/mpeg.c
+++ b/wiretap/mpeg.c
@@ -173,6 +173,7 @@ mpeg_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec, Buffer *buf,
return FALSE;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = 0; /* we may or may not have a time stamp */
if (!is_random) {
diff --git a/wiretap/mplog.c b/wiretap/mplog.c
index e66f365be3..e27400adf1 100644
--- a/wiretap/mplog.c
+++ b/wiretap/mplog.c
@@ -175,6 +175,7 @@ static gboolean mplog_read_packet(FILE_T fh, wtap_rec *rec,
start_p[3] = pkt_bytes & 0xFF;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->rec_header.packet_header.pkt_encap = WTAP_ENCAP_ISO14443;
rec->presence_flags = WTAP_HAS_TS | WTAP_HAS_CAP_LEN;
rec->ts.secs = (time_t)((pkt_ctr*10)/(1000*1000*1000));
diff --git a/wiretap/netmon.c b/wiretap/netmon.c
index cb4b6e399a..df3bf02c62 100644
--- a/wiretap/netmon.c
+++ b/wiretap/netmon.c
@@ -1077,6 +1077,7 @@ netmon_process_record(wtap *wth, FILE_T fh, wtap_rec *rec,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
/*
* If this is an ATM packet, the first
diff --git a/wiretap/netscaler.c b/wiretap/netscaler.c
index 1bd4b0adc7..5e92daef33 100644
--- a/wiretap/netscaler.c
+++ b/wiretap/netscaler.c
@@ -1128,6 +1128,7 @@ static gboolean nstrace_set_start_time(wtap *wth, int file_version, int *err,
return FALSE;\
}\
(rec)->rec_type = REC_TYPE_PACKET;\
+ (rec)->block = wtap_block_create(WTAP_BLOCK_PACKET);\
TIMEDEFV##ver((rec),fp,type);\
FULLPART##SIZEDEFV##ver((rec),type,ver);\
TRACE_V##ver##_REC_LEN_OFF((rec),v##ver##_##fullpart,type,pktrace##fullpart##_v##ver);\
@@ -1307,6 +1308,7 @@ static gboolean nstrace_read_v10(wtap *wth, wtap_rec *rec, Buffer *buf,
return FALSE;\
}\
(rec)->rec_type = REC_TYPE_PACKET;\
+ (rec)->block = wtap_block_create(WTAP_BLOCK_PACKET);\
TIMEDEFV##ver((rec),fp,type);\
FULLPART##SIZEDEFV##ver((rec),fp,ver);\
TRACE_V##ver##_REC_LEN_OFF((rec),enumprefix,type,structname);\
@@ -1507,6 +1509,7 @@ static gboolean nstrace_read_v20(wtap *wth, wtap_rec *rec, Buffer *buf,
return FALSE;\
}\
(rec)->rec_type = REC_TYPE_PACKET;\
+ (rec)->block = wtap_block_create(WTAP_BLOCK_PACKET);\
TIMEDEFV##ver((rec),fp,type);\
FULLPART##SIZEDEFV##ver((rec),fp,ver);\
TRACE_V##ver##_REC_LEN_OFF((rec),enumprefix,type,structname);\
@@ -1706,6 +1709,7 @@ static gboolean nstrace_read_v30(wtap *wth, wtap_rec *rec, Buffer *buf,
do {\
nspr_pktrace##fullpart##_v##ver##_t *type = (nspr_pktrace##fullpart##_v##ver##_t *) pd;\
(rec)->rec_type = REC_TYPE_PACKET;\
+ (rec)->block = wtap_block_create(WTAP_BLOCK_PACKET);\
TIMEDEFV##ver((rec),fp,type);\
FULLPART##SIZEDEFV##ver((rec),type,ver);\
TRACE_V##ver##_REC_LEN_OFF(rec,v##ver##_##fullpart,type,pktrace##fullpart##_v##ver);\
@@ -1800,6 +1804,7 @@ static gboolean nstrace_seek_read_v10(wtap *wth, gint64 seek_off,
do {\
nspr_##structname##_t *fp= (nspr_##structname##_t*)pd;\
(rec)->rec_type = REC_TYPE_PACKET;\
+ (rec)->block = wtap_block_create(WTAP_BLOCK_PACKET);\
TIMEDEFV##ver((rec),fp,type);\
FULLPART##SIZEDEFV##ver((rec),fp,ver);\
TRACE_V##ver##_REC_LEN_OFF((rec),enumprefix,type,structname);\
@@ -1924,6 +1929,7 @@ static gboolean nstrace_seek_read_v20(wtap *wth, gint64 seek_off,
do {\
nspr_##structname##_t *fp= (nspr_##structname##_t*)pd;\
(rec)->rec_type = REC_TYPE_PACKET;\
+ (rec)->block = wtap_block_create(WTAP_BLOCK_PACKET);\
TIMEDEFV##ver((rec),fp,type);\
SETETHOFFSET_##ver(rec);\
FULLPART##SIZEDEFV##ver((rec),fp,ver);\
diff --git a/wiretap/netscreen.c b/wiretap/netscreen.c
index 18fcf10f5f..de872cdb8b 100644
--- a/wiretap/netscreen.c
+++ b/wiretap/netscreen.c
@@ -265,6 +265,7 @@ parse_netscreen_packet(FILE_T fh, wtap_rec *rec, Buffer* buf,
gchar dststr[13];
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
/* Suppress compiler warnings */
memset(cap_int, 0, sizeof(cap_int));
diff --git a/wiretap/nettl.c b/wiretap/nettl.c
index 0e0d21a24c..e9b43a82aa 100644
--- a/wiretap/nettl.c
+++ b/wiretap/nettl.c
@@ -542,6 +542,7 @@ nettl_read_rec(wtap *wth, FILE_T fh, wtap_rec *rec, Buffer *buf,
return FALSE;
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
rec->rec_header.packet_header.len = length - padlen;
if (caplen < padlen) {
diff --git a/wiretap/nettrace_3gpp_32_423.c b/wiretap/nettrace_3gpp_32_423.c
index 2793620b91..a68a1611a4 100644
--- a/wiretap/nettrace_3gpp_32_423.c
+++ b/wiretap/nettrace_3gpp_32_423.c
@@ -256,6 +256,7 @@ nettrace_msg_to_packet(nettrace_3gpp_32_423_file_info_t *file_info, wtap_rec *re
prev_pos = curr_pos = input + CLEN(c_s_msg);
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = 0; /* start out assuming no special features */
rec->ts.secs = 0;
rec->ts.nsecs = 0;
diff --git a/wiretap/netxray.c b/wiretap/netxray.c
index e450d703d7..f62734420c 100644
--- a/wiretap/netxray.c
+++ b/wiretap/netxray.c
@@ -1621,6 +1621,7 @@ netxray_process_rec_header(wtap *wth, FILE_T fh, wtap_rec *rec,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
if (netxray->version_major == 0) {
rec->presence_flags = WTAP_HAS_TS;
t = (double)pletoh32(&hdr.old_hdr.timelo)
diff --git a/wiretap/observer.c b/wiretap/observer.c
index 91a80af93e..933df9223d 100644
--- a/wiretap/observer.c
+++ b/wiretap/observer.c
@@ -546,6 +546,7 @@ process_packet_header(wtap *wth, packet_entry_header *packet_header,
{
/* set the wiretap record metadata fields */
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
rec->rec_header.packet_header.pkt_encap = observer_to_wtap_encap(packet_header->network_type);
if(wth->file_encap == WTAP_ENCAP_FIBRE_CHANNEL_FC2_WITH_FRAME_DELIMS) {
diff --git a/wiretap/packetlogger.c b/wiretap/packetlogger.c
index 31506cba6a..54cdec3900 100644
--- a/wiretap/packetlogger.c
+++ b/wiretap/packetlogger.c
@@ -366,6 +366,7 @@ packetlogger_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec, Buffer *buf,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->rec_header.packet_header.len = pl_hdr.len - 8;
diff --git a/wiretap/pppdump.c b/wiretap/pppdump.c
index 7c72ccf74f..1ce6368fa0 100644
--- a/wiretap/pppdump.c
+++ b/wiretap/pppdump.c
@@ -320,6 +320,7 @@ pppdump_set_phdr(wtap_rec *rec, int num_bytes,
direction_enum direction)
{
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->rec_header.packet_header.len = num_bytes;
rec->rec_header.packet_header.caplen = num_bytes;
rec->rec_header.packet_header.pkt_encap = WTAP_ENCAP_PPP_WITH_PHDR;
diff --git a/wiretap/radcom.c b/wiretap/radcom.c
index 7f05100eb9..28e78c5c11 100644
--- a/wiretap/radcom.c
+++ b/wiretap/radcom.c
@@ -320,6 +320,7 @@ radcom_read_rec(wtap *wth, FILE_T fh, wtap_rec *rec, Buffer *buf,
*/
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
tm.tm_year = pletoh16(&hdr.date.year)-1900;
diff --git a/wiretap/snoop.c b/wiretap/snoop.c
index e5a9d966e0..ee0d43d7da 100644
--- a/wiretap/snoop.c
+++ b/wiretap/snoop.c
@@ -609,6 +609,7 @@ snoop_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
rec->ts.secs = g_ntohl(hdr.ts_sec);
rec->ts.nsecs = g_ntohl(hdr.ts_usec) * 1000;
diff --git a/wiretap/stanag4607.c b/wiretap/stanag4607.c
index db46c446fc..24f35a2862 100644
--- a/wiretap/stanag4607.c
+++ b/wiretap/stanag4607.c
@@ -67,6 +67,7 @@ static gboolean stanag4607_read_file(wtap *wth, FILE_T fh, wtap_rec *rec,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
/* The next 4 bytes are the packet length */
packet_size = pntoh32(&stanag_pkt_hdr[2]);
diff --git a/wiretap/systemd_journal.c b/wiretap/systemd_journal.c
index 557eedcfd7..98f51ccd59 100644
--- a/wiretap/systemd_journal.c
+++ b/wiretap/systemd_journal.c
@@ -230,6 +230,7 @@ systemd_journal_read_export_entry(FILE_T fh, wtap_rec *rec, Buffer *buf, int *er
}
rec->rec_type = REC_TYPE_SYSTEMD_JOURNAL_EXPORT;
+ rec->block = wtap_block_create(WTAP_BLOCK_SYSTEMD_JOURNAL_EXPORT);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
rec->rec_header.systemd_journal_export_header.record_len = (guint32) fld_end;
diff --git a/wiretap/toshiba.c b/wiretap/toshiba.c
index 912af6a803..19baf7e562 100644
--- a/wiretap/toshiba.c
+++ b/wiretap/toshiba.c
@@ -314,6 +314,7 @@ parse_toshiba_packet(FILE_T fh, wtap_rec *rec, Buffer *buf,
}
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
rec->ts.secs = hr * 3600 + min * 60 + sec;
rec->ts.nsecs = csec * 10000000;
diff --git a/wiretap/visual.c b/wiretap/visual.c
index 8b6035f54d..bc0ea26ad5 100644
--- a/wiretap/visual.c
+++ b/wiretap/visual.c
@@ -331,6 +331,7 @@ visual_read_packet(wtap *wth, FILE_T fh, wtap_rec *rec,
packet_size = pletoh16(&vpkt_hdr.incl_len);
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS|WTAP_HAS_CAP_LEN;
/* Set the packet time and length. */
diff --git a/wiretap/vms.c b/wiretap/vms.c
index 5887d0e0f3..600282e506 100644
--- a/wiretap/vms.c
+++ b/wiretap/vms.c
@@ -416,6 +416,7 @@ parse_vms_packet(FILE_T fh, wtap_rec *rec, Buffer *buf, int *err, gchar **err_in
tm.tm_isdst = -1;
rec->rec_type = REC_TYPE_PACKET;
+ rec->block = wtap_block_create(WTAP_BLOCK_PACKET);
rec->presence_flags = WTAP_HAS_TS;
rec->ts.secs = mktime(&tm);
rec->ts.nsecs = csec * 10000000;
diff --git a/wiretap/vwr.c b/wiretap/vwr.c
index 58201373eb..7ecf018150 100644
--- a/wiretap/vwr.c
+++ b/wiretap/vwr.c
@@ -1285,6 +1285,7 @@ static gboolean vwr_read_s1_W_rec(vwr_t *vwr, wtap_rec *record,
record->rec_header.packet_header.pkt_encap = WTAP_ENCAP_IXVERIWAVE;
record->rec_type = REC_TYPE_PACKET;
+ record->block = wtap_block_create(WTAP_BLOCK_PACKET);
record->presence_flags = WTAP_HAS_TS;
ws_buffer_assure_space(buf, record->rec_header.packet_header.caplen);
@@ -1700,6 +1701,7 @@ static gboolean vwr_read_s2_W_rec(vwr_t *vwr, wtap_rec *record,
record->ts.nsecs = (int)(s_usec * 1000);
record->rec_type = REC_TYPE_PACKET;
+ record->block = wtap_block_create(WTAP_BLOCK_PACKET);
record->presence_flags = WTAP_HAS_TS;
ws_buffer_assure_space(buf, record->rec_header.packet_header.caplen);
@@ -1880,6 +1882,7 @@ static gboolean vwr_read_s3_W_rec(vwr_t *vwr, wtap_rec *record,
record->ts.nsecs = (int)(s_usec * 1000);
record->rec_type = REC_TYPE_PACKET;
+ record->block = wtap_block_create(WTAP_BLOCK_PACKET);
record->presence_flags = WTAP_HAS_TS;
ws_buffer_assure_space(buf, record->rec_header.packet_header.caplen);
@@ -2212,6 +2215,7 @@ static gboolean vwr_read_s3_W_rec(vwr_t *vwr, wtap_rec *record,
record->ts.nsecs = (int)(s_usec * 1000);
record->rec_type = REC_TYPE_PACKET;
+ record->block = wtap_block_create(WTAP_BLOCK_PACKET);
record->presence_flags = WTAP_HAS_TS;
ws_buffer_assure_space(buf, record->rec_header.packet_header.caplen);
@@ -2721,6 +2725,7 @@ static gboolean vwr_read_rec_data_ethernet(vwr_t *vwr, wtap_rec *record,
record->ts.nsecs = (int)(s_usec * 1000);
record->rec_type = REC_TYPE_PACKET;
+ record->block = wtap_block_create(WTAP_BLOCK_PACKET);
record->presence_flags = WTAP_HAS_TS;
/*etap_hdr.vw_ip_length = (guint16)ip_len;*/
diff --git a/wiretap/wtap.c b/wiretap/wtap.c
index 5ec3286d4f..e18d797a2e 100644
--- a/wiretap/wtap.c
+++ b/wiretap/wtap.c
@@ -1542,6 +1542,13 @@ wtap_read(wtap *wth, wtap_rec *rec, Buffer *buf, int *err,
*/
if (*err == 0)
*err = file_error(wth->fh, err_info);
+ if (rec->block != NULL) {
+ /*
+ * Unreference any block created for this record.
+ */
+ wtap_block_unref(rec->block);
+ rec->block = NULL;
+ }
return FALSE; /* failure */
}
@@ -1697,8 +1704,16 @@ wtap_seek_read(wtap *wth, gint64 seek_off, wtap_rec *rec, Buffer *buf,
*err = 0;
*err_info = NULL;
- if (!wth->subtype_seek_read(wth, seek_off, rec, buf, err, err_info))
+ if (!wth->subtype_seek_read(wth, seek_off, rec, buf, err, err_info)) {
+ if (rec->block != NULL) {
+ /*
+ * Unreference any block created for this record.
+ */
+ wtap_block_unref(rec->block);
+ rec->block = NULL;
+ }
return FALSE;
+ }
/*
* Is this a packet record?