Skip to content

Commit 1251894

Browse files
committed
Update
1 parent 3ff1817 commit 1251894

3 files changed

Lines changed: 38 additions & 8 deletions

File tree

include/binaryfusefilter.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -762,7 +762,7 @@ static inline void binary_fuse16_serialize(const binary_fuse16_t *filter, char *
762762
buffer += sizeof(filter->SegmentCountLength);
763763
memcpy(buffer, &filter->ArrayLength, sizeof(filter->ArrayLength));
764764
buffer += sizeof(filter->ArrayLength);
765-
memcpy(buffer, filter->Fingerprints, sizeof(filter->ArrayLength) * sizeof(uint16_t));
765+
memcpy(buffer, filter->Fingerprints, filter->ArrayLength * sizeof(uint16_t));
766766
}
767767

768768
// serialize a filter to a buffer, the buffer should have a capacity of at least
@@ -779,7 +779,7 @@ static inline void binary_fuse8_serialize(const binary_fuse8_t *filter, char *bu
779779
buffer += sizeof(filter->SegmentCountLength);
780780
memcpy(buffer, &filter->ArrayLength, sizeof(filter->ArrayLength));
781781
buffer += sizeof(filter->ArrayLength);
782-
memcpy(buffer, filter->Fingerprints, sizeof(filter->ArrayLength) * sizeof(uint8_t));
782+
memcpy(buffer, filter->Fingerprints, filter->ArrayLength * sizeof(uint8_t));
783783
}
784784

785785
// deserialize a filter from a buffer, returns true on success, false on failure.
@@ -803,7 +803,7 @@ static inline bool binary_fuse16_deserialize(binary_fuse16_t * filter, const cha
803803
if(filter->Fingerprints == NULL) {
804804
return false;
805805
}
806-
memcpy(filter->Fingerprints, buffer, sizeof(filter->ArrayLength) * sizeof(uint16_t));
806+
memcpy(filter->Fingerprints, buffer, filter->ArrayLength * sizeof(uint16_t));
807807
return true;
808808
}
809809

@@ -829,7 +829,7 @@ static inline bool binary_fuse8_deserialize(binary_fuse8_t * filter, const char
829829
if(filter->Fingerprints == NULL) {
830830
return false;
831831
}
832-
memcpy(filter->Fingerprints, buffer, sizeof(filter->ArrayLength) * sizeof(uint8_t));
832+
memcpy(filter->Fingerprints, buffer, filter->ArrayLength * sizeof(uint8_t));
833833
return true;
834834
}
835835

include/xorfilter.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1297,7 +1297,7 @@ static inline void xor16_serialize(const xor16_t *filter, char *buffer) {
12971297
buffer += sizeof(filter->seed);
12981298
memcpy(buffer, &filter->blockLength, sizeof(filter->blockLength));
12991299
buffer += sizeof(filter->blockLength);
1300-
memcpy(buffer, filter->fingerprints, sizeof(filter->blockLength) * 3 * sizeof(uint16_t));
1300+
memcpy(buffer, filter->fingerprints, filter->blockLength * 3 * sizeof(uint16_t));
13011301
}
13021302

13031303
// serialize a filter to a buffer, the buffer should have a capacity of at least
@@ -1308,7 +1308,7 @@ static inline void xor8_serialize(const xor8_t *filter, char *buffer) {
13081308
buffer += sizeof(filter->seed);
13091309
memcpy(buffer, &filter->blockLength, sizeof(filter->blockLength));
13101310
buffer += sizeof(filter->blockLength);
1311-
memcpy(buffer, filter->fingerprints, sizeof(filter->blockLength) * 3 * sizeof(uint8_t));
1311+
memcpy(buffer, filter->fingerprints, filter->blockLength * 3 * sizeof(uint8_t));
13121312
}
13131313

13141314
// deserialize a filter from a buffer, returns true on success, false on failure.
@@ -1325,7 +1325,7 @@ static inline bool xor16_deserialize(xor16_t * filter, const char *buffer) {
13251325
if(filter->fingerprints == NULL) {
13261326
return false;
13271327
}
1328-
memcpy(filter->fingerprints, buffer, sizeof(filter->blockLength) * 3 * sizeof(uint16_t));
1328+
memcpy(filter->fingerprints, buffer, filter->blockLength * 3 * sizeof(uint16_t));
13291329
return true;
13301330
}
13311331

@@ -1344,7 +1344,7 @@ static inline bool xor8_deserialize(xor8_t * filter, const char *buffer) {
13441344
if(filter->fingerprints == NULL) {
13451345
return false;
13461346
}
1347-
memcpy(filter->fingerprints, buffer, sizeof(filter->blockLength) * 3 * sizeof(uint8_t));
1347+
memcpy(filter->fingerprints, buffer, filter->blockLength * 3 * sizeof(uint8_t));
13481348
return true;
13491349
}
13501350

tests/unit.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,12 @@ bool testxor8(size_t size) {
6969
xor8_free(&filter);
7070
xor8_deserialize(&filter, buffer);
7171
free(buffer);
72+
for (size_t i = 0; i < size; i++) {
73+
if (!xor8_contain(big_set[i], &filter)) {
74+
printf("bug!\n");
75+
return false;
76+
}
77+
}
7278

7379
size_t random_matches = 0;
7480
size_t trials = 10000000;
@@ -115,6 +121,12 @@ bool testxor16(size_t size) {
115121
xor16_free(&filter);
116122
xor16_deserialize(&filter, buffer);
117123
free(buffer);
124+
for (size_t i = 0; i < size; i++) {
125+
if (!xor16_contain(big_set[i], &filter)) {
126+
printf("bug!\n");
127+
return false;
128+
}
129+
}
118130

119131
size_t random_matches = 0;
120132
size_t trials = 10000000;
@@ -162,6 +174,12 @@ bool testbufferedxor16(size_t size) {
162174
xor16_free(&filter);
163175
xor16_deserialize(&filter, buffer);
164176
free(buffer);
177+
for (size_t i = 0; i < size; i++) {
178+
if (!xor16_contain(big_set[i], &filter)) {
179+
printf("bug!\n");
180+
return false;
181+
}
182+
}
165183

166184
size_t random_matches = 0;
167185
size_t trials = 10000000;
@@ -208,6 +226,12 @@ bool testbinaryfuse8(size_t size) {
208226
binary_fuse8_free(&filter);
209227
binary_fuse8_deserialize(&filter, buffer);
210228
free(buffer);
229+
for (size_t i = 0; i < size; i++) {
230+
if (!binary_fuse8_contain(big_set[i], &filter)) {
231+
printf("bug!\n");
232+
return false;
233+
}
234+
}
211235

212236
size_t random_matches = 0;
213237
size_t trials = 10000000;
@@ -256,6 +280,12 @@ bool testbinaryfuse16(size_t size) {
256280
binary_fuse16_free(&filter);
257281
binary_fuse16_deserialize(&filter, buffer);
258282
free(buffer);
283+
for (size_t i = 0; i < size; i++) {
284+
if (!binary_fuse16_contain(big_set[i], &filter)) {
285+
printf("bug!\n");
286+
return false;
287+
}
288+
}
259289

260290
size_t random_matches = 0;
261291
size_t trials = 10000000;

0 commit comments

Comments
 (0)