Added parm "allow_incompressible" to Packer::{get,read}PackHeader().
This commit is contained in:
+6
-4
@@ -684,7 +684,7 @@ int Packer::patchPackHeader(void *b, int blen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Packer::getPackHeader(void *b, int blen)
|
bool Packer::getPackHeader(void *b, int blen, bool allow_incompressible)
|
||||||
{
|
{
|
||||||
if (!ph.fillPackHeader((unsigned char *)b, blen))
|
if (!ph.fillPackHeader((unsigned char *)b, blen))
|
||||||
return false;
|
return false;
|
||||||
@@ -697,7 +697,9 @@ bool Packer::getPackHeader(void *b, int blen)
|
|||||||
if (!testUnpackVersion(ph.version))
|
if (!testUnpackVersion(ph.version))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (ph.c_len > ph.u_len || (off_t)ph.c_len >= file_size
|
if (ph.c_len > ph.u_len
|
||||||
|
|| (ph.c_len == ph.u_len && !allow_incompressible)
|
||||||
|
|| (off_t)ph.c_len >= file_size
|
||||||
|| ph.version <= 0 || ph.version >= 0xff)
|
|| ph.version <= 0 || ph.version >= 0xff)
|
||||||
throwCantUnpack("header corrupted");
|
throwCantUnpack("header corrupted");
|
||||||
else if ((off_t)ph.u_len > ph.u_file_size)
|
else if ((off_t)ph.u_len > ph.u_file_size)
|
||||||
@@ -722,14 +724,14 @@ bool Packer::getPackHeader(void *b, int blen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool Packer::readPackHeader(int len)
|
bool Packer::readPackHeader(int len, bool allow_incompressible)
|
||||||
{
|
{
|
||||||
assert((int)len > 0);
|
assert((int)len > 0);
|
||||||
MemBuffer buf(len);
|
MemBuffer buf(len);
|
||||||
len = fi->read(buf, len);
|
len = fi->read(buf, len);
|
||||||
if (len <= 0)
|
if (len <= 0)
|
||||||
return false;
|
return false;
|
||||||
return getPackHeader(buf, len);
|
return getPackHeader(buf, len, allow_incompressible);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -214,8 +214,8 @@ protected:
|
|||||||
|
|
||||||
// packheader handling
|
// packheader handling
|
||||||
virtual int patchPackHeader(void *b, int blen);
|
virtual int patchPackHeader(void *b, int blen);
|
||||||
virtual bool getPackHeader(void *b, int blen);
|
virtual bool getPackHeader(void *b, int blen, bool allow_incompressible=false);
|
||||||
virtual bool readPackHeader(int len);
|
virtual bool readPackHeader(int len, bool allow_incompressible=false);
|
||||||
virtual void checkAlreadyPacked(const void *b, int blen);
|
virtual void checkAlreadyPacked(const void *b, int blen);
|
||||||
|
|
||||||
// loader core
|
// loader core
|
||||||
|
|||||||
Reference in New Issue
Block a user