From: Tom Clegg Date: Tue, 12 Dec 2017 16:29:37 +0000 (-0500) Subject: 12803: Accept unescaped colons in filenames. X-Git-Tag: 1.1.2~15^2 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/68054313a874a5b4a7e381623ac557ebdb7ebc35 12803: Accept unescaped colons in filenames. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- diff --git a/sdk/go/arvados/collection_fs.go b/sdk/go/arvados/collection_fs.go index 28629e33b2..7bbbaa492c 100644 --- a/sdk/go/arvados/collection_fs.go +++ b/sdk/go/arvados/collection_fs.go @@ -864,7 +864,7 @@ func (dn *dirnode) loadManifest(txt string) error { return fmt.Errorf("line %d: bad locator %q", lineno, token) } - toks := strings.Split(token, ":") + toks := strings.SplitN(token, ":", 3) if len(toks) != 3 { return fmt.Errorf("line %d: bad file segment %q", lineno, token) } diff --git a/sdk/go/arvados/collection_fs_test.go b/sdk/go/arvados/collection_fs_test.go index f1a34754f7..57ba325594 100644 --- a/sdk/go/arvados/collection_fs_test.go +++ b/sdk/go/arvados/collection_fs_test.go @@ -77,6 +77,21 @@ func (s *CollectionFSSuite) TestHttpFileSystemInterface(c *check.C) { c.Check(ok, check.Equals, true) } +func (s *CollectionFSSuite) TestColonInFilename(c *check.C) { + fs, err := (&Collection{ + ManifestText: "./foo:foo 3858f62230ac3c915f300c664312c63f+3 0:3:bar:bar\n", + }).FileSystem(s.client, s.kc) + c.Assert(err, check.IsNil) + + f, err := fs.Open("/foo:foo") + c.Assert(err, check.IsNil) + + fis, err := f.Readdir(0) + c.Check(err, check.IsNil) + c.Check(len(fis), check.Equals, 1) + c.Check(fis[0].Name(), check.Equals, "bar:bar") +} + func (s *CollectionFSSuite) TestReaddirFull(c *check.C) { f, err := s.fs.Open("/dir1") c.Assert(err, check.IsNil) @@ -928,7 +943,7 @@ func (s *CollectionFSSuite) TestBrokenManifests(c *check.C) { ". 0:0:foo\n", ". 0:0:foo 0:0:bar\n", ". d41d8cd98f00b204e9800998ecf8427e 0:0:foo\n", - ". d41d8cd98f00b204e9800998ecf8427e+0 0:0:foo:bar\n", + ". d41d8cd98f00b204e9800998ecf8427e+0 :0:0:foo\n", ". d41d8cd98f00b204e9800998ecf8427e+0 foo:0:foo\n", ". d41d8cd98f00b204e9800998ecf8427e+0 0:foo:foo\n", ". d41d8cd98f00b204e9800998ecf8427e+1 0:1:foo 1:1:bar\n",