fs: cleanup fd lchown and lchownSync
lchown and lchownSync were opening file descriptors without closing them. Looks like it has been that way for 7 years. Does anyone actually use these functions? PR-URL: https://github.com/nodejs/node/pull/18329 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com> Reviewed-By: Evan Lucas <evanlucas@me.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
This commit is contained in:
parent
fa33f026cc
commit
082f9525d9
30
lib/fs.js
30
lib/fs.js
@ -1330,20 +1330,16 @@ if (constants.O_SYMLINK !== undefined) {
|
||||
};
|
||||
|
||||
fs.lchmodSync = function(path, mode) {
|
||||
var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK);
|
||||
const fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK);
|
||||
|
||||
// Prefer to return the chmod error, if one occurs,
|
||||
// but still try to close, and report closing errors if they occur.
|
||||
var ret;
|
||||
let ret;
|
||||
try {
|
||||
ret = fs.fchmodSync(fd, mode);
|
||||
} catch (err) {
|
||||
try {
|
||||
fs.closeSync(fd);
|
||||
} catch (ignore) {}
|
||||
throw err;
|
||||
} finally {
|
||||
fs.closeSync(fd);
|
||||
}
|
||||
fs.closeSync(fd);
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
@ -1381,13 +1377,25 @@ if (constants.O_SYMLINK !== undefined) {
|
||||
callback(err);
|
||||
return;
|
||||
}
|
||||
fs.fchown(fd, uid, gid, callback);
|
||||
// Prefer to return the chown error, if one occurs,
|
||||
// but still try to close, and report closing errors if they occur.
|
||||
fs.fchown(fd, uid, gid, function(err) {
|
||||
fs.close(fd, function(err2) {
|
||||
callback(err || err2);
|
||||
});
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
fs.lchownSync = function(path, uid, gid) {
|
||||
var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK);
|
||||
return fs.fchownSync(fd, uid, gid);
|
||||
const fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK);
|
||||
let ret;
|
||||
try {
|
||||
ret = fs.fchownSync(fd, uid, gid);
|
||||
} finally {
|
||||
fs.closeSync(fd);
|
||||
}
|
||||
return ret;
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user