cpio: on unpack, limit filename length to 8k; shorten comment a bit

This commit is contained in:
Denis Vlasenko 2008-07-11 22:20:59 +00:00
parent e18d21dda4
commit ee1b3b1042
2 changed files with 15 additions and 15 deletions

View File

@ -178,19 +178,19 @@ static int cpio_o(void)
} }
#endif #endif
/* GNU cpio (GNU cpio) 2.9 help (abridged): /* GNU cpio 2.9 --help (abridged):
Main operation mode: Modes:
-i, --extract Extract files from an archive -i, --extract Extract files from an archive
-o, --create Create the archive -o, --create Create the archive
-p, --pass-through Copy-pass mode (was ist das?!) -p, --pass-through Copy-pass mode [was ist das?!]
-t, --list List the archive -t, --list List the archive
Operation modifiers valid in any mode: Options valid in any mode:
--block-size=SIZE I/O block size = SIZE * 512 bytes --block-size=SIZE I/O block size = SIZE * 512 bytes
-B I/O block size = 5120 bytes -B I/O block size = 5120 bytes
-c Use the old portable (ASCII) archive format -c Use the old portable (ASCII) archive format
-C, --io-size=NUMBER I/O block size to the given NUMBER bytes -C, --io-size=NUMBER I/O block size in bytes
-f, --nonmatching Only copy files that do not match given pattern -f, --nonmatching Only copy files that do not match given pattern
-F, --file=FILE Use FILE instead of standard input or output -F, --file=FILE Use FILE instead of standard input or output
-H, --format=FORMAT Use given archive FORMAT -H, --format=FORMAT Use given archive FORMAT
@ -204,7 +204,7 @@ static int cpio_o(void)
-W, --warning=FLAG Control warning display: 'none','truncate','all'; -W, --warning=FLAG Control warning display: 'none','truncate','all';
multiple options accumulate multiple options accumulate
Operation modifiers valid only in --extract mode: Options valid only in --extract mode:
-b, --swap Swap both halfwords of words and bytes of -b, --swap Swap both halfwords of words and bytes of
halfwords in the data (equivalent to -sS) halfwords in the data (equivalent to -sS)
-r, --rename Interactively rename files -r, --rename Interactively rename files
@ -215,31 +215,29 @@ static int cpio_o(void)
extract or list from FILE extract or list from FILE
--only-verify-crc Verify CRC's, don't actually extract the files --only-verify-crc Verify CRC's, don't actually extract the files
Operation modifiers valid only in --create mode: Options valid only in --create mode:
-A, --append Append to an existing archive -A, --append Append to an existing archive
-O FILE File to use instead of standard output -O FILE File to use instead of standard output
Operation modifiers valid only in --pass-through mode: Options valid only in --pass-through mode:
-l, --link Link files instead of copying them, when possible -l, --link Link files instead of copying them, when possible
Operation modifiers valid in --extract and --create modes: Options valid in --extract and --create modes:
--absolute-filenames Do not strip file system prefix components from --absolute-filenames Do not strip file system prefix components from
the file names the file names
--no-absolute-filenames Create all files relative to the current dir --no-absolute-filenames Create all files relative to the current dir
Operation modifiers valid in --create and --pass-through modes: Options valid in --create and --pass-through modes:
-0, --null A list of filenames is terminated by a NUL -0, --null A list of filenames is terminated by a NUL
-a, --reset-access-time Reset the access times of files after reading them -a, --reset-access-time Reset the access times of files after reading them
-I FILE File to use instead of standard input -I FILE File to use instead of standard input
-L, --dereference Dereference symbolic links (copy the files -L, --dereference Dereference symbolic links (copy the files
that they point to instead of copying the links) that they point to instead of copying the links)
-R, --owner=[USER][:.][GROUP] Set owner of created files -R, --owner=[USER][:.][GROUP] Set owner of created files
Operation modifiers valid in --extract and --pass-through modes: Options valid in --extract and --pass-through modes:
-d, --make-directories Create leading directories where needed -d, --make-directories Create leading directories where needed
-m, --preserve-modification-time -m, --preserve-modification-time Retain mtime when creating files
Retain previous file modification times when
creating files
--no-preserve-owner Do not change the ownership of the files --no-preserve-owner Do not change the ownership of the files
--sparse Write files with blocks of zeros as sparse files --sparse Write files with blocks of zeros as sparse files
-u, --unconditional Replace all files unconditionally -u, --unconditional Replace all files unconditionally

View File

@ -37,6 +37,7 @@ char FAST_FUNC get_header_cpio(archive_handle_t *archive_handle)
/* There can be padding before archive header */ /* There can be padding before archive header */
data_align(archive_handle, 4); data_align(archive_handle, 4);
//TODO: this function is used only here, make it static?
if (archive_xread_all_eof(archive_handle, (unsigned char*)cpio_header, 110) == 0) { if (archive_xread_all_eof(archive_handle, (unsigned char*)cpio_header, 110) == 0) {
goto create_hardlinks; goto create_hardlinks;
} }
@ -61,6 +62,7 @@ char FAST_FUNC get_header_cpio(archive_handle_t *archive_handle)
file_header->mtime = mtime; file_header->mtime = mtime;
file_header->size = size; file_header->size = size;
namesize &= 0x1fff; /* paranoia: names can't be that long */
file_header->name = xzalloc(namesize + 1); file_header->name = xzalloc(namesize + 1);
/* Read in filename */ /* Read in filename */
xread(archive_handle->src_fd, file_header->name, namesize); xread(archive_handle->src_fd, file_header->name, namesize);