mirror of
https://github.com/atom/atom.git
synced 2026-01-24 14:28:14 -05:00
Ensure that evil filenames do not hose Project.scan
This commit is contained in:
@@ -135,3 +135,10 @@ describe "Project", ->
|
||||
path: project.resolve('a')
|
||||
match: ['aa', 'a']
|
||||
range: [[1, 3], [1, 5]]
|
||||
|
||||
it "works on evil filenames", ->
|
||||
project.setPath(require.resolve('fixtures/evil-files'))
|
||||
waitsForPromise ->
|
||||
project.scan /(a)+/, ({path, match, range}) ->
|
||||
matches.push({path, match, range})
|
||||
|
||||
|
||||
@@ -31,12 +31,12 @@ describe "TreeView", ->
|
||||
expect(treeView.root.find('> .header .name')).toHaveText('fixtures/')
|
||||
|
||||
rootEntries = treeView.root.find('.entries')
|
||||
subdir1 = rootEntries.find('> li:eq(0)')
|
||||
expect(subdir1.find('.disclosure-arrow')).toHaveText('▸')
|
||||
expect(subdir1.find('.name')).toHaveText('dir/')
|
||||
expect(subdir1.find('.entries')).not.toExist()
|
||||
subdir0 = rootEntries.find('> li:eq(0)')
|
||||
expect(subdir0.find('.disclosure-arrow')).toHaveText('▸')
|
||||
expect(subdir0.find('.name')).toHaveText('dir/')
|
||||
expect(subdir0.find('.entries')).not.toExist()
|
||||
|
||||
subdir2 = rootEntries.find('> li:eq(1)')
|
||||
subdir2 = rootEntries.find('> li:eq(2)')
|
||||
expect(subdir2.find('.disclosure-arrow')).toHaveText('▸')
|
||||
expect(subdir2.find('.name')).toHaveText('zed/')
|
||||
expect(subdir2.find('.entries')).not.toExist()
|
||||
|
||||
0
spec/fixtures/evil-files/file with spaces.txt
vendored
Normal file
0
spec/fixtures/evil-files/file with spaces.txt
vendored
Normal file
1
spec/fixtures/evil-files/goddam
linefeeds
vendored
Normal file
1
spec/fixtures/evil-files/goddam
linefeeds
vendored
Normal file
@@ -0,0 +1 @@
|
||||
you know how we do it
|
||||
1
spec/fixtures/evil-files/quote".js
vendored
Normal file
1
spec/fixtures/evil-files/quote".js
vendored
Normal file
@@ -0,0 +1 @@
|
||||
// I am evil because there's a " in my filename. Why you do that!?
|
||||
3
spec/fixtures/evil-files/utfă.md
vendored
Normal file
3
spec/fixtures/evil-files/utfă.md
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
# Hello Word
|
||||
|
||||
This is markdown.
|
||||
@@ -138,13 +138,13 @@ class Project
|
||||
|
||||
scan: (regex, iterator) ->
|
||||
regex = new RegExp(regex.source, 'g')
|
||||
commands = [
|
||||
"find \"#{@getPath()}\" -type f"
|
||||
"grep --perl-regexp --invert-match --regexp=\"#{@ignorePathRegex()}\""
|
||||
"xargs grep --null --perl-regexp --with-filename --line-number --recursive --regexp=\"#{regex.source}\""
|
||||
]
|
||||
command = [
|
||||
"find \"#{@getPath()}\" -type f -print0" # find all paths in the project's working directory
|
||||
"grep --text --perl-regexp --invert-match --regexp=\"#{@ignorePathRegex()}\"" # accept only non-ignored paths, separated by \0 (find doesn't support pcre)
|
||||
"perl -0pi -e 's/\n$//'" # delete grep's trailing newline because it screws up xargs
|
||||
"xargs -0 grep --null --perl-regexp --with-filename --line-number --recursive --regexp=\"#{regex.source}\"" # run grep on each filtered file
|
||||
].join(" | ")
|
||||
|
||||
command = commands.join(" | ")
|
||||
ChildProcess.exec command, bufferLines: true, stdout: (data) ->
|
||||
for grepLine in data.split('\n') when grepLine.length
|
||||
nullCharIndex = grepLine.indexOf('\0')
|
||||
|
||||
Reference in New Issue
Block a user