From 25a0af7383d16a344de285bfb56f1c5b60f22a73 Mon Sep 17 00:00:00 2001 From: Ylian Saint-Hilaire Date: Tue, 3 Mar 2020 15:14:08 -0800 Subject: [PATCH] Improved mcrec corrupt file handling. --- mcrec.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/mcrec.js b/mcrec.js index f1fa9112..6fa02519 100644 --- a/mcrec.js +++ b/mcrec.js @@ -63,7 +63,15 @@ function createIndex(state, ptr) { state.lastIndex += 10; } -function processBlock(state, block) { +function processBlock(state, block, err) { + if (err != null) { + // Error reading the next block, exit now. + fs.close(state.recFile, function () { + for (var i in state) { delete state[i]; } // Clear the state. + log("Error."); + }); + return; + } if (block == null) { // We are done, close this file. writeIndex(state, function () { @@ -254,13 +262,14 @@ function readNextBlock(state, func) { if ((state.recFilePtr + 16) > state.recFileSize) { func(state, null); return; } var r = {}, buf = Buffer.alloc(16); fs.read(state.recFile, buf, 0, 16, state.recFilePtr, function (err, bytesRead, buf) { + if (bytesRead != 16) { func(state, null, true); return; } // Error r.type = buf.readInt16BE(0); r.flags = buf.readInt16BE(2); r.size = buf.readInt32BE(4); r.time = buf.readIntBE(8, 8); r.date = new Date(r.time); r.ptr = state.recFilePtr; - if ((state.recFilePtr + 16 + r.size) > state.recFileSize) { func(state, null); return; } + if ((state.recFilePtr + 16 + r.size) > state.recFileSize) { func(state, null, true); return; } // Error if (r.size == 0) { r.data = null; func(state, r);