static uint32_t CopyCommandLine(uint8_t **dest, uint8_t *src, uint32_t length)
{
if (likely(length)) {
- uint8_t *where = FTPCalloc(length, sizeof(char));
+ if (unlikely(length == UINT32_MAX)) {
+ return 0;
+ }
+ uint8_t *where = FTPCalloc(length + 1, sizeof(char));
if (unlikely(where == NULL)) {
return 0;
}
memcpy(where, src, length);
/* Remove trailing newlines/carriage returns */
- if (isspace((unsigned char)where[length - 1])) {
- while(length && isspace((unsigned char)where[--length - 1]));
- where[length] = '\0';
+ while (length && isspace((unsigned char) where[length - 1])) {
+ length--;
}
+
+ where[length] = '\0';
*dest = where;
}
/* either 0 or actual */
void *local_data, const uint8_t flags)
{
FtpState *state = (FtpState *)ftp_state;
+ FTPTransaction *tx = NULL;
int retcode = 1;
FTPTransaction *tx;
tx->command_descriptor = &FtpCommands[FTP_COMMAND_MAX -1];
} else {
tx = FTPGetOldestTx(state);
+ state->curr_tx = tx;
}
- state->curr_tx = tx;
if (state->command == FTP_COMMAND_AUTH_TLS) {
if (input_len >= 4 && SCMemcmp("234 ", input, 4) == 0) {
AppLayerRequestProtocolTLSUpgrade(f);
} else {
cjs = json_object();
if (cjs) {
- json_object_set_new(cjs, "command",
- json_string(tx->command_descriptor->command_name_upper));
+ FTPString *response;
+ if (tx->command_descriptor->command == FTP_COMMAND_UNKNOWN) {
+ // alternatively, `command` could be left out of the object completely
+ json_object_set_new(cjs, "command", json_null());
+ } else {
+ json_object_set_new(cjs, "command", json_string(tx->command_descriptor->command_name_upper));
+ }
uint32_t min_length = tx->command_descriptor->command_length + 1; /* command + space */
- json_object_set_new(cjs, "command_data",
- tx->request_length >= min_length ?
+ if (tx->request_length > min_length) {
+ json_object_set_new(cjs, "command_data",
JsonAddStringN((const char *)tx->request + min_length,
- tx->request_length - min_length) :
- json_string(NULL));
+ tx->request_length - min_length));
+ } else {
+ json_object_set_new(cjs, "command_data", json_string(NULL));
+ }
if (!TAILQ_EMPTY(&tx->response_list)) {
json_t *js_resplist = json_array();
if (likely(js_resplist != NULL)) {