Skip to content

Commit

Permalink
detect/bytejump: Change DoMatch signature to return bool
Browse files Browse the repository at this point in the history
Issue: 4624

Change the function signature of byte-jump's domatch from an int to a
bool to avoid ambiguity handling return values.
  • Loading branch information
jlucovsky authored and victorjulien committed Sep 29, 2023
1 parent 22ffdbb commit 27a6655
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 22 deletions.
22 changes: 11 additions & 11 deletions src/detect-bytejump.c
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,10 @@ static bool DetectBytejumpValidateNbytes(const DetectBytejumpData *data, int32_t
* \param m byte jump sigmatch
* \param payload ptr to the payload
* \param payload_len length of the payload
* \retval 1 match
* \retval 0 no match
* \retval true match
* \retval false no match
*/
int DetectBytejumpDoMatch(DetectEngineThreadCtx *det_ctx, const Signature *s,
bool DetectBytejumpDoMatch(DetectEngineThreadCtx *det_ctx, const Signature *s,
const SigMatchCtx *ctx, const uint8_t *payload, uint32_t payload_len, uint16_t flags,
int32_t nbytes, int32_t offset)
{
Expand All @@ -148,7 +148,7 @@ int DetectBytejumpDoMatch(DetectEngineThreadCtx *det_ctx, const Signature *s,
int extbytes;

if (payload_len == 0) {
SCReturnInt(0);
SCReturnBool(false);
}

/* Validate the number of bytes we are testing
Expand All @@ -161,7 +161,7 @@ int DetectBytejumpDoMatch(DetectEngineThreadCtx *det_ctx, const Signature *s,
SCLogDebug("Invalid byte_jump nbytes "
"seen in byte_jump - %d",
nbytes);
SCReturnInt(0);
SCReturnBool(false);
}
}

Expand All @@ -177,7 +177,7 @@ int DetectBytejumpDoMatch(DetectEngineThreadCtx *det_ctx, const Signature *s,

/* No match if there is no relative base */
if (ptr == NULL || len <= 0) {
SCReturnInt(0);
SCReturnBool(false);
}
}
else {
Expand All @@ -190,23 +190,23 @@ int DetectBytejumpDoMatch(DetectEngineThreadCtx *det_ctx, const Signature *s,
SCLogDebug("Data not within payload "
"pkt=%p, ptr=%p, len=%d, nbytes=%d",
payload, ptr, len, nbytes);
SCReturnInt(0);
SCReturnBool(false);
}

/* Extract the byte data */
if (flags & DETECT_BYTEJUMP_STRING) {
extbytes = ByteExtractStringUint64(&val, data->base, nbytes, (const char *)ptr);
if(extbytes <= 0) {
SCLogDebug("error extracting %d bytes of string data: %d", nbytes, extbytes);
SCReturnInt(0);
SCReturnBool(false);
}
}
else {
int endianness = (flags & DETECT_BYTEJUMP_LITTLE) ? BYTE_LITTLE_ENDIAN : BYTE_BIG_ENDIAN;
extbytes = ByteExtractUint64(&val, endianness, (uint16_t)nbytes, ptr);
if (extbytes != nbytes) {
SCLogDebug("error extracting %d bytes of numeric data: %d", nbytes, extbytes);
SCReturnInt(0);
SCReturnBool(false);
}
}

Expand Down Expand Up @@ -239,7 +239,7 @@ int DetectBytejumpDoMatch(DetectEngineThreadCtx *det_ctx, const Signature *s,
SCLogDebug("Jump location (%" PRIu64 ") is not within "
"payload (%" PRIu32 ")",
val, payload_len);
SCReturnInt(0);
SCReturnBool(false);
}

#ifdef DEBUG
Expand All @@ -252,7 +252,7 @@ int DetectBytejumpDoMatch(DetectEngineThreadCtx *det_ctx, const Signature *s,
/* Adjust the detection context to the jump location. */
det_ctx->buffer_offset = val;

SCReturnInt(1);
SCReturnBool(true);
}

static int DetectBytejumpMatch(DetectEngineThreadCtx *det_ctx,
Expand Down
12 changes: 3 additions & 9 deletions src/detect-bytejump.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,16 +68,10 @@ void DetectBytejumpRegister (void);
* \param p pointer to the current packet
* \param m pointer to the sigmatch that we will cast into DetectBytejumpData
*
* \retval -1 error
* \retval 0 no match
* \retval 1 match
*
* \todo The return seems backwards. We should return a non-zero error code.
* One of the error codes is "no match". As-is if someone accidentally
* does: if (DetectBytejumpMatch(...)) { match }, then they catch an
* error as a match.
* \retval false no match
* \retval true
*/
int DetectBytejumpDoMatch(DetectEngineThreadCtx *, const Signature *, const SigMatchCtx *,
bool DetectBytejumpDoMatch(DetectEngineThreadCtx *, const Signature *, const SigMatchCtx *,
const uint8_t *, uint32_t, uint16_t, int32_t, int32_t);

#endif /* __DETECT_BYTEJUMP_H__ */
Expand Down
4 changes: 2 additions & 2 deletions src/detect-engine-content-inspection.c
Original file line number Diff line number Diff line change
Expand Up @@ -534,8 +534,8 @@ uint8_t DetectEngineContentInspection(DetectEngineCtx *de_ctx, DetectEngineThrea
DETECT_BYTEJUMP_LITTLE: 0);
}

if (DetectBytejumpDoMatch(
det_ctx, s, smd->ctx, buffer, buffer_len, bjflags, nbytes, offset) != 1) {
if (!DetectBytejumpDoMatch(
det_ctx, s, smd->ctx, buffer, buffer_len, bjflags, nbytes, offset)) {
goto no_match;
}

Expand Down

0 comments on commit 27a6655

Please sign in to comment.