Skip to content

Commit

Permalink
Don't allow : in file names. (#3972)
Browse files Browse the repository at this point in the history
File paths with a colon in them can refer to an NTFS "alternate data
stream" which does not operate like a normal file and can break many use
cases. They should be avoided (except for the case of the Windows drive
letter, like "C:").

This reverts some of the test changes made in
87586df which removed the `:` from
the virtual entry names. This seems to be a convention in some plugins.
The test now tests that those names don't result in invalid Windows file
paths.

Co-authored-by: Lukas Taegert-Atkinson <lukastaegert@users.noreply.github.com>
  • Loading branch information
NfNitLoop and lukastaegert committed Feb 26, 2021
1 parent 9b8c94d commit 85304f2
Show file tree
Hide file tree
Showing 16 changed files with 39 additions and 34 deletions.
7 changes: 6 additions & 1 deletion src/utils/sanitizeFileName.ts
@@ -1,3 +1,8 @@
export function sanitizeFileName(name: string): string {
return name.replace(/[\0?*]/g, '_');
const match = /^[a-z]:/i.exec(name);
const driveLetter = match ? match[0] : "";

// A `:` is only allowed as part of a windows drive letter (ex: C:\foo)
// Otherwise, avoid them because they can refer to NTFS alternate data streams.
return driveLetter + name.substr(driveLetter.length).replace(/[\0?*:]/g, '_');
}
2 changes: 1 addition & 1 deletion test/chunking-form/samples/sanitize-chunk-names/_config.js
Expand Up @@ -5,7 +5,7 @@ module.exports = {
plugins: [
{
options(options) {
options.input = ['\0virtual-entry-1', '\0virtual-entry-2'];
options.input = ['\0virtual:entry-1', '\0virtual:entry-2'];
return options;
},
resolveId(id) {
Expand Down

This file was deleted.

This file was deleted.

@@ -0,0 +1,7 @@
define(function () { 'use strict';

var _virtual_entry1 = "\u0000virtual:entry-1";

return _virtual_entry1;

});
@@ -0,0 +1,7 @@
define(function () { 'use strict';

var _virtual_entry2 = "\u0000virtual:entry-2";

return _virtual_entry2;

});

This file was deleted.

This file was deleted.

@@ -0,0 +1,5 @@
'use strict';

var _virtual_entry1 = "\u0000virtual:entry-1";

module.exports = _virtual_entry1;
@@ -0,0 +1,5 @@
'use strict';

var _virtual_entry2 = "\u0000virtual:entry-2";

module.exports = _virtual_entry2;

This file was deleted.

This file was deleted.

@@ -0,0 +1,3 @@
var _virtual_entry1 = "\u0000virtual:entry-1";

export default _virtual_entry1;
@@ -0,0 +1,3 @@
var _virtual_entry2 = "\u0000virtual:entry-2";

export default _virtual_entry2;
Expand Up @@ -3,7 +3,7 @@ System.register([], function (exports) {
return {
execute: function () {

var _virtualEntry1 = exports('default', "\u0000virtual-entry-1");
var _virtual_entry1 = exports('default', "\u0000virtual:entry-1");

}
};
Expand Down
Expand Up @@ -3,7 +3,7 @@ System.register([], function (exports) {
return {
execute: function () {

var _virtualEntry2 = exports('default', "\u0000virtual-entry-2");
var _virtual_entry2 = exports('default', "\u0000virtual:entry-2");

}
};
Expand Down

0 comments on commit 85304f2

Please sign in to comment.