mirror of
https://git.savannah.gnu.org/git/tar.git
synced 2026-04-28 04:07:02 +00:00
Handle enormous record sizes better
Formerly the code could misbehave when the user specified a record size greater than min (INT_MAX * 512 + 511, PTRDIFF_MAX, SSIZE_MAX). * src/delete.c (new_blocks, delete_archive_members): * src/system.c (sys_exec_info_script): * src/tar.c (blocking_factor, record_size): Don’t limit blocking factor to INT_MAX. Prefer signed type for record_size. Do not exceed IDX_MAX or SSIZE_MAX for record_size; the SSIZE_MAX limit is needed so that ‘read’ and ‘write’ calls behave sensibly.
This commit is contained in:
@@ -985,11 +985,11 @@ short_read (size_t status)
|
||||
|
||||
if (! read_full_records)
|
||||
{
|
||||
unsigned long rest = record_size - left;
|
||||
idx_t rest = record_size - left;
|
||||
|
||||
FATAL_ERROR ((0, 0,
|
||||
ngettext ("Unaligned block (%lu byte) in archive",
|
||||
"Unaligned block (%lu bytes) in archive",
|
||||
ngettext ("Unaligned block (%td byte) in archive",
|
||||
"Unaligned block (%td bytes) in archive",
|
||||
rest),
|
||||
rest));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user