fs: don't limit ftruncate() length to 32 bits
The length used by ftruncate() is 64 bits in the binding layer. This commit removes the 32 bit restriction in the JS layer. PR-URL: https://github.com/nodejs/node/pull/20851 Fixes: https://github.com/nodejs/node/issues/20844 Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
This commit is contained in:
parent
751a42a30f
commit
c700cc42da
@ -651,11 +651,7 @@ function ftruncate(fd, len = 0, callback) {
|
||||
len = 0;
|
||||
}
|
||||
validateUint32(fd, 'fd');
|
||||
// TODO(BridgeAR): This does not seem right.
|
||||
// There does not seem to be any validation before and if there is any, it
|
||||
// should work similar to validateUint32 or not have a upper cap at all.
|
||||
// This applies to all usage of `validateInt32(len, 'len')`.
|
||||
validateInt32(len, 'len');
|
||||
validateInteger(len, 'len');
|
||||
len = Math.max(0, len);
|
||||
const req = new FSReqWrap();
|
||||
req.oncomplete = makeCallback(callback);
|
||||
@ -664,7 +660,7 @@ function ftruncate(fd, len = 0, callback) {
|
||||
|
||||
function ftruncateSync(fd, len = 0) {
|
||||
validateUint32(fd, 'fd');
|
||||
validateInt32(len, 'len');
|
||||
validateInteger(len, 'len');
|
||||
len = Math.max(0, len);
|
||||
const ctx = {};
|
||||
binding.ftruncate(fd, len, undefined, ctx);
|
||||
|
@ -33,7 +33,7 @@ const {
|
||||
const {
|
||||
isUint32,
|
||||
validateAndMaskMode,
|
||||
validateInt32,
|
||||
validateInteger,
|
||||
validateUint32
|
||||
} = require('internal/validators');
|
||||
const pathModule = require('path');
|
||||
@ -263,7 +263,7 @@ async function truncate(path, len = 0) {
|
||||
|
||||
async function ftruncate(handle, len = 0) {
|
||||
validateFileHandle(handle);
|
||||
validateInt32(len, 'len');
|
||||
validateInteger(len, 'len');
|
||||
len = Math.max(0, len);
|
||||
return binding.ftruncate(handle.fd, len, kUsePromises);
|
||||
}
|
||||
|
@ -222,19 +222,6 @@ function testFtruncate(cb) {
|
||||
);
|
||||
});
|
||||
|
||||
// 2 ** 31 = 2147483648
|
||||
[2147483648, -2147483649].forEach((input) => {
|
||||
assert.throws(
|
||||
() => fs.ftruncate(fd, input),
|
||||
{
|
||||
code: 'ERR_OUT_OF_RANGE',
|
||||
name: 'RangeError [ERR_OUT_OF_RANGE]',
|
||||
message: 'The value of "len" is out of range. It must be ' +
|
||||
`>= -2147483648 && <= 2147483647. Received ${input}`
|
||||
}
|
||||
);
|
||||
});
|
||||
|
||||
fs.ftruncate(fd, undefined, common.mustCall(function(err) {
|
||||
assert.ifError(err);
|
||||
assert(fs.readFileSync(file5).equals(Buffer.from('')));
|
||||
|
Loading…
x
Reference in New Issue
Block a user