Skip to content

Commit 478d205

Browse files
committed
sanitize project name in generated package.json
1 parent 3a7bf94 commit 478d205

File tree

3 files changed

+70
-4
lines changed

3 files changed

+70
-4
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// Licensed to the Software Freedom Conservancy (SFC) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The SFC licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
18+
import { sanitizeFileName } from '../util'
19+
20+
describe('filename sanitization', () => {
21+
it('allows alpha-numeric characters', () => {
22+
const input = 'asdf1234'
23+
expect(sanitizeFileName(input)).toEqual(input)
24+
})
25+
it('allows limited special characters', () => {
26+
let input = 'asdf-1234'
27+
expect(sanitizeFileName(input)).toEqual(input)
28+
input = 'asdf_1234'
29+
expect(sanitizeFileName(input)).toEqual(input)
30+
input = 'asdf.1234'
31+
expect(sanitizeFileName(input)).toEqual(input)
32+
})
33+
it('ignores illegal filesystem characters', () => {
34+
const input = 'blah:/blah'
35+
expect(sanitizeFileName(input)).toEqual('blahblah')
36+
})
37+
it('ignores illegal npm characters', () => {
38+
const input = 'hello world'
39+
expect(sanitizeFileName(input)).toEqual('helloworld')
40+
})
41+
it('disallows special characters in the beginning', () => {
42+
let input = '-hello world'
43+
expect(sanitizeFileName(input)).toEqual('helloworld')
44+
input = '.hello world'
45+
expect(sanitizeFileName(input)).toEqual('helloworld')
46+
input = '_hello world'
47+
expect(sanitizeFileName(input)).toEqual('helloworld')
48+
})
49+
})

packages/selenium-side-runner/src/index.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import Config from './config'
3434
import Satisfies from './versioner'
3535
import parseModulePath from './module-path'
3636
import metadata from '../package.json'
37+
import { sanitizeFileName } from './util'
3738

3839
const DEFAULT_TIMEOUT = 15000
3940

@@ -370,10 +371,6 @@ function writeJSFile(name, data, postfix = '.test.js') {
370371
fs.writeFileSync(`${name}${postfix}`, beautify(data, { indent_size: 2 }))
371372
}
372373

373-
function sanitizeFileName(name) {
374-
return name.replace(/([^a-z0-9 ._-]+)/gi, '')
375-
}
376-
377374
const projects = [
378375
...program.args.reduce((projects, project) => {
379376
glob.sync(project).forEach(p => {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Licensed to the Software Freedom Conservancy (SFC) under one
2+
// or more contributor license agreements. See the NOTICE file
3+
// distributed with this work for additional information
4+
// regarding copyright ownership. The SFC licenses this file
5+
// to you under the Apache License, Version 2.0 (the
6+
// "License"); you may not use this file except in compliance
7+
// with the License. You may obtain a copy of the License at
8+
//
9+
// http://www.apache.org/licenses/LICENSE-2.0
10+
//
11+
// Unless required by applicable law or agreed to in writing,
12+
// software distributed under the License is distributed on an
13+
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
// KIND, either express or implied. See the License for the
15+
// specific language governing permissions and limitations
16+
// under the License.
17+
18+
export function sanitizeFileName(name) {
19+
return name.replace(/^([^a-z0-9])|([^a-z0-9._-]*)/gi, '')
20+
}

0 commit comments

Comments
 (0)