Author: toad
Date: 2008-08-26 21:12:19 +0000 (Tue, 26 Aug 2008)
New Revision: 22181

Modified:
   branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java
Log:
FIX MAJOR BUG IN COUNTING BLOOM FILTER:
/ 4 not / 8 * 2.
setBit(1000) was effectively also doing setBit(1008).
PORT TO SALTED HASH STORE BRANCH ASAP!


Modified: branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java  
2008-08-26 18:14:28 UTC (rev 22180)
+++ branches/db4o/freenet/src/freenet/support/CountingBloomFilter.java  
2008-08-26 21:12:19 UTC (rev 22181)
@@ -46,21 +46,21 @@

        public CountingBloomFilter(int length, int k, byte[] buffer) {
                super(length, k);
-               assert(buffer.length == length / 8 * 2);
+               assert(buffer.length == length / 4);
                filter = ByteBuffer.wrap(buffer);
        }

        @Override
-       protected boolean getBit(int offset) {
-               byte b = filter.get(offset / 8 * 2);
+       public boolean getBit(int offset) {
+               byte b = filter.get(offset / 4);
                byte v = (byte) ((b >>> offset % 4 * 2) & 3);

                return v != 0;
        }

        @Override
-       protected void setBit(int offset) {
-               byte b = filter.get(offset / 8 * 2);
+       public void setBit(int offset) {
+               byte b = filter.get(offset / 4);
                byte v = (byte) ((b >>> offset % 4 * 2) & 3);

                if (v == 3)
@@ -73,8 +73,8 @@
        }

        @Override
-       protected void unsetBit(int offset) {
-               byte b = filter.get(offset / 8 * 2);
+       public void unsetBit(int offset) {
+               byte b = filter.get(offset / 4);
                byte v = (byte) ((b >>> offset % 4 * 2) & 3);

                if (v == 0 || v == 3)


Reply via email to