Skip to content

Commit 3c43ae7

Browse files
committed
[Fix] defaultPaths: handle null homedir gracefully
1 parent 53313fe commit 3c43ae7

File tree

3 files changed

+51
-0
lines changed

3 files changed

+51
-0
lines changed

lib/async.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ var nodeModulesRegex = /[/\\]node_modules[/\\]*$/;
2323

2424
var homedir = getHomedir();
2525
function defaultPaths() {
26+
if (!homedir) return [];
2627
return [
2728
path.join(homedir, '.node_modules'),
2829
path.join(homedir, '.node_libraries')

lib/sync.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ var nodeModulesRegex = /[/\\]node_modules[/\\]*$/;
2323

2424
var homedir = getHomedir();
2525
function defaultPaths() {
26+
if (!homedir) return [];
2627
return [
2728
path.join(homedir, '.node_modules'),
2829
path.join(homedir, '.node_libraries')

test/default_paths.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
'use strict';
2+
3+
var path = require('path');
4+
var test = require('tape');
5+
var mockProperty = require('mock-property');
6+
7+
var homedirPath = require.resolve('../lib/homedir');
8+
var asyncPath = require.resolve('../async');
9+
var libAsyncPath = require.resolve('../lib/async');
10+
var syncPath = require.resolve('../sync');
11+
var libSyncPath = require.resolve('../lib/sync');
12+
13+
function mockNullHomedir(t) {
14+
t.teardown(mockProperty(require.cache, homedirPath, {
15+
value: { id: homedirPath, filename: homedirPath, loaded: true, exports: function () { return null; } }
16+
}));
17+
}
18+
19+
test('async: null homedir does not throw', function (t) {
20+
t.plan(2);
21+
22+
mockNullHomedir(t);
23+
t.teardown(mockProperty(require.cache, asyncPath, { 'delete': true }));
24+
t.teardown(mockProperty(require.cache, libAsyncPath, { 'delete': true }));
25+
26+
var resolve = require('../lib/async');
27+
28+
var dir = path.join(__dirname, 'resolver');
29+
30+
resolve('./baz', { basedir: dir }, function (err, res) {
31+
t.error(err, 'no error');
32+
t.equal(res, path.join(dir, 'baz', 'quux.js'), 'resolves correctly with null homedir');
33+
});
34+
});
35+
36+
test('sync: null homedir does not throw', function (t) {
37+
mockNullHomedir(t);
38+
t.teardown(mockProperty(require.cache, syncPath, { 'delete': true }));
39+
t.teardown(mockProperty(require.cache, libSyncPath, { 'delete': true }));
40+
41+
var resolveSync = require('../lib/sync');
42+
43+
var dir = path.join(__dirname, 'resolver');
44+
45+
var res = resolveSync('./baz', { basedir: dir });
46+
t.equal(res, path.join(dir, 'baz', 'quux.js'), 'resolves correctly with null homedir');
47+
48+
t.end();
49+
});

0 commit comments

Comments
 (0)