From 088a55f80d5a3ac52eec0af6f546034ebcaa7b97 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald <jonas.jenwald@gmail.com> Date: Tue, 13 Apr 2021 18:26:18 +0200 Subject: [PATCH] Enable the `no-var` rule in the `src/core/xref.js` file --- src/core/xref.js | 117 +++++++++++++++++++++++------------------------ 1 file changed, 58 insertions(+), 59 deletions(-) diff --git a/src/core/xref.js b/src/core/xref.js index aac2c368a..4aa121624 100644 --- a/src/core/xref.js +++ b/src/core/xref.js @@ -12,7 +12,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -/* eslint-disable no-var */ import { assert, @@ -71,7 +70,7 @@ class XRef { } parse(recoveryMode = false) { - var trailerDict; + let trailerDict; if (!recoveryMode) { trailerDict = this.readXRef(); } else { @@ -91,8 +90,8 @@ class XRef { warn(`XRef.parse - Invalid "Encrypt" reference: "${ex}".`); } if (isDict(encrypt)) { - var ids = trailerDict.get("ID"); - var fileId = ids && ids.length ? ids[0] : ""; + const ids = trailerDict.get("ID"); + const fileId = ids && ids.length ? ids[0] : ""; // The 'Encrypt' dictionary itself should not be encrypted, and by // setting `suppressEncryption` we can prevent an infinite loop inside // of `XRef_fetchUncompressed` if the dictionary contains indirect @@ -137,7 +136,7 @@ class XRef { }; } - var obj = this.readXRefTable(parser); + const obj = this.readXRefTable(parser); // Sanity check if (!isCmd(obj, "trailer")) { @@ -154,7 +153,7 @@ class XRef { // >> // The parser goes through the entire stream << ... >> and provides // a getter interface for the key-value table - var dict = parser.getObj(); + let dict = parser.getObj(); // The pdflib PDF generator can generate a nested trailer dictionary if (!isDict(dict) && dict.dict) { @@ -181,14 +180,14 @@ class XRef { // trailer // ... - var stream = parser.lexer.stream; - var tableState = this.tableState; + const stream = parser.lexer.stream; + const tableState = this.tableState; stream.pos = tableState.streamPos; parser.buf1 = tableState.parserBuf1; parser.buf2 = tableState.parserBuf2; // Outer loop is over subsection headers - var obj; + let obj; while (true) { if (!("firstEntryNum" in tableState) || !("entryCount" in tableState)) { @@ -199,24 +198,24 @@ class XRef { tableState.entryCount = parser.getObj(); } - var first = tableState.firstEntryNum; - var count = tableState.entryCount; + let first = tableState.firstEntryNum; + const count = tableState.entryCount; if (!Number.isInteger(first) || !Number.isInteger(count)) { throw new FormatError( "Invalid XRef table: wrong types in subsection header" ); } // Inner loop is over objects themselves - for (var i = tableState.entryNum; i < count; i++) { + for (let i = tableState.entryNum; i < count; i++) { tableState.streamPos = stream.pos; tableState.entryNum = i; tableState.parserBuf1 = parser.buf1; tableState.parserBuf2 = parser.buf2; - var entry = {}; + const entry = {}; entry.offset = parser.getObj(); entry.gen = parser.getObj(); - var type = parser.getObj(); + const type = parser.getObj(); if (type instanceof Cmd) { switch (type.cmd) { @@ -270,9 +269,9 @@ class XRef { if (!("streamState" in this)) { // Stores state of the stream as we process it so we can resume // from middle of stream in case of missing data error - var streamParameters = stream.dict; - var byteWidths = streamParameters.get("W"); - var range = streamParameters.get("Index"); + const streamParameters = stream.dict; + const byteWidths = streamParameters.get("W"); + let range = streamParameters.get("Index"); if (!range) { range = [0, streamParameters.get("Size")]; } @@ -291,19 +290,19 @@ class XRef { } readXRefStream(stream) { - var i, j; - var streamState = this.streamState; + let i, j; + const streamState = this.streamState; stream.pos = streamState.streamPos; - var byteWidths = streamState.byteWidths; - var typeFieldWidth = byteWidths[0]; - var offsetFieldWidth = byteWidths[1]; - var generationFieldWidth = byteWidths[2]; + const byteWidths = streamState.byteWidths; + const typeFieldWidth = byteWidths[0]; + const offsetFieldWidth = byteWidths[1]; + const generationFieldWidth = byteWidths[2]; - var entryRanges = streamState.entryRanges; + const entryRanges = streamState.entryRanges; while (entryRanges.length > 0) { - var first = entryRanges[0]; - var n = entryRanges[1]; + const first = entryRanges[0]; + const n = entryRanges[1]; if (!Number.isInteger(first) || !Number.isInteger(n)) { throw new FormatError(`Invalid XRef range fields: ${first}, ${n}`); @@ -321,7 +320,7 @@ class XRef { streamState.entryNum = i; streamState.streamPos = stream.pos; - var type = 0, + let type = 0, offset = 0, generation = 0; for (j = 0; j < typeFieldWidth; ++j) { @@ -337,7 +336,7 @@ class XRef { for (j = 0; j < generationFieldWidth; ++j) { generation = (generation << 8) | stream.getByte(); } - var entry = {}; + const entry = {}; entry.offset = offset; entry.gen = generation; switch (type) { @@ -366,15 +365,15 @@ class XRef { indexObjects() { // Simple scan through the PDF content to find objects, // trailers and XRef streams. - var TAB = 0x9, + const TAB = 0x9, LF = 0xa, CR = 0xd, SPACE = 0x20; - var PERCENT = 0x25, + const PERCENT = 0x25, LT = 0x3c; function readToken(data, offset) { - var token = "", + let token = "", ch = data[offset]; while (ch !== LF && ch !== CR && ch !== LT) { if (++offset >= data.length) { @@ -386,12 +385,12 @@ class XRef { return token; } function skipUntil(data, offset, what) { - var length = what.length, + const length = what.length, dataLength = data.length; - var skipped = 0; + let skipped = 0; // finding byte sequence while (offset < dataLength) { - var i = 0; + let i = 0; while (i < length && data[offset + i] === what[i]) { ++i; } @@ -403,30 +402,30 @@ class XRef { } return skipped; } - var objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; + const objRegExp = /^(\d+)\s+(\d+)\s+obj\b/; const endobjRegExp = /\bendobj[\b\s]$/; const nestedObjRegExp = /\s+(\d+\s+\d+\s+obj[\b\s<])$/; const CHECK_CONTENT_LENGTH = 25; - var trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); + const trailerBytes = new Uint8Array([116, 114, 97, 105, 108, 101, 114]); // prettier-ignore - var startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, + const startxrefBytes = new Uint8Array([115, 116, 97, 114, 116, 120, 114, 101, 102]); const objBytes = new Uint8Array([111, 98, 106]); - var xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); + const xrefBytes = new Uint8Array([47, 88, 82, 101, 102]); // Clear out any existing entries, since they may be bogus. this.entries.length = 0; - var stream = this.stream; + const stream = this.stream; stream.pos = 0; - var buffer = stream.getBytes(); - var position = stream.start, + const buffer = stream.getBytes(), length = buffer.length; - var trailers = [], + let position = stream.start; + const trailers = [], xrefStms = []; while (position < length) { - var ch = buffer[position]; + let ch = buffer[position]; if (ch === TAB || ch === LF || ch === CR || ch === SPACE) { ++position; continue; @@ -442,8 +441,8 @@ class XRef { } while (ch !== LF && ch !== CR); continue; } - var token = readToken(buffer, position); - var m; + const token = readToken(buffer, position); + let m; if ( token.startsWith("xref") && (token.length === 4 || /\s/.test(token[4])) @@ -497,7 +496,7 @@ class XRef { // checking XRef stream suspect // (it shall have '/XRef' and next char is not a letter) - var xrefTagOffset = skipUntil(content, 0, xrefBytes); + const xrefTagOffset = skipUntil(content, 0, xrefBytes); if (xrefTagOffset < contentLength && content[xrefTagOffset + 5] < 64) { xrefStms.push(position - stream.start); this.xrefstms[position - stream.start] = 1; // Avoid recursion @@ -529,7 +528,7 @@ class XRef { allowStreams: true, recoveryMode: true, }); - var obj = parser.getObj(); + const obj = parser.getObj(); if (!isCmd(obj, "trailer")) { continue; } @@ -572,7 +571,7 @@ class XRef { } readXRef(recoveryMode = false) { - var stream = this.stream; + const stream = this.stream; // Keep track of already parsed XRef tables, to prevent an infinite loop // when parsing corrupt PDF files where e.g. the /Prev entries create a // circular dependency between tables (fixes bug1393476.pdf). @@ -580,7 +579,7 @@ class XRef { try { while (this.startXRefQueue.length) { - var startXRef = this.startXRefQueue[0]; + const startXRef = this.startXRefQueue[0]; if (startXRefParsedCache.has(startXRef)) { warn("readXRef - skipping XRef table since it was already parsed."); @@ -596,8 +595,8 @@ class XRef { xref: this, allowStreams: true, }); - var obj = parser.getObj(); - var dict; + let obj = parser.getObj(); + let dict; // Get dictionary if (isCmd(obj, "xref")) { @@ -610,7 +609,7 @@ class XRef { // Recursively get other XRefs 'XRefStm', if any obj = dict.get("XRefStm"); if (Number.isInteger(obj)) { - var pos = obj; + const pos = obj; // ignore previously loaded xref streams // (possible infinite recursion) if (!(pos in this.xrefstms)) { @@ -666,7 +665,7 @@ class XRef { } getEntry(i) { - var xrefEntry = this.entries[i]; + const xrefEntry = this.entries[i]; if (xrefEntry && !xrefEntry.free && xrefEntry.offset) { return xrefEntry; } @@ -720,12 +719,12 @@ class XRef { } fetchUncompressed(ref, xrefEntry, suppressEncryption = false) { - var gen = ref.gen; - var num = ref.num; + const gen = ref.gen; + let num = ref.num; if (xrefEntry.gen !== gen) { throw new XRefEntryException(`Inconsistent generation in XRef: ${ref}`); } - var stream = this.stream.makeSubStream( + const stream = this.stream.makeSubStream( xrefEntry.offset + this.stream.start ); const parser = new Parser({ @@ -733,9 +732,9 @@ class XRef { xref: this, allowStreams: true, }); - var obj1 = parser.getObj(); - var obj2 = parser.getObj(); - var obj3 = parser.getObj(); + const obj1 = parser.getObj(); + const obj2 = parser.getObj(); + const obj3 = parser.getObj(); if (obj1 !== num || obj2 !== gen || !(obj3 instanceof Cmd)) { throw new XRefEntryException(`Bad (uncompressed) XRef entry: ${ref}`);