|
2 | 2 | var common = require('../common');
|
3 | 3 | var assert = require('assert');
|
4 | 4 | var fs = require('fs');
|
| 5 | +var expectedError = /Path must be a string without null bytes/; |
5 | 6 |
|
6 | 7 | function check(async, sync) {
|
7 |
| - var expected = /Path must be a string without null bytes/; |
8 | 8 | var argsSync = Array.prototype.slice.call(arguments, 2);
|
9 | 9 | var argsAsync = argsSync.concat(function(er) {
|
10 |
| - assert(er && er.message.match(expected)); |
| 10 | + assert(er && er.message.match(expectedError)); |
11 | 11 | assert.equal(er.code, 'ENOENT');
|
12 | 12 | });
|
13 | 13 |
|
14 | 14 | if (sync)
|
15 | 15 | assert.throws(function() {
|
16 |
| - console.error(sync.name, argsSync); |
17 |
| - sync.apply(null, argsSync); |
18 |
| - }, expected); |
| 16 | + console.error(`fs.${sync}()`, argsSync); |
| 17 | + fs[sync].apply(null, argsSync); |
| 18 | + }, expectedError); |
19 | 19 |
|
20 |
| - if (async) |
21 |
| - async.apply(null, argsAsync); |
| 20 | + if (async) { |
| 21 | + console.error(`fs.${async}()`, argsAsync); |
| 22 | + fs[async].apply(null, argsAsync); |
| 23 | + } |
22 | 24 | }
|
23 | 25 |
|
24 |
| -check(fs.access, fs.accessSync, 'foo\u0000bar'); |
25 |
| -check(fs.access, fs.accessSync, 'foo\u0000bar', fs.F_OK); |
26 |
| -check(fs.appendFile, fs.appendFileSync, 'foo\u0000bar'); |
27 |
| -check(fs.chmod, fs.chmodSync, 'foo\u0000bar', '0644'); |
28 |
| -check(fs.chown, fs.chownSync, 'foo\u0000bar', 12, 34); |
29 |
| -check(fs.link, fs.linkSync, 'foo\u0000bar', 'foobar'); |
30 |
| -check(fs.link, fs.linkSync, 'foobar', 'foo\u0000bar'); |
31 |
| -check(fs.lstat, fs.lstatSync, 'foo\u0000bar'); |
32 |
| -check(fs.mkdir, fs.mkdirSync, 'foo\u0000bar', '0755'); |
33 |
| -check(fs.open, fs.openSync, 'foo\u0000bar', 'r'); |
34 |
| -check(fs.readFile, fs.readFileSync, 'foo\u0000bar'); |
35 |
| -check(fs.readdir, fs.readdirSync, 'foo\u0000bar'); |
36 |
| -check(fs.readlink, fs.readlinkSync, 'foo\u0000bar'); |
37 |
| -check(fs.realpath, fs.realpathSync, 'foo\u0000bar'); |
38 |
| -check(fs.rename, fs.renameSync, 'foo\u0000bar', 'foobar'); |
39 |
| -check(fs.rename, fs.renameSync, 'foobar', 'foo\u0000bar'); |
40 |
| -check(fs.rmdir, fs.rmdirSync, 'foo\u0000bar'); |
41 |
| -check(fs.stat, fs.statSync, 'foo\u0000bar'); |
42 |
| -check(fs.symlink, fs.symlinkSync, 'foo\u0000bar', 'foobar'); |
43 |
| -check(fs.symlink, fs.symlinkSync, 'foobar', 'foo\u0000bar'); |
44 |
| -check(fs.truncate, fs.truncateSync, 'foo\u0000bar'); |
45 |
| -check(fs.unlink, fs.unlinkSync, 'foo\u0000bar'); |
46 |
| -check(null, fs.unwatchFile, 'foo\u0000bar', common.fail); |
47 |
| -check(fs.utimes, fs.utimesSync, 'foo\u0000bar', 0, 0); |
48 |
| -check(null, fs.watch, 'foo\u0000bar', common.fail); |
49 |
| -check(null, fs.watchFile, 'foo\u0000bar', common.fail); |
50 |
| -check(fs.writeFile, fs.writeFileSync, 'foo\u0000bar'); |
| 26 | +check('access', 'accessSync', 'foo\u0000bar'); |
| 27 | +check('access', 'accessSync', 'foo\u0000bar', 'F_OK'); |
| 28 | +check('appendFile', 'appendFileSync', 'foo\u0000bar'); |
| 29 | +check('chmod', 'chmodSync', 'foo\u0000bar', '0644'); |
| 30 | +check('chown', 'chownSync', 'foo\u0000bar', 12, 34); |
| 31 | +check('link', 'linkSync', 'foo\u0000bar', 'foobar'); |
| 32 | +check('link', 'linkSync', 'foobar', 'foo\u0000bar'); |
| 33 | +check('lstat', 'lstatSync', 'foo\u0000bar'); |
| 34 | +check('mkdir', 'mkdirSync', 'foo\u0000bar', '0755'); |
| 35 | +check('open', 'openSync', 'foo\u0000bar', 'r'); |
| 36 | +check('readFile', 'readFileSync', 'foo\u0000bar'); |
| 37 | +check('readdir', 'readdirSync', 'foo\u0000bar'); |
| 38 | +check('readlink', 'readlinkSync', 'foo\u0000bar'); |
| 39 | +check('realpath', 'realpathSync', 'foo\u0000bar'); |
| 40 | +check('rename', 'renameSync', 'foo\u0000bar', 'foobar'); |
| 41 | +check('rename', 'renameSync', 'foobar', 'foo\u0000bar'); |
| 42 | +check('rmdir', 'rmdirSync', 'foo\u0000bar'); |
| 43 | +check('stat', 'statSync', 'foo\u0000bar'); |
| 44 | +check('symlink', 'symlinkSync', 'foo\u0000bar', 'foobar'); |
| 45 | +check('symlink', 'symlinkSync', 'foobar', 'foo\u0000bar'); |
| 46 | +check('truncate', 'truncateSync', 'foo\u0000bar'); |
| 47 | +check('unlink', 'unlinkSync', 'foo\u0000bar'); |
| 48 | +check(null, 'unwatchFile', 'foo\u0000bar', common.fail); |
| 49 | +check('utimes', 'utimesSync', 'foo\u0000bar', 0, 0); |
| 50 | +check(null, 'watch', 'foo\u0000bar', common.fail); |
| 51 | +check(null, 'watchFile', 'foo\u0000bar', common.fail); |
| 52 | +check('writeFile', 'writeFileSync', 'foo\u0000bar'); |
51 | 53 |
|
52 | 54 | // an 'error' for exists means that it doesn't exist.
|
53 | 55 | // one of many reasons why this file is the absolute worst.
|
54 | 56 | fs.exists('foo\u0000bar', function(exists) {
|
55 | 57 | assert(!exists);
|
56 | 58 | });
|
57 | 59 | assert(!fs.existsSync('foo\u0000bar'));
|
| 60 | + |
| 61 | +function checkRequire(arg) { |
| 62 | + assert.throws(function() { |
| 63 | + console.error(`require(${JSON.stringify(arg)})`); |
| 64 | + require(arg); |
| 65 | + }, expectedError); |
| 66 | +} |
| 67 | + |
| 68 | +checkRequire('\u0000'); |
| 69 | +checkRequire('foo\u0000bar'); |
| 70 | +checkRequire('foo\u0000'); |
| 71 | +checkRequire('foo/\u0000'); |
| 72 | +checkRequire('foo/\u0000.js'); |
| 73 | +checkRequire('\u0000/foo'); |
| 74 | +checkRequire('./foo/\u0000'); |
| 75 | +checkRequire('./\u0000/foo'); |
0 commit comments