diff --git a/cfb.js b/cfb.js index 068846b..3386504 100644 --- a/cfb.js +++ b/cfb.js @@ -240,11 +240,10 @@ for(j = 0; blob.l != 512; ) { /** Break the file up into sectors */ -if(file.length%ssz!==0) console.error("CFB: size " + file.length + " % "+ssz); - var nsectors = Math.ceil((file.length - ssz)/ssz); var sectors = []; -for(var i=1; i != nsectors + 1; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz); +for(var i=1; i != nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz); +sectors[nsectors-1] = file.slice(nsectors*ssz) /** Chase down the rest of the DIFAT chain to build a comprehensive list DIFAT chains by storing the next sector number as the last 32 bytes */ @@ -282,11 +281,11 @@ function get_next_sector(idx) { return get_buffer_u32(idx); } var chkd = new Array(sectors.length), sector_list = []; var get_sector = function get_sector(k) { return sectors[k]; }; for(i=0; i != sectors.length; ++i) { - var buf = []; - if(chkd[i]) continue; - for(j=i; j<=MAXREGSECT; buf.push(j),j=get_next_sector(j)) chkd[j] = true; - sector_list[i] = {nodes: buf}; - sector_list[i].data = Array(buf.map(get_sector)).toBuffer(); + var buf = [], k = (i + dir_start) % sectors.length; + if(chkd[k]) continue; + for(j=k; j<=MAXREGSECT; buf.push(j),j=get_next_sector(j)) chkd[j] = true; + sector_list[k] = {nodes: buf}; + sector_list[k].data = Array(buf.map(get_sector)).toBuffer(); } sector_list[dir_start].name = "!Directory"; if(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = "!MiniFAT"; @@ -335,7 +334,7 @@ function read_directory(idx) { } else { o.storage = 'minifat'; w = o.start * mssz; - if(minifat_store !== ENDOFCHAIN) { + if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN) { o.content = sector_list[minifat_store].data.slice(w,w+o.size); prep_blob(o.content); } diff --git a/package.json b/package.json index aa87b11..bb1a192 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cfb", - "version": "0.4.0", + "version": "0.5.0", "author": "Niggler", "description": "Compound File Binary File Format extractor", "keywords": [ "cfb", "compression", "office" ],