From 0fc900c0acb07320441e2265e6fcd89e80db28b3 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 11 Feb 2009 07:54:03 +0000 Subject: 2009-02-11 Tatsuhiro Tsujikawa Fixed the bug that adding 0 length filter to BitfieldMan filters 1 block. It should not filter anything. * src/BitfieldMan.cc * src/ConsoleStatCalc.cc * test/BitfieldManTest.cc --- src/BitfieldMan.cc | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) (limited to 'src/BitfieldMan.cc') diff --git a/src/BitfieldMan.cc b/src/BitfieldMan.cc index 7940bf25..7421b016 100644 --- a/src/BitfieldMan.cc +++ b/src/BitfieldMan.cc @@ -33,10 +33,12 @@ */ /* copyright --> */ #include "BitfieldMan.h" + +#include + #include "Randomizer.h" #include "Util.h" #include "array_fun.h" -#include namespace aria2 { @@ -609,10 +611,12 @@ void BitfieldMan::addFilter(uint64_t offset, uint64_t length) { filterBitfield = new unsigned char[bitfieldLength]; memset(filterBitfield, 0, bitfieldLength); } - size_t startBlock = offset/blockLength; - size_t endBlock = (offset+length-1)/blockLength; - for(size_t i = startBlock; i <= endBlock && i < blocks; i++) { - setFilterBit(i); + if(length > 0) { + size_t startBlock = offset/blockLength; + size_t endBlock = (offset+length-1)/blockLength; + for(size_t i = startBlock; i <= endBlock && i < blocks; i++) { + setFilterBit(i); + } } updateCache(); } -- cgit