Bug #130 » 0001-Bug-130-detect-nocase-was-not-recreating-the-BmCtx-w.patch
| src/detect-nocase.c | ||
|---|---|---|
|
DetectUricontentData *ud = NULL;
|
||
|
DetectContentData *cd = NULL;
|
||
|
DetectHttpClientBodyData *dhcb = NULL;
|
||
|
DetectHttpCookieData *dhcd = NULL;
|
||
|
switch (pm->type) {
|
||
|
case DETECT_URICONTENT:
|
||
|
ud = (DetectUricontentData *)pm->ctx;
|
||
| ... | ... | |
|
SCReturnInt(-1);
|
||
|
}
|
||
|
ud->flags |= DETECT_URICONTENT_NOCASE;
|
||
|
/* Recreate the context with nocase chars */
|
||
|
BoyerMooreCtxToNocase(ud->bm_ctx, ud->uricontent, ud->uricontent_len);
|
||
|
break;
|
||
|
case DETECT_CONTENT:
|
||
| ... | ... | |
|
SCReturnInt(-1);
|
||
|
}
|
||
|
cd->flags |= DETECT_CONTENT_NOCASE;
|
||
|
/* Recreate the context with nocase chars */
|
||
|
BoyerMooreCtxToNocase(cd->bm_ctx, cd->content, cd->content_len);
|
||
|
break;
|
||
|
case DETECT_AL_HTTP_CLIENT_BODY:
|
||
|
((DetectHttpClientBodyData *)(pm->ctx))->flags |= DETECT_AL_HTTP_CLIENT_BODY_NOCASE;
|
||
|
dhcb =(DetectHttpClientBodyData *) pm->ctx;
|
||
|
dhcb->flags |= DETECT_AL_HTTP_CLIENT_BODY_NOCASE;
|
||
|
/* Recreate the context with nocase chars */
|
||
|
BoyerMooreCtxToNocase(dhcb->bm_ctx, dhcb->content, dhcb->content_len);
|
||
|
break;
|
||
|
case DETECT_AL_HTTP_COOKIE:
|
||
|
((DetectHttpCookieData *)(pm->ctx))->flags |= DETECT_AL_HTTP_COOKIE_NOCASE;
|
||
|
dhcd = (DetectHttpCookieData *) pm->ctx;
|
||
|
dhcd->flags |= DETECT_AL_HTTP_COOKIE_NOCASE;
|
||
|
break;
|
||
|
/* should never happen */
|
||
|
default:
|
||
| src/util-spm-bm.c | ||
|---|---|---|
|
#include <string.h>
|
||
|
/**
|
||
|
* \brief Given a BmCtx structure, recreate the pre/suffixes for
|
||
|
* nocase
|
||
|
*
|
||
|
* \retval BmCtx pointer to the already created BmCtx (with BoyerMooreCtxInit())
|
||
|
* \param str pointer to the pattern string
|
||
|
* \param size length of the string
|
||
|
*/
|
||
|
void BoyerMooreCtxToNocase(BmCtx *bm_ctx, uint8_t *needle, uint32_t needle_len) {
|
||
|
/* Prepare bad chars with nocase chars */
|
||
|
PreBmBcNocase(needle, needle_len, bm_ctx->bmBc);
|
||
|
/* Prepare good Suffixes with nocase chars */
|
||
|
PreBmGsNocase(needle, needle_len, bm_ctx->bmGs);
|
||
|
}
|
||
|
/**
|
||
|
* \brief Setup a Booyer More context.
|
||
|
*
|
||
|
* \param str pointer to the pattern string
|
||
| src/util-spm-bm.h | ||
|---|---|---|
|
/** Prepare and return a Boyer Moore context */
|
||
|
BmCtx *BoyerMooreCtxInit(uint8_t *needle, uint32_t needle_len);
|
||
|
void BoyerMooreCtxToNocase(BmCtx *, uint8_t *, uint32_t);
|
||
|
inline void PreBmBc(const uint8_t *x, int32_t m, int32_t *bmBc);
|
||
|
inline void BoyerMooreSuffixes(const uint8_t *x, int32_t m, int32_t *suff);
|
||
|
inline void PreBmGs(const uint8_t *x, int32_t m, int32_t *bmGs);
|
||
| src/util-spm.c | ||
|---|---|---|
|
return 0;
|
||
|
}
|
||
|
/**
|
||
|
* \test issue 130 (@redmine) check to ensure that the
|
||
|
* problem is not the algorithm implementation
|
||
|
*/
|
||
|
int UtilSpmBoyerMooreSearchNocaseTestIssue130() {
|
||
|
uint8_t *needle = (uint8_t *)"WWW-Authenticate: ";
|
||
|
uint8_t *text = (uint8_t *)"Date: Mon, 23 Feb 2009 13:31:49 GMT"
|
||
|
"Server: Apache\r\n"
|
||
|
"Www-authenticate: Basic realm=\"Authentification user password\"\r\n"
|
||
|
"Vary: accept-language,accept-charset\r\n"
|
||
|
"Accept-ranges: bytes\r\n"
|
||
|
"Connection: close\r\n"
|
||
|
"Content-type: text/html; charset=iso-8859-1\r\n"
|
||
|
"Content-language: fr\r\n"
|
||
|
"Expires: Mon, 23 Feb 2009 13:31:49 GMT\r\n\r\n";
|
||
|
uint8_t *found = BoyerMooreNocaseWrapper(text, needle, 1);
|
||
|
//printf("found: %s\n", found);
|
||
|
if (found != NULL)
|
||
|
return 1;
|
||
|
else
|
||
|
return 0;
|
||
|
}
|
||
|
/* Generic tests that should not match */
|
||
|
int UtilSpmBasicSearchTest02() {
|
||
|
uint8_t *needle = (uint8_t *)"oPQRsT";
|
||
| ... | ... | |
|
UtRegisterTest("UtilSpmBoyerMooreSearchTest01", UtilSpmBoyerMooreSearchTest01, 1);
|
||
|
UtRegisterTest("UtilSpmBoyerMooreSearchNocaseTest01", UtilSpmBoyerMooreSearchNocaseTest01, 1);
|
||
|
UtRegisterTest("UtilSpmBoyerMooreSearchNocaseTestIssue130", UtilSpmBoyerMooreSearchNocaseTestIssue130, 1);
|
||
|
UtRegisterTest("UtilSpmBs2bmSearchTest02", UtilSpmBs2bmSearchTest02, 1);
|
||
|
UtRegisterTest("UtilSpmBs2bmSearchNocaseTest02", UtilSpmBs2bmSearchNocaseTest02, 1);
|
||
- « Previous
- 1
- 2
- Next »