[Mono-list] MonoTorrent error + fix
Will Murnane
will.murnane at gmail.com
Tue Jan 16 05:15:58 EST 2007
I'm writing a BitTorrent client using the bitsharp library, and I
encountered an error with a torrent that has total file size > 4GB.
The problem occurs on line 124 of PieceMessage.cs:
long pieceOffset = this.startOffset + this.PieceIndex *
this.fileManager.PieceLength;
this.PieceIndex and this.fileManager.PieceLength are both 32-bit ints;
when they're multiplied an overflow can result, and pass an
(overflowed) negative value to FileManager.Read. My suggestion is to
cast one of them to long before the multiply is performed:
long pieceOffset = this.startOffset + (long)this.PieceIndex *
this.fileManager.PieceLength;
That should fix the problem. Here's a screenshot of the debugger
helping me find the problem:
http://will.incorrige.us/torrent-error.png
Last, thanks for the cool library! I was afraid I'd have to write my
own bittorrent library to get this working, but bitsharp is working
(mostly :-P) nicely.
Thanks,
Will
More information about the Mono-list
mailing list