Must not compare orig_file_size with fi->st_size() during ::unpack
This commit is contained in:
+2
-4
@@ -3014,8 +3014,7 @@ void PackLinuxElf64::unpack(OutputFile *fo)
|
|||||||
p_info hbuf; fi->readx(&hbuf, sizeof(hbuf));
|
p_info hbuf; fi->readx(&hbuf, sizeof(hbuf));
|
||||||
unsigned orig_file_size = get_te32(&hbuf.p_filesize);
|
unsigned orig_file_size = get_te32(&hbuf.p_filesize);
|
||||||
blocksize = get_te32(&hbuf.p_blocksize);
|
blocksize = get_te32(&hbuf.p_blocksize);
|
||||||
if (file_size > (off_t)orig_file_size || blocksize > orig_file_size
|
if (file_size > (off_t)orig_file_size || blocksize > orig_file_size)
|
||||||
|| orig_file_size > fi->st_size())
|
|
||||||
throwCantUnpack("p_info corrupted");
|
throwCantUnpack("p_info corrupted");
|
||||||
|
|
||||||
ibuf.alloc(blocksize + OVERHEAD);
|
ibuf.alloc(blocksize + OVERHEAD);
|
||||||
@@ -3534,8 +3533,7 @@ void PackLinuxElf32::unpack(OutputFile *fo)
|
|||||||
p_info hbuf; fi->readx(&hbuf, sizeof(hbuf));
|
p_info hbuf; fi->readx(&hbuf, sizeof(hbuf));
|
||||||
unsigned orig_file_size = get_te32(&hbuf.p_filesize);
|
unsigned orig_file_size = get_te32(&hbuf.p_filesize);
|
||||||
blocksize = get_te32(&hbuf.p_blocksize);
|
blocksize = get_te32(&hbuf.p_blocksize);
|
||||||
if (file_size > (off_t)orig_file_size || blocksize > orig_file_size
|
if (file_size > (off_t)orig_file_size || blocksize > orig_file_size)
|
||||||
|| orig_file_size > fi->st_size())
|
|
||||||
throwCantUnpack("p_info corrupted");
|
throwCantUnpack("p_info corrupted");
|
||||||
|
|
||||||
ibuf.alloc(blocksize + OVERHEAD);
|
ibuf.alloc(blocksize + OVERHEAD);
|
||||||
|
|||||||
+1
-1
@@ -556,7 +556,7 @@ void PackUnix::unpack(OutputFile *fo)
|
|||||||
orig_file_size = get_te32(&hbuf.p_filesize);
|
orig_file_size = get_te32(&hbuf.p_filesize);
|
||||||
blocksize = get_te32(&hbuf.p_blocksize);
|
blocksize = get_te32(&hbuf.p_blocksize);
|
||||||
|
|
||||||
if (file_size != (off_t)orig_file_size || blocksize > orig_file_size)
|
if (file_size > (off_t)orig_file_size || blocksize > orig_file_size)
|
||||||
throwCantUnpack("file header corrupted");
|
throwCantUnpack("file header corrupted");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user