}
SCReturnInt(TM_ECODE_FAILED);
}
- int rlen = SCNtohs(dr.rlen);
- int wlen = SCNtohs(dr.wlen);
+ uint16_t rlen = SCNtohs(dr.rlen);
+ uint16_t wlen = SCNtohs(dr.wlen);
+ if (rlen < sizeof(DagRecord)) {
+ SCLogError(SC_ERR_ERF_BAD_RLEN, "Bad ERF record, "
+ "record length less than size of header");
+ SCReturnInt(TM_ECODE_FAILED);
+ }
r = fread(GET_PKT_DATA(p), rlen - sizeof(DagRecord), 1, etv->erf);
if (r < 1) {
if (feof(etv->erf)) {
CASE_CODE (SC_WARN_ANOMALY_CONFIG);
CASE_CODE (SC_WARN_ALERT_CONFIG);
CASE_CODE (SC_WARN_REGISTRATION_FAILED);
+ CASE_CODE (SC_ERR_ERF_BAD_RLEN);
CASE_CODE (SC_ERR_MAX);
}