From caf4d4c270b2f72fc75f13d25544ecb35514b523 Mon Sep 17 00:00:00 2001 From: Colin Cross Date: Wed, 3 Feb 2021 15:15:14 -0800 Subject: [PATCH] soong_zip: don't glob RSP file entries File arguments are considered globs, but RSP file entries should be considered filenames without globbing. Escape RSP file entries so they don't get treated as globs later. Bug: 179297188 Test: zip_test.go Change-Id: I1de7829c668538204fc4a2ac793a4f88dbc886c9 --- zip/zip.go | 3 +++ zip/zip_test.go | 14 ++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/zip/zip.go b/zip/zip.go index cb85f5ced..f7313291c 100644 --- a/zip/zip.go +++ b/zip/zip.go @@ -172,6 +172,9 @@ func (b *FileArgsBuilder) RspFile(name string) *FileArgsBuilder { arg := b.state arg.SourceFiles = ReadRespFile(list) + for i := range arg.SourceFiles { + arg.SourceFiles[i] = pathtools.MatchEscape(arg.SourceFiles[i]) + } b.fileArgs = append(b.fileArgs, arg) return b } diff --git a/zip/zip_test.go b/zip/zip_test.go index a16e09286..b456ef8f2 100644 --- a/zip/zip_test.go +++ b/zip/zip_test.go @@ -46,13 +46,14 @@ var mockFs = pathtools.MockFs(map[string][]byte{ "dangling -> missing": nil, "a/a/d -> b": nil, "c": fileC, - "l_nl": []byte("a/a/a\na/a/b\nc\n"), - "l_sp": []byte("a/a/a a/a/b c"), + "l_nl": []byte("a/a/a\na/a/b\nc\n\\[\n"), + "l_sp": []byte("a/a/a a/a/b c \\["), "l2": []byte("missing\n"), - "rsp": []byte("'a/a/a'\na/a/b\n'@'\n'foo'\\''bar'"), + "rsp": []byte("'a/a/a'\na/a/b\n'@'\n'foo'\\''bar'\n'['"), "@ -> c": nil, "foo'bar -> c": nil, "manifest.txt": fileCustomManifest, + "[": fileEmpty, }) func fh(name string, contents []byte, method uint16) zip.FileHeader { @@ -127,13 +128,15 @@ func TestZip(t *testing.T) { args: fileArgsBuilder(). File("a/a/a"). File("a/a/b"). - File("c"), + File("c"). + File(`\[`), compressionLevel: 9, files: []zip.FileHeader{ fh("a/a/a", fileA, zip.Deflate), fh("a/a/b", fileB, zip.Deflate), fh("c", fileC, zip.Deflate), + fh("[", fileEmpty, zip.Store), }, }, { @@ -235,6 +238,7 @@ func TestZip(t *testing.T) { fh("a/a/a", fileA, zip.Deflate), fh("a/a/b", fileB, zip.Deflate), fh("c", fileC, zip.Deflate), + fh("[", fileEmpty, zip.Store), }, }, { @@ -247,6 +251,7 @@ func TestZip(t *testing.T) { fh("a/a/a", fileA, zip.Deflate), fh("a/a/b", fileB, zip.Deflate), fh("c", fileC, zip.Deflate), + fh("[", fileEmpty, zip.Store), }, }, { @@ -260,6 +265,7 @@ func TestZip(t *testing.T) { fh("a/a/b", fileB, zip.Deflate), fh("@", fileC, zip.Deflate), fh("foo'bar", fileC, zip.Deflate), + fh("[", fileEmpty, zip.Store), }, }, {