]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
smtp: fix int warnings
authorPhilippe Antoine <contact@catenacyber.fr>
Mon, 6 Dec 2021 08:36:14 +0000 (09:36 +0100)
committerVictor Julien <vjulien@oisf.net>
Thu, 13 Jan 2022 07:58:11 +0000 (08:58 +0100)
and explicitly truncating filename's length

src/app-layer-smtp.c

index d0f946272caca8e4046b817516a21a45d429f698..3c652e1d17cfad2f31af6110b517c4d9101a6411 100644 (file)
@@ -457,9 +457,13 @@ int SMTPProcessDataChunk(const uint8_t *chunk, uint32_t len,
             SCLogDebug("StreamTcpReassemblySetMinInspectDepth STREAM_TOSERVER %"PRIu32, depth);
             StreamTcpReassemblySetMinInspectDepth(flow->protoctx, STREAM_TOSERVER, depth);
 
+            uint16_t flen = (uint16_t)entity->filename_len;
+            if (entity->filename_len > PATH_MAX) {
+                flen = PATH_MAX;
+                SMTPSetEvent(smtp_state, SMTP_DECODER_EVENT_MIME_LONG_FILENAME);
+            }
             if (FileOpenFileWithId(files, &smtp_config.sbcfg, smtp_state->file_track_id++,
-                        (uint8_t *) entity->filename, entity->filename_len,
-                        (uint8_t *) chunk, len, flags) != 0) {
+                        (uint8_t *)entity->filename, flen, (uint8_t *)chunk, len, flags) != 0) {
                 ret = MIME_DEC_ERR_DATA;
                 SCLogDebug("FileOpenFile() failed");
             }
@@ -1154,7 +1158,12 @@ static int SMTPParseCommandWithParam(SMTPState *state, uint8_t prefix_len, uint8
         return -1;
     memcpy(*target, state->current_line + i, spc_i - i);
     (*target)[spc_i - i] = '\0';
-    *target_len = spc_i - i;
+    if (spc_i - i > UINT16_MAX) {
+        *target_len = UINT16_MAX;
+        SMTPSetEvent(state, SMTP_DECODER_EVENT_MAX_COMMAND_LINE_LEN_EXCEEDED);
+    } else {
+        *target_len = (uint16_t)(spc_i - i);
+    }
 
     return 0;
 }
@@ -1215,6 +1224,9 @@ static int NoNewTx(SMTPState *state)
     return 0;
 }
 
+/* XXX have a better name */
+#define rawmsgname "rawmsg"
+
 static int SMTPProcessRequest(SMTPState *state, Flow *f,
                               AppLayerParserState *pstate)
 {
@@ -1255,7 +1267,6 @@ static int SMTPProcessRequest(SMTPState *state, Flow *f,
                    SCMemcmpLowercase("data", state->current_line, 4) == 0) {
             state->current_command = SMTP_COMMAND_DATA;
             if (smtp_config.raw_extraction) {
-                const char *msgname = "rawmsg"; /* XXX have a better name */
                 if (state->files_ts == NULL)
                     state->files_ts = FileContainerAlloc();
                 if (state->files_ts == NULL) {
@@ -1272,10 +1283,9 @@ static int SMTPProcessRequest(SMTPState *state, Flow *f,
                     TAILQ_INSERT_TAIL(&state->tx_list, tx, next);
                     tx->tx_id = state->tx_cnt++;
                 }
-                if (FileOpenFileWithId(state->files_ts, &smtp_config.sbcfg,
-                        state->file_track_id++,
-                        (uint8_t*) msgname, strlen(msgname), NULL, 0,
-                        FILE_NOMD5|FILE_NOMAGIC|FILE_USE_DETECT) == 0) {
+                if (FileOpenFileWithId(state->files_ts, &smtp_config.sbcfg, state->file_track_id++,
+                            (uint8_t *)rawmsgname, strlen(rawmsgname), NULL, 0,
+                            FILE_NOMD5 | FILE_NOMAGIC | FILE_USE_DETECT) == 0) {
                     SMTPNewFile(state->curr_tx, state->files_ts->tail);
                 }
             } else if (smtp_config.decode_mime) {
@@ -1378,7 +1388,7 @@ static int SMTPProcessRequest(SMTPState *state, Flow *f,
     }
 }
 
-static AppLayerResult SMTPParse(int direction, Flow *f, SMTPState *state,
+static AppLayerResult SMTPParse(uint8_t direction, Flow *f, SMTPState *state,
         AppLayerParserState *pstate, StreamSlice stream_slice, SMTPThreadCtx *thread_data)
 {
     SCEnter();