From 4cd58c2f2687fc5930a3da2581da09e2e96f69f5 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Fri, 6 Oct 2017 01:40:58 -0700 Subject: archive/tar: improve handling of directory paths The USTAR format says: <<< Implementors should be aware that the previous file format did not include a mechanism to archive directory type files. For this reason, the convention of using a filename ending with was adopted to specify a directory on the archive. >>> In light of this suggestion, make the following changes: * Writer.WriteHeader refuses to encode a header where a file that is obviously a file-type has a trailing slash in the name. * formatter.formatString avoids encoding a trailing slash in the event that the string is truncated (the full string will be encoded elsewhere, so stripping the slash is safe). * Reader.Next treats a TypeRegA (which is the zero value of Typeflag) as a TypeDir if the name has a trailing slash. Change-Id: Ibf27aa8234cce2032d92e5e5b28546c2f2ae5ef6 Reviewed-on: https://go-review.googlesource.com/69293 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- src/archive/tar/reader_test.go | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/archive/tar/reader_test.go') diff --git a/src/archive/tar/reader_test.go b/src/archive/tar/reader_test.go index bbabd96246..3ac81adb4d 100644 --- a/src/archive/tar/reader_test.go +++ b/src/archive/tar/reader_test.go @@ -675,6 +675,17 @@ func TestReader(t *testing.T) { }, Format: FormatPAX, }}, + }, { + file: "testdata/trailing-slash.tar", + headers: []*Header{{ + Typeflag: TypeDir, + Name: strings.Repeat("123456789/", 30), + ModTime: time.Unix(0, 0), + PAXRecords: map[string]string{ + "path": strings.Repeat("123456789/", 30), + }, + Format: FormatPAX, + }}, }} for _, v := range vectors { -- cgit v1.3