From defce022b42736efb3680c58d3a6bb16cdc128ad Mon Sep 17 00:00:00 2001 From: Philippe Antoine Date: Mon, 6 Dec 2021 09:11:09 +0100 Subject: [PATCH] ftp: fix int warnings Explicitly truncate a file name if it is longer than UINT16_MAX --- src/app-layer-ftp.c | 11 +++++++---- src/app-layer-ftp.h | 2 +- src/util-mpm.c | 2 +- src/util-mpm.h | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/app-layer-ftp.c b/src/app-layer-ftp.c index 2cb03025a5..8b98592931 100644 --- a/src/app-layer-ftp.c +++ b/src/app-layer-ftp.c @@ -640,14 +640,17 @@ static AppLayerResult FTPParseRequest(Flow *f, void *ftp_state, AppLayerParserSt * Min size has been checked in FTPParseRequestCommand * PATH_MAX includes the null */ - int file_name_len = MIN(PATH_MAX - 1, state->current_line_len - 5); + uint32_t file_name_len = MIN(PATH_MAX - 1, state->current_line_len - 5); +#if PATH_MAX > UINT16_MAX +#error PATH_MAX is greater than UINT16_MAX +#endif data->file_name = FTPCalloc(file_name_len + 1, sizeof(char)); if (data->file_name == NULL) { FtpTransferCmdFree(data); SCReturnStruct(APP_LAYER_ERROR); } data->file_name[file_name_len] = 0; - data->file_len = file_name_len; + data->file_len = (uint16_t)file_name_len; memcpy(data->file_name, state->current_line + 5, file_name_len); data->cmd = state->command; data->flow_id = FlowGetId(f); @@ -1027,7 +1030,7 @@ static StreamingBufferConfig sbcfg = STREAMING_BUFFER_CONFIG_INITIALIZER; * \retval 1 when the command is parsed, 0 otherwise */ static AppLayerResult FTPDataParse(Flow *f, FtpDataState *ftpdata_state, - AppLayerParserState *pstate, StreamSlice stream_slice, void *local_data, int direction) + AppLayerParserState *pstate, StreamSlice stream_slice, void *local_data, uint8_t direction) { const uint8_t *input = StreamSliceGetData(&stream_slice); uint32_t input_len = StreamSliceGetDataLen(&stream_slice); @@ -1354,7 +1357,7 @@ uint16_t JsonGetNextLineFromBuffer(const char *buffer, const uint16_t len) } char *c = strchr(buffer, '\n'); - return c == NULL ? len : c - buffer + 1; + return c == NULL ? len : (uint16_t)(c - buffer + 1); } void EveFTPDataAddMetadata(const Flow *f, JsonBuilder *jb) diff --git a/src/app-layer-ftp.h b/src/app-layer-ftp.h index aaf09f6a11..7232268055 100644 --- a/src/app-layer-ftp.h +++ b/src/app-layer-ftp.h @@ -127,7 +127,7 @@ typedef struct FtpLineState_ { typedef struct FTPString_ { uint8_t *str; - uint16_t len; + uint32_t len; TAILQ_ENTRY(FTPString_) next; } FTPString; diff --git a/src/util-mpm.c b/src/util-mpm.c index f16a940f9e..851df27c49 100644 --- a/src/util-mpm.c +++ b/src/util-mpm.c @@ -46,7 +46,7 @@ #endif MpmTableElmt mpm_table[MPM_TABLE_SIZE]; -int mpm_default_matcher; +uint16_t mpm_default_matcher; /** * \brief Register a new Mpm Context. diff --git a/src/util-mpm.h b/src/util-mpm.h index ae5e228c94..e6669f614e 100644 --- a/src/util-mpm.h +++ b/src/util-mpm.h @@ -170,7 +170,7 @@ typedef struct MpmTableElmt_ { } MpmTableElmt; extern MpmTableElmt mpm_table[MPM_TABLE_SIZE]; -extern int mpm_default_matcher; +extern uint16_t mpm_default_matcher; struct DetectEngineCtx_; -- 2.47.2