Author: toad
Date: 2008-04-12 15:18:49 +0000 (Sat, 12 Apr 2008)
New Revision: 19240
Modified:
trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
We didn't actually verify that the key is the key we expected in fetch()!
For CHKs, this could result in CHKStore.fetch() returning a completely bogus
key.
Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-12
15:16:09 UTC (rev 19239)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-12
15:18:49 UTC (rev 19240)
@@ -1066,6 +1066,20 @@
block = callback.construct(data, header,
routingkey, fullKey);
+ if(!Arrays.equals(block.getRoutingKey(),
routingkey)) {
+ Logger.normal(this, "Does not verify
(not the unexpected key), setting accessTime to 0 for :
"+HexUtil.bytesToHex(routingkey));
+ keysDB.delete(t, routingkeyDBE);
+ c.close();
+ c = null;
+ t.commit();
+ t = null;
+ addFreeBlock(storeBlock.offset, true,
"Key does not verify");
+ synchronized(this) {
+ misses++;
+ }
+ return null;
+ }
+
if(!dontPromote) {
storeBlock.updateRecentlyUsed();
DatabaseEntry updateDBE = new
DatabaseEntry();