detect/bytejump: Improve end-of-buffer handling

Issue: 4623

This commit addresses the issues reported in issue 4623 when the jump
value points at the last byte in the buffer.
pull/9714/head
Jeff Lucovsky 3 years ago committed by Victor Julien
parent ffd769d178
commit f363b99fd7

@ -166,24 +166,19 @@ bool DetectBytejumpDoMatch(DetectEngineThreadCtx *det_ctx, const Signature *s,
/* Calculate the ptr value for the bytejump and length remaining in
* the packet from that point.
*/
ptr = payload;
len = payload_len;
ptr = payload + offset;
len = payload_len - offset;
if (flags & DETECT_BYTEJUMP_RELATIVE) {
ptr += det_ctx->buffer_offset;
len -= det_ctx->buffer_offset;
ptr += offset;
len -= offset;
SCLogDebug("[relative] after: ptr %p [len %d]", ptr, len);
/* No match if there is no relative base */
if (ptr == NULL || len <= 0) {
if (ptr == NULL || (nbytes && len <= 0)) {
SCReturnBool(false);
}
}
else {
ptr += offset;
len -= offset;
}
/* Verify the to-be-extracted data is within the packet */
if (ptr < payload || nbytes > len) {
@ -243,7 +238,7 @@ bool DetectBytejumpDoMatch(DetectEngineThreadCtx *det_ctx, const Signature *s,
if (jumpptr < payload) {
jumpptr = payload;
SCLogDebug("jump location is before buffer start; resetting to buffer start");
} else if (jumpptr >= (payload + payload_len)) {
} else if (jumpptr > (payload + payload_len)) {
SCLogDebug("Jump location (%" PRIu64 ") is not within payload (%" PRIu32 ")",
payload_len + val, payload_len);
SCReturnBool(false);

Loading…
Cancel
Save