From d0865fd619454a9ac06b1c7d287dc438aff50bb0 Mon Sep 17 00:00:00 2001 From: Guy Harris Date: Sun, 4 Jun 2017 18:58:40 -0700 Subject: Allow bigger snapshot lengths for D-Bus captures. Use WTAP_MAX_PACKET_SIZE_STANDARD, set to 256KB, for everything except for D-Bus captures. Use WTAP_MAX_PACKET_SIZE_DBUS, set to 128MB, for them, because that's the largest possible D-Bus message size. See https://bugs.freedesktop.org/show_bug.cgi?id=100220 for an example of the problems caused by limiting the snapshot length to 256KB for D-Bus. Have a snapshot length of 0 in a capture_file structure mean "there is no snapshot length for the file"; we don't need the has_snap field in that case, a value of 0 mean "no, we don't have a snapshot length". In dumpcap, start out with a pipe buffer size of 2KB, and grow it as necessary. When checking for a too-big packet from a pipe, check against the appropriate maximum - 128MB for DLT_DBUS, 256KB for everything else. Change-Id: Ib2ce7a0cf37b971fbc0318024fd011e18add8b20 Reviewed-on: https://code.wireshark.org/review/21952 Petri-Dish: Guy Harris Tested-by: Petri Dish Buildbot Reviewed-by: Guy Harris --- wiretap/k12text.l | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'wiretap/k12text.l') diff --git a/wiretap/k12text.l b/wiretap/k12text.l index 8b7a1572be..8e8cdca171 100644 --- a/wiretap/k12text.l +++ b/wiretap/k12text.l @@ -145,7 +145,7 @@ typedef struct { #define SET_SECONDS(text) yyextra->g_s = (guint) strtoul(text,NULL,10) #define SET_MS(text) yyextra->g_ms = (guint) strtoul(text,NULL,10) #define SET_NS(text) yyextra->g_ns = (guint) strtoul(text,NULL,10) -#define ADD_BYTE(text) do {if (yyextra->ii >= WTAP_MAX_PACKET_SIZE) {KERROR("frame too large");} yyextra->bb[yyextra->ii++] = (guint8)strtoul(text,NULL,16); } while(0) +#define ADD_BYTE(text) do {if (yyextra->ii >= WTAP_MAX_PACKET_SIZE_STANDARD) {KERROR("frame too large");} yyextra->bb[yyextra->ii++] = (guint8)strtoul(text,NULL,16); } while(0) #define FINALIZE_FRAME() do { yyextra->ok_frame = TRUE; } while (0) /*~ #define ECHO*/ #define YY_USER_ACTION yyextra->file_bytes_read += yyleng; @@ -359,7 +359,7 @@ k12text_read(wtap *wth, int *err, char ** err_info, gint64 *data_offset) if ( file_seek(wth->fh, k12text->next_frame_offset, SEEK_SET, err) == -1) { return FALSE; } - state.bb = (guint8*)g_malloc(WTAP_MAX_PACKET_SIZE); + state.bb = (guint8*)g_malloc(WTAP_MAX_PACKET_SIZE_STANDARD); if (!k12text_run_scanner(&state, wth->fh, NEXT_FRAME, err, err_info)) { g_free(state.bb); @@ -400,7 +400,7 @@ k12text_seek_read(wtap *wth, gint64 seek_off, struct wtap_pkthdr *phdr, Buffer * if ( file_seek(wth->random_fh, seek_off, SEEK_SET, err) == -1) { return FALSE; } - state.bb = (guint8*)g_malloc(WTAP_MAX_PACKET_SIZE); + state.bb = (guint8*)g_malloc(WTAP_MAX_PACKET_SIZE_STANDARD); if (!k12text_run_scanner(&state, wth->random_fh, NEXT_FRAME, err, err_info)) { return FALSE; @@ -435,7 +435,7 @@ k12text_open(wtap *wth, int *err, gchar **err_info _U_) k12text_t *k12text; k12text_state_t state; - state.bb = (guint8*)g_malloc(WTAP_MAX_PACKET_SIZE); + state.bb = (guint8*)g_malloc(WTAP_MAX_PACKET_SIZE_STANDARD); if (!k12text_run_scanner(&state, wth->fh, MAGIC, err, err_info)) { g_free(state.bb); return WTAP_OPEN_ERROR; @@ -494,7 +494,7 @@ k12text_dump(wtap_dumper *wdh, const struct wtap_pkthdr *phdr, struct tm *tmp; /* Don't write anything bigger than we're willing to read. */ - if (phdr->caplen > WTAP_MAX_PACKET_SIZE) { + if (phdr->caplen > WTAP_MAX_PACKET_SIZE_STANDARD) { *err = WTAP_ERR_PACKET_TOO_LARGE; return FALSE; } -- cgit v1.2.3