fs: fix infinite loop in fs.readFile()

Fix an infinite loop in the case where the file got truncated by a concurrent
writer while fs.readFile() was busy reading in the file.
pull/24503/head
Ben Noordhuis 2012-06-12 15:32:40 +02:00
parent e3a2dd1b13
commit 408bfece51
1 changed files with 8 additions and 6 deletions

View File

@ -148,18 +148,18 @@ fs.readFile = function(path, encoding_) {
});
}
if (bytesRead === 0) {
return close();
}
pos += bytesRead;
if (size !== 0) {
if (pos === size) close();
else read();
} else {
// unknown size, just read until we don't get bytes.
if (bytesRead > 0) {
buffers.push(buffer.slice(0, bytesRead));
read();
} else {
close();
}
buffers.push(buffer.slice(0, bytesRead));
read();
}
}
@ -168,6 +168,8 @@ fs.readFile = function(path, encoding_) {
if (size === 0) {
// collected the data into the buffers list.
buffer = Buffer.concat(buffers, pos);
} else if (pos < size) {
buffer = buffer.slice(0, pos);
}
if (encoding) buffer = buffer.toString(encoding);