aboutsummaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorJohn Thacker <johnthacker@gmail.com>2023-01-16 21:33:13 -0500
committerJohn Thacker <johnthacker@gmail.com>2023-01-17 12:41:58 +0000
commit058400d8e05db036e51c8567da6841971a3d1ac5 (patch)
treeb2ffb86160c68b1425dacc830f089c5c558a4946 /plugins
parent918c9c5d5c133b560a7710c8998a4d67ecd8bf79 (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')
-rw-r--r--plugins/epan/ethercat/packet-ecatmb.c14
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 )