mirror of
https://github.com/sheumann/hush.git
synced 2024-11-19 23:31:39 +00:00
tar: do not try to decode GNU extended headers as pax headers
function old new delta get_header_tar 1736 1692 -44 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
778efe37ee
commit
bdb540e04f
@ -350,7 +350,14 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
|
|||||||
case '6':
|
case '6':
|
||||||
file_header->mode |= S_IFIFO;
|
file_header->mode |= S_IFIFO;
|
||||||
goto size0;
|
goto size0;
|
||||||
|
case 'g': /* pax global header */
|
||||||
|
case 'x': { /* pax extended header */
|
||||||
|
if ((uoff_t)file_header->size > 0xfffff) /* paranoia */
|
||||||
|
goto skip_ext_hdr;
|
||||||
|
process_pax_hdr(archive_handle, file_header->size, (tar.typeflag == 'g'));
|
||||||
|
goto again_after_align;
|
||||||
#if ENABLE_FEATURE_TAR_GNU_EXTENSIONS
|
#if ENABLE_FEATURE_TAR_GNU_EXTENSIONS
|
||||||
|
/* See http://www.gnu.org/software/tar/manual/html_node/Extensions.html */
|
||||||
case 'L':
|
case 'L':
|
||||||
/* free: paranoia: tar with several consecutive longnames */
|
/* free: paranoia: tar with several consecutive longnames */
|
||||||
free(p_longname);
|
free(p_longname);
|
||||||
@ -370,18 +377,17 @@ char FAST_FUNC get_header_tar(archive_handle_t *archive_handle)
|
|||||||
archive_handle->offset += file_header->size;
|
archive_handle->offset += file_header->size;
|
||||||
/* return get_header_tar(archive_handle); */
|
/* return get_header_tar(archive_handle); */
|
||||||
goto again;
|
goto again;
|
||||||
case 'D': /* GNU dump dir */
|
/*
|
||||||
case 'M': /* Continuation of multi volume archive */
|
* case 'S': // Sparse file
|
||||||
case 'N': /* Old GNU for names > 100 characters */
|
* Was seen in the wild. Not supported (yet?).
|
||||||
case 'S': /* Sparse file */
|
* See https://www.gnu.org/software/tar/manual/html_section/tar_92.html
|
||||||
case 'V': /* Volume header */
|
* for the format. (An "Old GNU Format" was seen, not PAX formats).
|
||||||
|
*/
|
||||||
|
// case 'D': /* GNU dump dir */
|
||||||
|
// case 'M': /* Continuation of multi volume archive */
|
||||||
|
// case 'N': /* Old GNU for names > 100 characters */
|
||||||
|
// case 'V': /* Volume header */
|
||||||
#endif
|
#endif
|
||||||
case 'g': /* pax global header */
|
|
||||||
case 'x': { /* pax extended header */
|
|
||||||
if ((uoff_t)file_header->size > 0xfffff) /* paranoia */
|
|
||||||
goto skip_ext_hdr;
|
|
||||||
process_pax_hdr(archive_handle, file_header->size, (tar.typeflag == 'g'));
|
|
||||||
goto again_after_align;
|
|
||||||
}
|
}
|
||||||
skip_ext_hdr:
|
skip_ext_hdr:
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user