Date: Thu, 17 Jul 2008 23:52:33 +0600
From: Eugene Roshal
To: "elparaito"
Subject: Re: Bug in rdwrfn.cpp
Hello,
We'll change it. Thank you.
Eugene
> I have found a little bug in last source code of unrarsrc-3.8.2.
> It may not apply ever in current version. But it arose when I was making
> some changes in other parts of source code.
> It is about applying CRC to a block using the size told to read, but not the
> actually read.
> A patch is attached.
> diff -Naur unrar.orig/rdwrfn.cpp unrar/rdwrfn.cpp
> --- unrar.orig/rdwrfn.cpp 2008-06-15 12:42:13.000000000 +0000
> +++ unrar/rdwrfn.cpp 2008-07-17 16:58:40.000000000 +0000
> @@ -59,7 +59,7 @@
> RetCode=SrcFile->Read(ReadAddr,ReadSize);
> FileHeader *hd=SubHead!=NULL ? SubHead:&SrcArc->NewLhd;
> if (hd->Flags & LHD_SPLIT_AFTER)
> - PackedCRC=CRC(PackedCRC,ReadAddr,ReadSize);
> + PackedCRC=CRC(PackedCRC,ReadAddr,RetCode);
> }
> CurUnpRead+=RetCode;
> TotalRead+=RetCode;
El fallo ocurria cuando se pide leer de un archivo un bloque de cierto tamaño, que puede que lo lea o lea menos, pero luego al procesarlo suponían que lo leía entero en vez de lo que realmente había leido.
De todas formas parece que lo normal es que lo lea todo, pero nunca se sabe... Por ejemplo en mi modificación no pasaba eso, y por culpa del bug luego acababa fallando el CRC.
Ya lo se, es una estupidez, pero me hace gracia.