diff options
author | Sakthipriyan Vairamani <thechargingvolcano@gmail.com> | 2015-08-23 01:33:43 +0530 |
---|---|---|
committer | Sakthipriyan Vairamani <thechargingvolcano@gmail.com> | 2016-07-22 03:58:33 +0530 |
commit | c86c1eeab56df8a627d3d8da27008221ee295d33 (patch) | |
tree | e0a89469bd155e1ef853d2bd945f2ace2fd3bf38 /test/parallel/test-fs-truncate-fd.js | |
parent | 9359de9dd2eae06ed5afcb75dad9bd4c466eb69d (diff) | |
download | android-node-v8-c86c1eeab56df8a627d3d8da27008221ee295d33.tar.gz android-node-v8-c86c1eeab56df8a627d3d8da27008221ee295d33.tar.bz2 android-node-v8-c86c1eeab56df8a627d3d8da27008221ee295d33.zip |
fs: validate args of truncate functions in js
This patch
1. moves the basic validation of arguments to `truncate` family
of functions to the JavaScript layer from the C++ layer.
2. makes sure that the File Descriptors are validated strictly.
PR-URL: https://github.com/nodejs/node/pull/2498
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
Diffstat (limited to 'test/parallel/test-fs-truncate-fd.js')
-rw-r--r-- | test/parallel/test-fs-truncate-fd.js | 76 |
1 files changed, 63 insertions, 13 deletions
diff --git a/test/parallel/test-fs-truncate-fd.js b/test/parallel/test-fs-truncate-fd.js index 2514b80f09..29b03284a2 100644 --- a/test/parallel/test-fs-truncate-fd.js +++ b/test/parallel/test-fs-truncate-fd.js @@ -1,21 +1,71 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var path = require('path'); -var fs = require('fs'); -var tmp = common.tmpDir; +const common = require('../common'); +const assert = require('assert'); +const fs = require('fs'); +const path = require('path'); + common.refreshTmpDir(); -var filename = path.resolve(tmp, 'truncate-file.txt'); +const fds = []; +const filename = path.resolve(common.tmpDir, 'truncate-file.txt'); fs.writeFileSync(filename, 'hello world', 'utf8'); -var fd = fs.openSync(filename, 'r+'); +const fd = fs.openSync(filename, 'r+'); +fds.push(fd); fs.truncate(fd, 5, common.mustCall(function(err) { - assert.ok(!err); + assert.ifError(err); assert.equal(fs.readFileSync(filename, 'utf8'), 'hello'); })); -process.on('exit', function() { - fs.closeSync(fd); - fs.unlinkSync(filename); - console.log('ok'); -}); +{ + // test partial truncation of a file + const fileName = path.resolve(common.tmpDir, 'truncate-file-1.txt'); + console.log(fileName); + fs.writeFileSync(fileName, 'hello world', 'utf8'); + const fd = fs.openSync(fileName, 'r+'); + fds.push(fd); + + fs.truncate(fd, 5, common.mustCall(function(err) { + assert.ifError(err); + assert.strictEqual(fs.readFileSync(fileName, 'utf8'), 'hello'); + })); +} + +{ + // make sure numbers as strings are not treated as fds with sync version + const fileName = path.resolve(common.tmpDir, 'truncate-file-2.txt'); + console.log(fileName); + fs.writeFileSync(fileName, 'One'); + const fd = fs.openSync(fileName, 'r'); + fds.push(fd); + + const fdFileName = path.resolve(common.tmpDir, '' + fd); + fs.writeFileSync(fdFileName, 'Two'); + assert.strictEqual(fs.readFileSync(fileName).toString(), 'One'); + assert.strictEqual(fs.readFileSync(fdFileName).toString(), 'Two'); + + fs.truncateSync(fdFileName); + assert.strictEqual(fs.readFileSync(fileName).toString(), 'One'); + assert.strictEqual(fs.readFileSync(fdFileName).toString(), ''); +} + +{ + // make sure numbers as strings are not treated as fds with async version + const fileName = path.resolve(common.tmpDir, 'truncate-file-3.txt'); + console.log(fileName); + fs.writeFileSync(fileName, 'One'); + const fd = fs.openSync(fileName, 'r'); + fds.push(fd); + + const fdFileName = path.resolve(common.tmpDir, '' + fd); + fs.writeFileSync(fdFileName, 'Two'); + assert.strictEqual(fs.readFileSync(fileName).toString(), 'One'); + assert.strictEqual(fs.readFileSync(fdFileName).toString(), 'Two'); + + fs.truncate(fdFileName, common.mustCall(function(err) { + assert.ifError(err); + assert.strictEqual(fs.readFileSync(fileName).toString(), 'One'); + assert.strictEqual(fs.readFileSync(fdFileName).toString(), ''); + })); +} + +process.on('exit', () => fds.forEach((fd) => fs.closeSync(fd))); |