filesystem/null_byte_paths_no_parens.rb
tests/_examples/filesystem/null_byte_paths_no_parens.rb in the metorex repository.
# A NUL byte ends a name the operating system reads, so a path holding one
# is refused before anything is looked up. A pattern is a string rather than
# a path, and a single glob pattern holding one is refused on its own terms.
here = Dir.pwd
[
-> { Dir.entries here + "\0" },
-> { Dir.children here + "\0" },
-> { Dir.each_child(here + "\0").to_a },
-> { Dir.foreach(here + "\0").to_a },
-> { Dir.empty? here + "\0" },
-> { Dir.glob [here + "\0" + "*"] },
-> { Dir.glob here + "\0" + "*" },
-> { File.fnmatch "a\0", "a" },
-> { File.fnmatch "a", "a\0" },
].each do |call|
begin
call.call
rescue ArgumentError => error
p error.message
end
end
Output:
"path name contains null byte"
"path name contains null byte"
"path name contains null byte"
"path name contains null byte"
"path name contains null byte"
"path name contains null byte"
"nul-separated glob pattern is deprecated"
"string contains null byte"
"path name contains null byte"