Skip to content

Commit

Permalink
fix(tar): handle spaces in input filenames
Browse files Browse the repository at this point in the history
This is a partial solution to #794 that covers the most common case needing escaping.
See #795 for a principled but blocked fix that requires a BSD vis executable
  • Loading branch information
alexeagle committed May 7, 2024
1 parent d8d22cb commit fc8c05c
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 1 deletion.
6 changes: 5 additions & 1 deletion lib/private/tar.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,10 @@ def _to_rlocation_path(file, workspace):
else:
return workspace + "/" + file.short_path

def _vis_encode(filename):
# TODO(#794): correctly encode all filenames by using vis(3) (or porting it)
return filename.replace(" ", "\\040")

def _expand(file, expander, transform = to_repository_relative_path):
expanded = expander.expand(file)
lines = []
Expand All @@ -193,7 +197,7 @@ def _expand(file, expander, transform = to_repository_relative_path):
parent = "/".join(segments[:i])
lines.append(_mtree_line(parent, "dir"))

lines.append(_mtree_line(path, "file", content = e.path))
lines.append(_mtree_line(_vis_encode(path), "file", content = _vis_encode(e.path)))
return lines

def _mtree_impl(ctx):
Expand Down
2 changes: 2 additions & 0 deletions lib/tests/tar/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -229,9 +229,11 @@ assert_tar_listing(
"drwxr-xr-x 0 0 0 0 Jan 1 2023 lib/tests/tar/srcdir/",
"-rwxr-xr-x 0 0 0 0 Jan 1 2023 lib/tests/tar/srcdir/info",
"-rwxr-xr-x 0 0 0 0 Jan 1 2023 lib/tests/tar/srcdir/pkg",
"-rwxr-xr-x 0 0 0 1 Jan 1 2023 lib/tests/tar/srcdir/space in name.txt",
"drwxr-xr-x 0 0 0 0 Jan 1 2023 lib/tests/tar/treeartifact/",
"-rwxr-xr-x 0 0 0 0 Jan 1 2023 lib/tests/tar/treeartifact/info",
"-rwxr-xr-x 0 0 0 0 Jan 1 2023 lib/tests/tar/treeartifact/pkg",
"-rwxr-xr-x 0 0 0 1 Jan 1 2023 lib/tests/tar/treeartifact/space in name.txt",
],
)

Expand Down
1 change: 1 addition & 0 deletions lib/tests/tar/srcdir/space in name.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
e

0 comments on commit fc8c05c

Please sign in to comment.