From c39d17399f53baa1546d3725a351b238f2bab6a8 Mon Sep 17 00:00:00 2001 From: JP Richardson Date: Sun, 17 Apr 2016 13:44:29 -0500 Subject: [PATCH] (#209) lib/mkdirs: tidy invalid-win32-path --- lib/mkdirs/__tests__/issue-209.test.js | 1 + lib/mkdirs/invalid-win32-path.js | 11 +++++++++++ lib/mkdirs/mkdirs-sync.js | 6 +++--- lib/mkdirs/mkdirs.js | 6 +++--- 4 files changed, 18 insertions(+), 6 deletions(-) create mode 100644 lib/mkdirs/invalid-win32-path.js diff --git a/lib/mkdirs/__tests__/issue-209.test.js b/lib/mkdirs/__tests__/issue-209.test.js index b4132f49..2f87e5ac 100644 --- a/lib/mkdirs/__tests__/issue-209.test.js +++ b/lib/mkdirs/__tests__/issue-209.test.js @@ -10,6 +10,7 @@ describe('mkdirp: issue-209, win32, when bad path, should return a cleaner error it('should return a cleaner error than inifinite loop, stack crash', function (done) { var file = './bad?dir' fse.mkdirp(file, function (err) { + assert(err, 'error is present') assert.strictEqual(err.code, 'EINVAL') done() }) diff --git a/lib/mkdirs/invalid-win32-path.js b/lib/mkdirs/invalid-win32-path.js new file mode 100644 index 00000000..bed26ae3 --- /dev/null +++ b/lib/mkdirs/invalid-win32-path.js @@ -0,0 +1,11 @@ +'use strict' + +// http://stackoverflow.com/a/62888/10333 contains more accurate +// TODO: expand to include the rest +var INVALID_PATH_CHARS = /[<>:"|?*]/ + +function invalidWin32Path (path) { + return INVALID_PATH_CHARS.test(path) +} + +module.exports = invalidWin32Path diff --git a/lib/mkdirs/mkdirs-sync.js b/lib/mkdirs/mkdirs-sync.js index bca8036b..303ef2ac 100644 --- a/lib/mkdirs/mkdirs-sync.js +++ b/lib/mkdirs/mkdirs-sync.js @@ -1,5 +1,6 @@ var fs = require('graceful-fs') var path = require('path') +var invalidWin32Path = require('./invalid-win32-path') var o777 = parseInt('0777', 8) @@ -11,11 +12,10 @@ function mkdirsSync (p, opts, made) { var mode = opts.mode var xfs = opts.fs || fs - if (process.platform === 'win32') { + if (process.platform === 'win32' && invalidWin32Path(p)) { var errInval = new Error(p + ' contains invalid WIN32 path characters.') errInval.code = 'EINVAL' - // http://stackoverflow.com/a/62888/10333 contains more accurate - if (/[<>:"|?*]/.test(p)) throw errInval + throw errInval } if (mode === undefined) { diff --git a/lib/mkdirs/mkdirs.js b/lib/mkdirs/mkdirs.js index 10bb61c5..51ec5451 100644 --- a/lib/mkdirs/mkdirs.js +++ b/lib/mkdirs/mkdirs.js @@ -1,5 +1,6 @@ var fs = require('graceful-fs') var path = require('path') +var invalidWin32Path = require('./invalid-win32-path') var o777 = parseInt('0777', 8) @@ -11,11 +12,10 @@ function mkdirs (p, opts, callback, made) { opts = { mode: opts } } - if (process.platform === 'win32') { + if (process.platform === 'win32' && invalidWin32Path(p)) { var errInval = new Error(p + ' contains invalid WIN32 path characters.') errInval.code = 'EINVAL' - // http://stackoverflow.com/a/62888/10333 contains more accurate - if (/[<>:"|?*]/.test(p)) return callback(errInval) + return callback(errInval) } var mode = opts.mode