diff options
author | John Thacker <johnthacker@gmail.com> | 2023-01-16 21:33:13 -0500 |
---|---|---|
committer | John Thacker <johnthacker@gmail.com> | 2023-01-17 12:41:58 +0000 |
commit | 058400d8e05db036e51c8567da6841971a3d1ac5 (patch) | |
tree | b2ffb86160c68b1425dacc830f089c5c558a4946 /plugins/epan/ethercat | |
parent | 918c9c5d5c133b560a7710c8998a4d67ecd8bf79 (diff) |
ECATMB: Get filename with encoding when adding to column
When retrieving a string, don't just use tvb_memcpy, even if
expected to be ASCII (because it might have errors.)
This doesn't get truncated, even if all replacement characters,
because the eventual returned buffer is 200 octets long and the
max filename is 49.
Fix #18800
Diffstat (limited to 'plugins/epan/ethercat')
-rw-r--r-- | plugins/epan/ethercat/packet-ecatmb.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/plugins/epan/ethercat/packet-ecatmb.c b/plugins/epan/ethercat/packet-ecatmb.c index e17b2180f7..2a7aaab86c 100644 --- a/plugins/epan/ethercat/packet-ecatmb.c +++ b/plugins/epan/ethercat/packet-ecatmb.c @@ -361,8 +361,7 @@ static void CANopenSdoReqFormatter(PETHERCAT_SDO_HEADER pSdo, char *szText, gint static void FoeFormatter(tvbuff_t *tvb, gint offset, char *szText, gint nMax, guint foe_length) { ETHERCAT_FOE_HEADER foe; - char tmp[50]; - memset(tmp, 0, sizeof(tmp)); + char *tmp = NULL; init_foe_header(&foe, tvb, offset); @@ -371,18 +370,19 @@ static void FoeFormatter(tvbuff_t *tvb, gint offset, char *szText, gint nMax, gu case ECAT_FOE_OPMODE_RRQ: case ECAT_FOE_OPMODE_WRQ: case ECAT_FOE_OPMODE_ERR: - if ( foe_length > ETHERCAT_FOE_HEADER_LEN ) - tvb_memcpy(tvb, tmp, offset+ETHERCAT_FOE_HEADER_LEN, MIN(foe_length-ETHERCAT_FOE_HEADER_LEN, sizeof(tmp)-1)); + if ( foe_length > ETHERCAT_FOE_HEADER_LEN ) { + tmp = tvb_get_string_enc(wmem_packet_scope(), tvb, offset+ETHERCAT_FOE_HEADER_LEN, MIN(foe_length-ETHERCAT_FOE_HEADER_LEN, 49), ENC_ASCII); + } break; } switch ( foe.OpMode ) { case ECAT_FOE_OPMODE_RRQ: - snprintf ( szText, nMax, "FoE RRQ (%d) : '%s'", foe.aFoeHeaderDataUnion.FileLength, tmp); + snprintf ( szText, nMax, "FoE RRQ (%d) : '%s'", foe.aFoeHeaderDataUnion.FileLength, tmp ? tmp : ""); break; case ECAT_FOE_OPMODE_WRQ: - snprintf ( szText, nMax, "FoE WRQ (%d) : '%s'", foe.aFoeHeaderDataUnion.FileLength, tmp); + snprintf ( szText, nMax, "FoE WRQ (%d) : '%s'", foe.aFoeHeaderDataUnion.FileLength, tmp ? tmp : ""); break; case ECAT_FOE_OPMODE_DATA: snprintf ( szText, nMax, "FoE DATA (%d) : %d Bytes", foe.aFoeHeaderDataUnion.v.PacketNo, foe_length-ETHERCAT_FOE_HEADER_LEN); @@ -391,7 +391,7 @@ static void FoeFormatter(tvbuff_t *tvb, gint offset, char *szText, gint nMax, gu snprintf ( szText, nMax, "FoE ACK (%d)", foe.aFoeHeaderDataUnion.v.PacketNo); break; case ECAT_FOE_OPMODE_ERR: - snprintf ( szText, nMax, "FoE ERR (%d) : '%s'", foe.aFoeHeaderDataUnion.ErrorCode, tmp); + snprintf ( szText, nMax, "FoE ERR (%d) : '%s'", foe.aFoeHeaderDataUnion.ErrorCode, tmp ? tmp : ""); break; case ECAT_FOE_OPMODE_BUSY: if ( foe.aFoeHeaderDataUnion.v2.Entire > 0 ) |