Update all non-HTTP protocol parsers to accept a NULL+EOF input.
int hdrretval = 0;
SCEnter();
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
DCERPCUDPState *sstate = (DCERPCUDPState *) dcerpc_state;
while (sstate->bytesprocessed < DCERPC_UDP_HDR_LEN && input_len) {
hdrretval = DCERPCUDPParseHeader(f, dcerpc_state, pstate, input,
int32_t retval = 0;
DCERPCState *sstate = (DCERPCState *) dcerpc_state;
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
if (sstate->dcerpc.bytesprocessed != 0 && sstate->data_needed_for_dir != dir) {
SCReturnInt(-1);
}
DNSState *dns_state = (DNSState *)dstate;
SCLogDebug("starting %u", input_len);
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
/** \todo remove this when PP is fixed to enforce ipproto */
if (f != NULL && f->proto != IPPROTO_TCP)
SCReturnInt(-1);
/* probably a rst/fin sending an eof */
- if (input_len == 0) {
+ if (input == NULL || input_len == 0) {
goto insufficient_data;
}
{
DNSState *dns_state = (DNSState *)dstate;
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
/** \todo remove this when PP is fixed to enforce ipproto */
if (f != NULL && f->proto != IPPROTO_TCP)
SCReturnInt(-1);
SCLogDebug("starting %u", input_len);
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
/** \todo remove this when PP is fixed to enforce ipproto */
if (f != NULL && f->proto != IPPROTO_UDP)
SCReturnInt(-1);
- if (input_len == 0 || input_len < sizeof(DNSHeader)) {
+ if (input == NULL || input_len == 0 || input_len < sizeof(DNSHeader)) {
SCLogDebug("ilen too small, hoped for at least %"PRIuMAX, (uintmax_t)sizeof(DNSHeader));
goto insufficient_data;
}
SCLogDebug("starting %u", input_len);
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
/** \todo remove this when PP is fixed to enforce ipproto */
if (f != NULL && f->proto != IPPROTO_UDP)
SCReturnInt(-1);
- if (input_len == 0 || input_len < sizeof(DNSHeader)) {
+ if (input == NULL || input_len == 0 || input_len < sizeof(DNSHeader)) {
SCLogDebug("ilen too small, hoped for at least %"PRIuMAX, (uintmax_t)sizeof(DNSHeader));
goto insufficient_data;
}
FtpState *state = (FtpState *)ftp_state;
void *ptmp;
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
state->input = input;
state->input_len = input_len;
/* toserver stream */
ModbusTransaction *tx;
ModbusHeader header;
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
while (input_len > 0) {
uint32_t adu_len = input_len;
uint8_t *adu = input;
ModbusState *modbus = (ModbusState *) state;
ModbusTransaction *tx;
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
while (input_len > 0) {
uint32_t adu_len = input_len;
uint8_t *adu = input;
SCReturnInt(0);
}
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
if (sstate->bytesprocessed != 0 && sstate->data_needed_for_dir != dir) {
SCReturnInt(-1);
}
if (pstate == NULL)
return -1;
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
while (sstate->bytesprocessed < NBSS_HDR_LEN && input_len) {
retval = NBSSParseHeader(smb2_state, pstate, input, input_len);
if (retval <= input_len) {
{
SCEnter();
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
state->input = input;
state->input_len = input_len;
state->direction = direction;
SshState *ssh_state = (SshState *)state;
SshHeader *ssh_header = &ssh_state->cli_hdr;
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
int r = SSHParseData(ssh_state, ssh_header, input, input_len);
if (ssh_state->cli_hdr.flags & SSH_FLAG_PARSER_DONE &&
SshState *ssh_state = (SshState *)state;
SshHeader *ssh_header = &ssh_state->srv_hdr;
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
int r = SSHParseData(ssh_state, ssh_header, input, input_len);
if (ssh_state->cli_hdr.flags & SSH_FLAG_PARSER_DONE &&
ssl_state->f = f;
+ if (input == NULL && AppLayerParserStateIssetFlag(pstate, APP_LAYER_PARSER_EOF)) {
+ SCReturnInt(1);
+ }
+
if (direction == 0)
ssl_state->curr_connp = &ssl_state->client_connp;
else