ftp: mark LF found per line

Currently, there is no way to mark if LF was found and then the line was
truncated. It becomes difficult to spot in the callers whether the line
was truncated despite LF being found or not. So, label it clearly with a
variable.
pull/8994/head
Shivani Bhardwaj 2 years ago committed by Victor Julien
parent aee7838ce1
commit c229621be4

@ -391,6 +391,7 @@ static AppLayerResult FTPGetLineForDirection(
input->consumed = lf_idx - input->buf + 1;
line->len = input->consumed - o_consumed;
input->len -= line->len;
line->lf_found = true;
DEBUG_VALIDATE_BUG_ON((input->consumed + input->len) != input->orig_len);
line->buf = input->buf + o_consumed;
if (line->len >= ftp_max_line_len) {
@ -511,7 +512,7 @@ static AppLayerResult FTPParseRequest(Flow *f, void *ftp_state, AppLayerParserSt
}
FtpInput ftpi = { .buf = input, .len = input_len, .orig_len = input_len, .consumed = 0 };
FtpLineState line = { .buf = NULL, .len = 0, .delim_len = 0 };
FtpLineState line = { .buf = NULL, .len = 0, .delim_len = 0, .lf_found = false };
uint8_t direction = STREAM_TOSERVER;
AppLayerResult res;
@ -539,6 +540,9 @@ static AppLayerResult FTPParseRequest(Flow *f, void *ftp_state, AppLayerParserSt
tx->request_length = CopyCommandLine(&tx->request, &line);
tx->request_truncated = state->current_line_truncated_ts;
if (line.lf_found) {
state->current_line_truncated_ts = false;
}
if (tx->request_truncated) {
AppLayerDecoderEventsSetEventRaw(&tx->tx_data.events, FtpEventRequestCommandTooLong);
}
@ -701,7 +705,7 @@ static AppLayerResult FTPParseResponse(Flow *f, void *ftp_state, AppLayerParserS
SCReturnStruct(APP_LAYER_OK);
}
FtpInput ftpi = { .buf = input, .len = input_len, .orig_len = input_len, .consumed = 0 };
FtpLineState line = { .buf = NULL, .len = 0, .delim_len = 0 };
FtpLineState line = { .buf = NULL, .len = 0, .delim_len = 0, .lf_found = false };
FTPTransaction *lasttx = TAILQ_FIRST(&state->tx_list);
AppLayerResult res;
@ -782,6 +786,9 @@ static AppLayerResult FTPParseResponse(Flow *f, void *ftp_state, AppLayerParserS
AppLayerDecoderEventsSetEventRaw(
&tx->tx_data.events, FtpEventResponseCommandTooLong);
}
if (line.lf_found) {
state->current_line_truncated_tc = false;
}
TAILQ_INSERT_TAIL(&tx->response_list, response, next);
}
}

@ -105,6 +105,7 @@ typedef struct FtpLineState_ {
const uint8_t *buf;
uint32_t len;
uint8_t delim_len;
bool lf_found;
} FtpLineState;
typedef struct FTPString_ {

Loading…
Cancel
Save