From f68f60099e9a497ec2e8ef967b8aa7a17bcfb2bd Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Mon, 28 May 2018 11:55:34 +0200 Subject: [PATCH] Remove usage of `makeSubStream` from `Type1Parser.extractFontProgram` in src/core/type1_parser.js (issue 9735) This avoids the initialization of, potentially thousands of, unnecessary `Stream` objects, by getting the required number of bytes directly instead. Given the special behaviour, when `length === 0`, of the `getBytes`/`skip` methods, it's also necessary to handle that particular case to prevent errors when encountering empty CharStrings. --- src/core/type1_parser.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/core/type1_parser.js b/src/core/type1_parser.js index 2bbf259c2..0a54c4038 100644 --- a/src/core/type1_parser.js +++ b/src/core/type1_parser.js @@ -559,11 +559,9 @@ var Type1Parser = (function Type1ParserClosure() { var glyph = this.getToken(); length = this.readInt(); this.getToken(); // read in 'RD' or '-|' - data = stream.makeSubStream(stream.pos, length); + data = (length > 0 ? stream.getBytes(length) : new Uint8Array(0)); lenIV = program.properties.privateData['lenIV']; - encoded = this.readCharStrings(data.getBytes(), lenIV); - // Skip past the required space and binary data. - stream.skip(length); + encoded = this.readCharStrings(data, lenIV); this.nextChar(); token = this.getToken(); // read in 'ND' or '|-' if (token === 'noaccess') { @@ -582,11 +580,9 @@ var Type1Parser = (function Type1ParserClosure() { var index = this.readInt(); length = this.readInt(); this.getToken(); // read in 'RD' or '-|' - data = stream.makeSubStream(stream.pos, length); + data = (length > 0 ? stream.getBytes(length) : new Uint8Array(0)); lenIV = program.properties.privateData['lenIV']; - encoded = this.readCharStrings(data.getBytes(), lenIV); - // Skip past the required space and binary data. - stream.skip(length); + encoded = this.readCharStrings(data, lenIV); this.nextChar(); token = this.getToken(); // read in 'NP' or '|' if (token === 'noaccess') {