diff options
| author | Tim D. Smith | 2016-10-15 21:21:08 -0700 |
|---|---|---|
| committer | Tim D. Smith | 2016-10-15 21:21:08 -0700 |
| commit | 371cd0dd3e6d31ef96b2e000a4fa9519938b0aab (patch) | |
| tree | 37d381e7c20ca4cb0f76fe03cb6950360746ad02 /Library/Homebrew | |
| parent | 7ac90613fd5a9719a03e180947522bfd4a8790be (diff) | |
| download | brew-371cd0dd3e6d31ef96b2e000a4fa9519938b0aab.tar.bz2 | |
Don't choke on invalid UTF-8 in `file` output
Sometimes `file` output contains data from the file under examination,
which may include binary data that does not represent valid UTF-8
codepoints. String#split dies if it doesn't understand the encoding, so
tell Ruby to treat `file` output as a bytestring.
Diffstat (limited to 'Library/Homebrew')
| -rw-r--r-- | Library/Homebrew/keg_relocate.rb | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/Library/Homebrew/keg_relocate.rb b/Library/Homebrew/keg_relocate.rb index ab037da98..3e777d0c1 100644 --- a/Library/Homebrew/keg_relocate.rb +++ b/Library/Homebrew/keg_relocate.rb @@ -84,9 +84,12 @@ class Keg } output, _status = Open3.capture2("/usr/bin/xargs -0 /usr/bin/file --no-dereference --print0", stdin_data: files.to_a.join("\0")) + # `file` output sometimes contains data from the file, which may include + # invalid UTF-8 entities, so tell Ruby this is just a bytestring + output.force_encoding(Encoding::ASCII_8BIT) output.each_line do |line| - path, info = line.split("\0") - next unless info.to_s.include?("text") + path, info = line.split("\0", 2) + next unless info.include?("text") path = Pathname.new(path) next unless files.include?(path) text_files << path |
