diff options
Diffstat (limited to 'app-arch/tar/files/tar-1.24-transform.patch')
-rw-r--r-- | app-arch/tar/files/tar-1.24-transform.patch | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/app-arch/tar/files/tar-1.24-transform.patch b/app-arch/tar/files/tar-1.24-transform.patch deleted file mode 100644 index b6638adc9b2b..000000000000 --- a/app-arch/tar/files/tar-1.24-transform.patch +++ /dev/null @@ -1,173 +0,0 @@ -From 28e91b48f680a6fab90ee39145123647345f385f Mon Sep 17 00:00:00 2001 -From: Sergey Poznyakoff <gray@gnu.org.ua> -Date: Tue, 26 Oct 2010 14:47:16 +0000 -Subject: Make sure name matching occurs before name transformation. - -The commit 9c194c99 altered that order. - -* src/list.c (transform_stat_info): New function. Split off from -decode_header. -(read_and): Call transform_stat_info right before do_something, -and after deciding if we should proceed with this member name, -so that name matching occurs before name transformation. - -* tests/extrac17.at: New file. -* tests/Makefile.am (TESTSUITE_AT): Add extrac17.at -* tests/testsuite.at: Include extrac17.at. ---- -diff --git a/src/list.c b/src/list.c -index d15653d..e1e06ca 100644 ---- a/src/list.c -+++ b/src/list.c -@@ -75,6 +75,66 @@ base64_init (void) - base64_map[(int) base_64_digits[i]] = i; - } - -+static char * -+decode_xform (char *file_name, void *data) -+{ -+ int type = *(int*)data; -+ -+ switch (type) -+ { -+ case XFORM_SYMLINK: -+ /* FIXME: It is not quite clear how and to which extent are the symbolic -+ links subject to filename transformation. In the absence of another -+ solution, symbolic links are exempt from component stripping and -+ name suffix normalization, but subject to filename transformation -+ proper. */ -+ return file_name; -+ -+ case XFORM_LINK: -+ file_name = safer_name_suffix (file_name, true, absolute_names_option); -+ break; -+ -+ case XFORM_REGFILE: -+ file_name = safer_name_suffix (file_name, false, absolute_names_option); -+ break; -+ } -+ -+ if (strip_name_components) -+ { -+ size_t prefix_len = stripped_prefix_len (file_name, -+ strip_name_components); -+ if (prefix_len == (size_t) -1) -+ prefix_len = strlen (file_name); -+ file_name += prefix_len; -+ } -+ return file_name; -+} -+ -+static bool -+transform_member_name (char **pinput, int type) -+{ -+ return transform_name_fp (pinput, type, decode_xform, &type); -+} -+ -+static void -+transform_stat_info (int typeflag, struct tar_stat_info *stat_info) -+{ -+ if (typeflag == GNUTYPE_VOLHDR) -+ /* Name transformations don't apply to volume headers. */ -+ return; -+ -+ transform_member_name (&stat_info->file_name, XFORM_REGFILE); -+ switch (typeflag) -+ { -+ case SYMTYPE: -+ transform_member_name (&stat_info->link_name, XFORM_SYMLINK); -+ break; -+ -+ case LNKTYPE: -+ transform_member_name (&stat_info->link_name, XFORM_LINK); -+ } -+} -+ - /* Main loop for reading an archive. */ - void - read_and (void (*do_something) (void)) -@@ -135,7 +195,8 @@ read_and (void (*do_something) (void)) - continue; - } - } -- -+ transform_stat_info (current_header->header.typeflag, -+ ¤t_stat_info); - (*do_something) (); - continue; - -@@ -495,47 +556,6 @@ read_header (union block **return_block, struct tar_stat_info *info, - } - } - --static char * --decode_xform (char *file_name, void *data) --{ -- int type = *(int*)data; -- -- switch (type) -- { -- case XFORM_SYMLINK: -- /* FIXME: It is not quite clear how and to which extent are the symbolic -- links subject to filename transformation. In the absence of another -- solution, symbolic links are exempt from component stripping and -- name suffix normalization, but subject to filename transformation -- proper. */ -- return file_name; -- -- case XFORM_LINK: -- file_name = safer_name_suffix (file_name, true, absolute_names_option); -- break; -- -- case XFORM_REGFILE: -- file_name = safer_name_suffix (file_name, false, absolute_names_option); -- break; -- } -- -- if (strip_name_components) -- { -- size_t prefix_len = stripped_prefix_len (file_name, -- strip_name_components); -- if (prefix_len == (size_t) -1) -- prefix_len = strlen (file_name); -- file_name += prefix_len; -- } -- return file_name; --} -- --static bool --transform_member_name (char **pinput, int type) --{ -- return transform_name_fp (pinput, type, decode_xform, &type); --} -- - #define ISOCTAL(c) ((c)>='0'&&(c)<='7') - - /* Decode things from a file HEADER block into STAT_INFO, also setting -@@ -655,23 +675,9 @@ decode_header (union block *header, struct tar_stat_info *stat_info, - || stat_info->dumpdir) - stat_info->is_dumpdir = true; - } -- -- if (header->header.typeflag == GNUTYPE_VOLHDR) -- /* Name transformations don't apply to volume headers. */ -- return; -- -- transform_member_name (&stat_info->file_name, XFORM_REGFILE); -- switch (header->header.typeflag) -- { -- case SYMTYPE: -- transform_member_name (&stat_info->link_name, XFORM_SYMLINK); -- break; -- -- case LNKTYPE: -- transform_member_name (&stat_info->link_name, XFORM_LINK); -- } - } - -+ - /* Convert buffer at WHERE0 of size DIGS from external format to - uintmax_t. DIGS must be positive. If TYPE is nonnull, the data - are of type TYPE. The buffer must represent a value in the range --- -cgit v0.8.3.2 |