From 86ea7f24742228de26f9b4bd16ce29264cc93070 Mon Sep 17 00:00:00 2001 From: Philippe Antoine Date: Wed, 8 Dec 2021 21:14:54 +0100 Subject: [PATCH] file: define own variable instead of PATH_MAX to be used for maximum size of file names, and not depend on the OS --- src/app-layer-ftp.c | 8 ++++---- src/app-layer-htp.c | 8 ++++---- src/app-layer-smtp.c | 4 ++-- src/util-file.h | 3 +++ 4 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/app-layer-ftp.c b/src/app-layer-ftp.c index 8b98592931..654d4654a6 100644 --- a/src/app-layer-ftp.c +++ b/src/app-layer-ftp.c @@ -638,11 +638,11 @@ static AppLayerResult FTPParseRequest(Flow *f, void *ftp_state, AppLayerParserSt data->DFree = FtpTransferCmdFree; /* * Min size has been checked in FTPParseRequestCommand - * PATH_MAX includes the null + * SC_FILENAME_MAX includes the null */ - 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 + uint32_t file_name_len = MIN(SC_FILENAME_MAX - 1, state->current_line_len - 5); +#if SC_FILENAME_MAX > UINT16_MAX +#error SC_FILENAME_MAX is greater than UINT16_MAX #endif data->file_name = FTPCalloc(file_name_len + 1, sizeof(char)); if (data->file_name == NULL) { diff --git a/src/app-layer-htp.c b/src/app-layer-htp.c index 0d19166260..af954b04f7 100644 --- a/src/app-layer-htp.c +++ b/src/app-layer-htp.c @@ -1630,9 +1630,9 @@ static int HtpRequestBodyHandlePOSTorPUT(HtpState *hstate, HtpTxUserData *htud, } if (filename != NULL) { - if (filename_len > PATH_MAX) { + if (filename_len > SC_FILENAME_MAX) { // explicitly truncate the file name if too long - filename_len = PATH_MAX; + filename_len = SC_FILENAME_MAX; HTPSetEvent(hstate, htud, STREAM_TOSERVER, HTTP_DECODER_EVENT_FILE_NAME_TOO_LONG); } result = HTPFileOpen(hstate, htud, filename, (uint16_t)filename_len, data, data_len, @@ -1708,9 +1708,9 @@ static int HtpResponseBodyHandle(HtpState *hstate, HtpTxUserData *htud, if (filename != NULL) { // set range if present htp_header_t *h_content_range = htp_table_get_c(tx->response_headers, "content-range"); - if (filename_len > PATH_MAX) { + if (filename_len > SC_FILENAME_MAX) { // explicitly truncate the file name if too long - filename_len = PATH_MAX; + filename_len = SC_FILENAME_MAX; HTPSetEvent(hstate, htud, STREAM_TOSERVER, HTTP_DECODER_EVENT_FILE_NAME_TOO_LONG); } if (h_content_range != NULL) { diff --git a/src/app-layer-smtp.c b/src/app-layer-smtp.c index 3c652e1d17..175ad6ac6b 100644 --- a/src/app-layer-smtp.c +++ b/src/app-layer-smtp.c @@ -458,8 +458,8 @@ int SMTPProcessDataChunk(const uint8_t *chunk, uint32_t len, StreamTcpReassemblySetMinInspectDepth(flow->protoctx, STREAM_TOSERVER, depth); uint16_t flen = (uint16_t)entity->filename_len; - if (entity->filename_len > PATH_MAX) { - flen = PATH_MAX; + if (entity->filename_len > SC_FILENAME_MAX) { + flen = SC_FILENAME_MAX; SMTPSetEvent(smtp_state, SMTP_DECODER_EVENT_MIME_LONG_FILENAME); } if (FileOpenFileWithId(files, &smtp_config.sbcfg, smtp_state->file_track_id++, diff --git a/src/util-file.h b/src/util-file.h index 940a53046e..7d81f6d873 100644 --- a/src/util-file.h +++ b/src/util-file.h @@ -58,6 +58,9 @@ typedef struct SCMd5 SCMd5; #define FILE_USE_DETECT BIT_U16(13) /**< use content_inspected tracker */ #define FILE_HAS_GAPS BIT_U16(15) +// to be used instead of PATH_MAX which depends on the OS +#define SC_FILENAME_MAX 4096 + typedef enum FileState_ { FILE_STATE_NONE = 0, /**< no state */ FILE_STATE_OPENED, /**< flow file is opened */