Improve Pathname#text_executable? regexp

file(1) does not allow leading whitespace on shebang lines, and there
appears to be no restrictions on what characters follow '#!', either.

While at it, fix an erroneous shebang test.

Signed-off-by: Jack Nagel <jacknagel@gmail.com>
This commit is contained in:
Jack Nagel 2012-06-15 20:02:49 -05:00
parent 1b6f23c8a9
commit 7002359f7a
2 changed files with 3 additions and 3 deletions

View File

@ -272,7 +272,7 @@ class Pathname
end
def text_executable?
%r[#!\s*(/.+)+] === open('r') { |f| f.readline }
%r[^#!\s*.+] === open('r') { |f| f.readline }
rescue EOFError
false
end

View File

@ -135,7 +135,7 @@ class TextExecutableTests < Test::Unit::TestCase
def test_malformed_shebang
pn = Pathname.new('baz')
pn.write '#! '
pn.write ' #!'
assert !pn.universal?
assert !pn.i386?
assert !pn.x86_64?
@ -146,7 +146,7 @@ class TextExecutableTests < Test::Unit::TestCase
assert !pn.text_executable?
assert_equal [], pn.archs
assert pn.arch == :dunno
assert_match /text executable/, `/usr/bin/file -h '#{pn}'`.chomp
assert_no_match /text executable/, `/usr/bin/file -h '#{pn}'`.chomp
end
def teardown