From 6817824c92872f99e69ed21e89f7f7a562491108 Mon Sep 17 00:00:00 2001 From: Victor Julien Date: Thu, 3 Mar 2011 18:35:04 +0100 Subject: [PATCH] Fix bloomfilter issue on big endian. --- src/util-bloomfilter-counting.c | 40 ++++++++++++++++++++++++++------- 1 file changed, 32 insertions(+), 8 deletions(-) diff --git a/src/util-bloomfilter-counting.c b/src/util-bloomfilter-counting.c index e7df3e5665..1b6127d523 100644 --- a/src/util-bloomfilter-counting.c +++ b/src/util-bloomfilter-counting.c @@ -184,9 +184,24 @@ int BloomFilterCountingTest(BloomFilterCounting *bf, void *data, uint16_t datale /* check each hash iteration */ for (iter = 0; iter < bf->hash_iterations; iter++) { hash = bf->Hash(data, datalen, iter, bf->array_size) * bf->type; - if (!(bf->array[hash])) { - hit = 0; - break; + if (bf->type == 1) { + uint8_t *u8 = (uint8_t *)&bf->array[hash]; + if ((*u8) == 0x00) { + hit = 0; + break; + } + } else if (bf->type == 2) { + uint16_t *u16 = (uint16_t *)&bf->array[hash]; + if ((*u16) == 0x0000) { + hit = 0; + break; + } + } else if (bf->type == 4) { + uint32_t *u32 = (uint32_t *)&bf->array[hash]; + if ((*u32) == 0x00000000) { + hit = 0; + break; + } } } @@ -309,25 +324,34 @@ end: static int BloomFilterCountingTestFull01 (void) { int result = 0; BloomFilterCounting *bf = BloomFilterCountingInit(32, 4, 4, BloomHash); - if (bf == NULL) + if (bf == NULL) { + printf("init failed: "); goto end; + } int r = BloomFilterCountingAdd(bf, "test", 4); - if (r != 0) + if (r != 0) { + printf("first add: "); goto end; + } r = BloomFilterCountingTest(bf, "test", 4); - if (r != 1) + if (r != 1) { + printf("2nd add: "); goto end; + } r = BloomFilterCountingRemove(bf, "test", 4); - if (r != 0) + if (r != 0) { + printf("3rd add: "); goto end; + } /* all is good! */ result = 1; end: - if (bf != NULL) BloomFilterCountingFree(bf); + if (bf != NULL) + BloomFilterCountingFree(bf); return result; }