diff --git a/Makefile b/Makefile index 57dc6f8..26ef692 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ DEPS=$(sort $(wildcard bits/*.js)) TARGET=$(LIB).js FLOWTARGET=$(LIB).flow.js FLOWTGTS=$(TARGET) $(AUXTARGETS) +CLOSURE=/usr/local/lib/node_modules/google-closure-compiler/compiler.jar ## Main Targets @@ -86,6 +87,7 @@ lint: $(TARGET) $(AUXTARGETS) ## Run jshint and jscs checks @jshint --show-non-errors package.json @jshint --show-non-errors --extract=always $(HTMLLINT) @jscs $(TARGET) $(AUXTARGETS) + if [ -e $(CLOSURE) ]; then java -jar $(CLOSURE) $(REQS) $(FLOWTARGET) --jscomp_warning=reportUnknownTypes >/dev/null; fi .PHONY: flow flow: lint ## Run flow checker diff --git a/bits/08_blob.js b/bits/08_blob.js index 6bf3c06..65aac31 100644 --- a/bits/08_blob.js +++ b/bits/08_blob.js @@ -69,7 +69,7 @@ function ReadShift(size/*:number*/, t/*:?any*/) { function CheckField(hexstr/*:string*/, fld/*:string*/) { var m = __hexlify(this,this.l,hexstr.length>>1); - if(m !== hexstr) throw fld + 'Expected ' + hexstr + ' saw ' + m; + if(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m); this.l += hexstr.length>>1; } diff --git a/bits/31_version.js b/bits/31_version.js index 07abf30..2b00ec2 100644 --- a/bits/31_version.js +++ b/bits/31_version.js @@ -1 +1 @@ -exports.version = '0.11.0'; +exports.version = '0.11.1'; diff --git a/bits/40_parse.js b/bits/40_parse.js index 2b0d9fe..09e33dd 100644 --- a/bits/40_parse.js +++ b/bits/40_parse.js @@ -18,7 +18,7 @@ var mv = check_get_mver(blob); mver = mv[0]; switch(mver) { case 3: ssz = 512; break; case 4: ssz = 4096; break; - default: throw "Major Version: Expected 3 or 4 saw " + mver; + default: throw new Error("Major Version: Expected 3 or 4 saw " + mver); } /* reprocess header */ @@ -30,7 +30,7 @@ check_shifts(blob, mver); // Number of Directory Sectors var nds = blob.read_shift(4, 'i'); -if(mver === 3 && nds !== 0) throw '# Directory Sectors: Expected 0 saw ' + nds; +if(mver === 3 && nds !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + nds); // Number of FAT Sectors //var nfs = blob.read_shift(4, 'i'); diff --git a/bits/41_mver.js b/bits/41_mver.js index b5db2ea..75193f7 100644 --- a/bits/41_mver.js +++ b/bits/41_mver.js @@ -15,13 +15,14 @@ function check_shifts(blob, mver) { var shift = 0x09; // Byte Order - blob.chk('feff', 'Byte Order: '); + //blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff + blob.l += 2; // Sector Shift switch((shift = blob.read_shift(2))) { - case 0x09: if(mver !== 3) throw 'MajorVersion/SectorShift Mismatch'; break; - case 0x0c: if(mver !== 4) throw 'MajorVersion/SectorShift Mismatch'; break; - default: throw 'Sector Shift: Expected 9 or 12 saw ' + shift; + case 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break; + case 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break; + default: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift); } // Mini Sector Shift diff --git a/bits/45_readfat.js b/bits/45_readfat.js index 37aead4..0ece1a2 100644 --- a/bits/45_readfat.js +++ b/bits/45_readfat.js @@ -3,7 +3,7 @@ function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) { var q; if(idx === ENDOFCHAIN) { - if(cnt !== 0) throw "DIFAT chain shorter than expected"; + if(cnt !== 0) throw new Error("DIFAT chain shorter than expected"); } else if(idx !== -1 /*FREESECT*/) { var sector = sectors[idx], m = (ssz>>>2)-1; if(!sector) return; @@ -29,7 +29,7 @@ function get_sector_list(sectors, start, fat_addrs, ssz, chkd) { buf_chain.push(sectors[j]); var addr = fat_addrs[Math.floor(j*4/ssz)]; jj = ((j*4) & modulus); - if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); } @@ -52,7 +52,7 @@ function make_sector_list(sectors, dir_start, fat_addrs, ssz/*:number*/)/*:any*/ buf_chain.push(sectors[j]); var addr = fat_addrs[Math.floor(j*4/ssz)]; jj = ((j*4) & modulus); - if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); } diff --git a/cfb.flow.js b/cfb.flow.js index 7adaffe..0998b22 100644 --- a/cfb.flow.js +++ b/cfb.flow.js @@ -73,7 +73,7 @@ function ReadShift(size/*:number*/, t/*:?any*/) { function CheckField(hexstr/*:string*/, fld/*:string*/) { var m = __hexlify(this,this.l,hexstr.length>>1); - if(m !== hexstr) throw fld + 'Expected ' + hexstr + ' saw ' + m; + if(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m); this.l += hexstr.length>>1; } @@ -96,7 +96,7 @@ type SectorList = { /* [MS-CFB] v20130118 */ var CFB = (function _CFB(){ var exports = {}; -exports.version = '0.11.0'; +exports.version = '0.11.1'; function parse(file) { var mver = 3; // major version var ssz = 512; // sector size @@ -117,7 +117,7 @@ var mv = check_get_mver(blob); mver = mv[0]; switch(mver) { case 3: ssz = 512; break; case 4: ssz = 4096; break; - default: throw "Major Version: Expected 3 or 4 saw " + mver; + default: throw new Error("Major Version: Expected 3 or 4 saw " + mver); } /* reprocess header */ @@ -129,7 +129,7 @@ check_shifts(blob, mver); // Number of Directory Sectors var nds = blob.read_shift(4, 'i'); -if(mver === 3 && nds !== 0) throw '# Directory Sectors: Expected 0 saw ' + nds; +if(mver === 3 && nds !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + nds); // Number of FAT Sectors //var nfs = blob.read_shift(4, 'i'); @@ -215,13 +215,14 @@ function check_shifts(blob, mver) { var shift = 0x09; // Byte Order - blob.chk('feff', 'Byte Order: '); + //blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff + blob.l += 2; // Sector Shift switch((shift = blob.read_shift(2))) { - case 0x09: if(mver !== 3) throw 'MajorVersion/SectorShift Mismatch'; break; - case 0x0c: if(mver !== 4) throw 'MajorVersion/SectorShift Mismatch'; break; - default: throw 'Sector Shift: Expected 9 or 12 saw ' + shift; + case 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break; + case 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break; + default: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift); } // Mini Sector Shift @@ -303,7 +304,7 @@ function make_find_path(FullPaths, Paths, FileIndex, files, root_name) { function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) { var q; if(idx === ENDOFCHAIN) { - if(cnt !== 0) throw "DIFAT chain shorter than expected"; + if(cnt !== 0) throw new Error("DIFAT chain shorter than expected"); } else if(idx !== -1 /*FREESECT*/) { var sector = sectors[idx], m = (ssz>>>2)-1; if(!sector) return; @@ -329,7 +330,7 @@ function get_sector_list(sectors, start, fat_addrs, ssz, chkd) { buf_chain.push(sectors[j]); var addr = fat_addrs[Math.floor(j*4/ssz)]; jj = ((j*4) & modulus); - if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); } @@ -352,7 +353,7 @@ function make_sector_list(sectors, dir_start, fat_addrs, ssz/*:number*/)/*:any*/ buf_chain.push(sectors[j]); var addr = fat_addrs[Math.floor(j*4/ssz)]; jj = ((j*4) & modulus); - if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); } diff --git a/cfb.js b/cfb.js index 7a2127f..17bb8a5 100644 --- a/cfb.js +++ b/cfb.js @@ -73,7 +73,7 @@ function ReadShift(size, t) { function CheckField(hexstr, fld) { var m = __hexlify(this,this.l,hexstr.length>>1); - if(m !== hexstr) throw fld + 'Expected ' + hexstr + ' saw ' + m; + if(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m); this.l += hexstr.length>>1; } @@ -86,7 +86,7 @@ function prep_blob(blob, pos) { /* [MS-CFB] v20130118 */ var CFB = (function _CFB(){ var exports = {}; -exports.version = '0.11.0'; +exports.version = '0.11.1'; function parse(file) { var mver = 3; // major version var ssz = 512; // sector size @@ -107,7 +107,7 @@ var mv = check_get_mver(blob); mver = mv[0]; switch(mver) { case 3: ssz = 512; break; case 4: ssz = 4096; break; - default: throw "Major Version: Expected 3 or 4 saw " + mver; + default: throw new Error("Major Version: Expected 3 or 4 saw " + mver); } /* reprocess header */ @@ -119,7 +119,7 @@ check_shifts(blob, mver); // Number of Directory Sectors var nds = blob.read_shift(4, 'i'); -if(mver === 3 && nds !== 0) throw '# Directory Sectors: Expected 0 saw ' + nds; +if(mver === 3 && nds !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + nds); // Number of FAT Sectors //var nfs = blob.read_shift(4, 'i'); @@ -205,13 +205,14 @@ function check_shifts(blob, mver) { var shift = 0x09; // Byte Order - blob.chk('feff', 'Byte Order: '); + //blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff + blob.l += 2; // Sector Shift switch((shift = blob.read_shift(2))) { - case 0x09: if(mver !== 3) throw 'MajorVersion/SectorShift Mismatch'; break; - case 0x0c: if(mver !== 4) throw 'MajorVersion/SectorShift Mismatch'; break; - default: throw 'Sector Shift: Expected 9 or 12 saw ' + shift; + case 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break; + case 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break; + default: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift); } // Mini Sector Shift @@ -293,7 +294,7 @@ function make_find_path(FullPaths, Paths, FileIndex, files, root_name) { function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) { var q; if(idx === ENDOFCHAIN) { - if(cnt !== 0) throw "DIFAT chain shorter than expected"; + if(cnt !== 0) throw new Error("DIFAT chain shorter than expected"); } else if(idx !== -1 /*FREESECT*/) { var sector = sectors[idx], m = (ssz>>>2)-1; if(!sector) return; @@ -319,7 +320,7 @@ function get_sector_list(sectors, start, fat_addrs, ssz, chkd) { buf_chain.push(sectors[j]); var addr = fat_addrs[Math.floor(j*4/ssz)]; jj = ((j*4) & modulus); - if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); } @@ -342,7 +343,7 @@ function make_sector_list(sectors, dir_start, fat_addrs, ssz) { buf_chain.push(sectors[j]); var addr = fat_addrs[Math.floor(j*4/ssz)]; jj = ((j*4) & modulus); - if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); } diff --git a/package.json b/package.json index b65ab24..0cfafb4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cfb", - "version": "0.11.0", + "version": "0.11.1", "author": "sheetjs", "description": "Compound File Binary File Format extractor", "keywords": [ "cfb", "compression", "office" ], diff --git a/xlscfb.flow.js b/xlscfb.flow.js index 2bd8cb5..c5b75e1 100644 --- a/xlscfb.flow.js +++ b/xlscfb.flow.js @@ -30,7 +30,7 @@ type SectorList = { /* [MS-CFB] v20130118 */ var CFB = (function _CFB(){ var exports = {}; -exports.version = '0.11.0'; +exports.version = '0.11.1'; function parse(file) { var mver = 3; // major version var ssz = 512; // sector size @@ -51,7 +51,7 @@ var mv = check_get_mver(blob); mver = mv[0]; switch(mver) { case 3: ssz = 512; break; case 4: ssz = 4096; break; - default: throw "Major Version: Expected 3 or 4 saw " + mver; + default: throw new Error("Major Version: Expected 3 or 4 saw " + mver); } /* reprocess header */ @@ -63,7 +63,7 @@ check_shifts(blob, mver); // Number of Directory Sectors var nds = blob.read_shift(4, 'i'); -if(mver === 3 && nds !== 0) throw '# Directory Sectors: Expected 0 saw ' + nds; +if(mver === 3 && nds !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + nds); // Number of FAT Sectors //var nfs = blob.read_shift(4, 'i'); @@ -149,13 +149,14 @@ function check_shifts(blob, mver) { var shift = 0x09; // Byte Order - blob.chk('feff', 'Byte Order: '); + //blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff + blob.l += 2; // Sector Shift switch((shift = blob.read_shift(2))) { - case 0x09: if(mver !== 3) throw 'MajorVersion/SectorShift Mismatch'; break; - case 0x0c: if(mver !== 4) throw 'MajorVersion/SectorShift Mismatch'; break; - default: throw 'Sector Shift: Expected 9 or 12 saw ' + shift; + case 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break; + case 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break; + default: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift); } // Mini Sector Shift @@ -237,7 +238,7 @@ function make_find_path(FullPaths, Paths, FileIndex, files, root_name) { function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) { var q; if(idx === ENDOFCHAIN) { - if(cnt !== 0) throw "DIFAT chain shorter than expected"; + if(cnt !== 0) throw new Error("DIFAT chain shorter than expected"); } else if(idx !== -1 /*FREESECT*/) { var sector = sectors[idx], m = (ssz>>>2)-1; if(!sector) return; @@ -263,7 +264,7 @@ function get_sector_list(sectors, start, fat_addrs, ssz, chkd) { buf_chain.push(sectors[j]); var addr = fat_addrs[Math.floor(j*4/ssz)]; jj = ((j*4) & modulus); - if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); } @@ -286,7 +287,7 @@ function make_sector_list(sectors, dir_start, fat_addrs, ssz/*:number*/)/*:any*/ buf_chain.push(sectors[j]); var addr = fat_addrs[Math.floor(j*4/ssz)]; jj = ((j*4) & modulus); - if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); } diff --git a/xlscfb.js b/xlscfb.js index 5d937bc..5259536 100644 --- a/xlscfb.js +++ b/xlscfb.js @@ -6,7 +6,7 @@ var DO_NOT_EXPORT_CFB = true; /* [MS-CFB] v20130118 */ var CFB = (function _CFB(){ var exports = {}; -exports.version = '0.11.0'; +exports.version = '0.11.1'; function parse(file) { var mver = 3; // major version var ssz = 512; // sector size @@ -27,7 +27,7 @@ var mv = check_get_mver(blob); mver = mv[0]; switch(mver) { case 3: ssz = 512; break; case 4: ssz = 4096; break; - default: throw "Major Version: Expected 3 or 4 saw " + mver; + default: throw new Error("Major Version: Expected 3 or 4 saw " + mver); } /* reprocess header */ @@ -39,7 +39,7 @@ check_shifts(blob, mver); // Number of Directory Sectors var nds = blob.read_shift(4, 'i'); -if(mver === 3 && nds !== 0) throw '# Directory Sectors: Expected 0 saw ' + nds; +if(mver === 3 && nds !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + nds); // Number of FAT Sectors //var nfs = blob.read_shift(4, 'i'); @@ -125,13 +125,14 @@ function check_shifts(blob, mver) { var shift = 0x09; // Byte Order - blob.chk('feff', 'Byte Order: '); + //blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff + blob.l += 2; // Sector Shift switch((shift = blob.read_shift(2))) { - case 0x09: if(mver !== 3) throw 'MajorVersion/SectorShift Mismatch'; break; - case 0x0c: if(mver !== 4) throw 'MajorVersion/SectorShift Mismatch'; break; - default: throw 'Sector Shift: Expected 9 or 12 saw ' + shift; + case 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break; + case 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break; + default: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift); } // Mini Sector Shift @@ -213,7 +214,7 @@ function make_find_path(FullPaths, Paths, FileIndex, files, root_name) { function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) { var q; if(idx === ENDOFCHAIN) { - if(cnt !== 0) throw "DIFAT chain shorter than expected"; + if(cnt !== 0) throw new Error("DIFAT chain shorter than expected"); } else if(idx !== -1 /*FREESECT*/) { var sector = sectors[idx], m = (ssz>>>2)-1; if(!sector) return; @@ -239,7 +240,7 @@ function get_sector_list(sectors, start, fat_addrs, ssz, chkd) { buf_chain.push(sectors[j]); var addr = fat_addrs[Math.floor(j*4/ssz)]; jj = ((j*4) & modulus); - if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); } @@ -262,7 +263,7 @@ function make_sector_list(sectors, dir_start, fat_addrs, ssz) { buf_chain.push(sectors[j]); var addr = fat_addrs[Math.floor(j*4/ssz)]; jj = ((j*4) & modulus); - if(ssz < 4 + jj) throw "FAT boundary crossed: " + j + " 4 "+ssz; + if(ssz < 4 + jj) throw new Error("FAT boundary crossed: " + j + " 4 "+ssz); if(!sectors[addr]) break; j = __readInt32LE(sectors[addr], jj); }