pdfjs-dist 2.0.943 → 2.1.266

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pdfjs-dist might be problematic. Click here for more details.

Files changed (159) hide show
  1. package/bower.json +1 -1
  2. package/build/pdf.js +15329 -11095
  3. package/build/pdf.js.map +1 -1
  4. package/build/pdf.min.js +1 -1
  5. package/build/pdf.worker.js +12497 -4184
  6. package/build/pdf.worker.js.map +1 -1
  7. package/build/pdf.worker.min.js +1 -1
  8. package/image_decoders/pdf.image_decoders.js +3438 -1209
  9. package/image_decoders/pdf.image_decoders.js.map +1 -1
  10. package/image_decoders/pdf.image_decoders.min.js +1 -1
  11. package/lib/core/annotation.js +335 -109
  12. package/lib/core/arithmetic_decoder.js +274 -244
  13. package/lib/core/bidi.js +64 -5
  14. package/lib/core/ccitt.js +172 -17
  15. package/lib/core/ccitt_stream.js +14 -5
  16. package/lib/core/cff_parser.js +304 -28
  17. package/lib/core/charsets.js +4 -3
  18. package/lib/core/chunked_stream.js +379 -149
  19. package/lib/core/cmap.js +210 -40
  20. package/lib/core/colorspace.js +332 -187
  21. package/lib/core/crypto.js +289 -44
  22. package/lib/core/document.js +508 -249
  23. package/lib/core/encodings.js +18 -9
  24. package/lib/core/evaluator.js +657 -119
  25. package/lib/core/font_renderer.js +217 -34
  26. package/lib/core/fonts.js +632 -41
  27. package/lib/core/function.js +252 -26
  28. package/lib/core/glyphlist.js +2 -1
  29. package/lib/core/image.js +124 -27
  30. package/lib/core/jbig2.js +425 -65
  31. package/lib/core/jbig2_stream.js +18 -7
  32. package/lib/core/jpeg_stream.js +24 -8
  33. package/lib/core/jpg.js +208 -16
  34. package/lib/core/jpx.js +395 -5
  35. package/lib/core/jpx_stream.js +17 -5
  36. package/lib/core/metrics.js +3 -3
  37. package/lib/core/murmurhash3.js +23 -5
  38. package/lib/core/obj.js +625 -132
  39. package/lib/core/operator_list.js +104 -3
  40. package/lib/core/parser.js +262 -25
  41. package/lib/core/pattern.js +144 -12
  42. package/lib/core/pdf_manager.js +104 -70
  43. package/lib/core/primitives.js +74 -21
  44. package/lib/core/ps_parser.js +133 -44
  45. package/lib/core/standard_fonts.js +9 -9
  46. package/lib/core/stream.js +283 -31
  47. package/lib/core/type1_parser.js +138 -6
  48. package/lib/core/unicode.js +28 -1
  49. package/lib/core/worker.js +192 -57
  50. package/lib/display/annotation_layer.js +303 -123
  51. package/lib/display/api.js +1073 -574
  52. package/lib/display/api_compatibility.js +4 -1
  53. package/lib/display/canvas.js +314 -18
  54. package/lib/display/content_disposition.js +70 -23
  55. package/lib/display/dom_utils.js +112 -59
  56. package/lib/display/fetch_stream.js +95 -50
  57. package/lib/display/font_loader.js +250 -132
  58. package/lib/display/metadata.js +37 -15
  59. package/lib/display/network.js +123 -34
  60. package/lib/display/network_utils.js +23 -10
  61. package/lib/display/node_stream.js +162 -65
  62. package/lib/display/pattern_helper.js +57 -6
  63. package/lib/display/svg.js +194 -18
  64. package/lib/display/text_layer.js +128 -14
  65. package/lib/display/transport_stream.js +83 -27
  66. package/lib/display/webgl.js +63 -17
  67. package/lib/display/worker_options.js +4 -3
  68. package/lib/display/xml_parser.js +162 -52
  69. package/lib/examples/node/domstubs.js +56 -3
  70. package/lib/pdf.js +15 -2
  71. package/lib/pdf.worker.js +4 -2
  72. package/lib/shared/compatibility.js +129 -26
  73. package/lib/shared/global_scope.js +1 -1
  74. package/lib/shared/is_node.js +3 -3
  75. package/lib/shared/message_handler.js +103 -45
  76. package/lib/shared/streams_polyfill.js +20 -16
  77. package/lib/shared/url_polyfill.js +8 -2
  78. package/lib/shared/util.js +246 -84
  79. package/lib/test/unit/annotation_spec.js +99 -73
  80. package/lib/test/unit/api_spec.js +347 -113
  81. package/lib/test/unit/bidi_spec.js +6 -6
  82. package/lib/test/unit/cff_parser_spec.js +17 -5
  83. package/lib/test/unit/clitests_helper.js +7 -8
  84. package/lib/test/unit/cmap_spec.js +79 -25
  85. package/lib/test/unit/colorspace_spec.js +65 -18
  86. package/lib/test/unit/crypto_spec.js +16 -4
  87. package/lib/test/unit/custom_spec.js +40 -52
  88. package/lib/test/unit/display_svg_spec.js +32 -16
  89. package/lib/test/unit/document_spec.js +2 -2
  90. package/lib/test/unit/dom_utils_spec.js +8 -8
  91. package/lib/test/unit/encodings_spec.js +24 -44
  92. package/lib/test/unit/evaluator_spec.js +15 -8
  93. package/lib/test/unit/function_spec.js +16 -4
  94. package/lib/test/unit/jasmine-boot.js +29 -16
  95. package/lib/test/unit/message_handler_spec.js +19 -6
  96. package/lib/test/unit/metadata_spec.js +64 -11
  97. package/lib/test/unit/murmurhash3_spec.js +2 -2
  98. package/lib/test/unit/network_spec.js +19 -4
  99. package/lib/test/unit/network_utils_spec.js +6 -4
  100. package/lib/test/unit/node_stream_spec.js +50 -26
  101. package/lib/test/unit/parser_spec.js +13 -29
  102. package/lib/test/unit/pdf_find_controller_spec.js +144 -32
  103. package/lib/test/unit/pdf_find_utils_spec.js +10 -9
  104. package/lib/test/unit/pdf_history_spec.js +20 -8
  105. package/lib/test/unit/primitives_spec.js +23 -3
  106. package/lib/test/unit/stream_spec.js +8 -3
  107. package/lib/test/unit/test_utils.js +89 -26
  108. package/lib/test/unit/testreporter.js +19 -1
  109. package/lib/test/unit/type1_parser_spec.js +7 -5
  110. package/lib/test/unit/ui_utils_spec.js +162 -38
  111. package/lib/test/unit/unicode_spec.js +13 -10
  112. package/lib/test/unit/util_spec.js +89 -9
  113. package/lib/web/annotation_layer_builder.js +38 -21
  114. package/lib/web/app.js +610 -245
  115. package/lib/web/app_options.js +54 -34
  116. package/lib/web/base_viewer.js +359 -162
  117. package/lib/web/chromecom.js +159 -80
  118. package/lib/web/debugger.js +161 -17
  119. package/lib/web/download_manager.js +29 -11
  120. package/lib/web/firefox_print_service.js +16 -8
  121. package/lib/web/firefoxcom.js +127 -91
  122. package/lib/web/genericcom.js +50 -31
  123. package/lib/web/genericl10n.js +46 -34
  124. package/lib/web/grab_to_pan.js +25 -3
  125. package/lib/web/interfaces.js +108 -61
  126. package/lib/web/overlay_manager.js +67 -45
  127. package/lib/web/password_prompt.js +20 -12
  128. package/lib/web/pdf_attachment_viewer.js +37 -17
  129. package/lib/web/pdf_cursor_tools.js +38 -15
  130. package/lib/web/pdf_document_properties.js +65 -24
  131. package/lib/web/pdf_find_bar.js +48 -20
  132. package/lib/web/pdf_find_controller.js +290 -89
  133. package/lib/web/pdf_find_utils.js +19 -3
  134. package/lib/web/pdf_history.js +186 -49
  135. package/lib/web/pdf_link_service.js +127 -52
  136. package/lib/web/pdf_outline_viewer.js +71 -21
  137. package/lib/web/pdf_page_view.js +188 -63
  138. package/lib/web/pdf_presentation_mode.js +98 -33
  139. package/lib/web/pdf_print_service.js +54 -10
  140. package/lib/web/pdf_rendering_queue.js +26 -4
  141. package/lib/web/pdf_sidebar.js +116 -62
  142. package/lib/web/pdf_sidebar_resizer.js +41 -15
  143. package/lib/web/pdf_single_page_viewer.js +65 -68
  144. package/lib/web/pdf_thumbnail_view.js +102 -31
  145. package/lib/web/pdf_thumbnail_viewer.js +62 -22
  146. package/lib/web/pdf_viewer.component.js +111 -31
  147. package/lib/web/pdf_viewer.js +80 -60
  148. package/lib/web/preferences.js +61 -39
  149. package/lib/web/secondary_toolbar.js +101 -82
  150. package/lib/web/text_layer_builder.js +124 -69
  151. package/lib/web/toolbar.js +67 -27
  152. package/lib/web/ui_utils.js +284 -128
  153. package/lib/web/view_history.js +75 -51
  154. package/lib/web/viewer_compatibility.js +2 -1
  155. package/package.json +1 -1
  156. package/web/pdf_viewer.css +1 -1
  157. package/web/pdf_viewer.js +2200 -973
  158. package/web/pdf_viewer.js.map +1 -1
  159. package/lib/web/dom_events.js +0 -140
@@ -30,9 +30,11 @@ function initializePDFJS(callback) {
30
30
  var PDFNetworkStream = modules[2].PDFNetworkStream;
31
31
  var PDFFetchStream = modules[3].PDFFetchStream;
32
32
  var isNodeJS = modules[4];
33
+
33
34
  if (isNodeJS()) {
34
35
  throw new Error('The `gulp unittest` command cannot be used in ' + 'Node.js environments.');
35
36
  }
37
+
36
38
  if (typeof Response !== 'undefined' && 'body' in Response.prototype && typeof ReadableStream !== 'undefined') {
37
39
  displayApi.setPDFNetworkStreamFactory(function (params) {
38
40
  return new PDFFetchStream(params);
@@ -42,10 +44,12 @@ function initializePDFJS(callback) {
42
44
  return new PDFNetworkStream(params);
43
45
  });
44
46
  }
47
+
45
48
  GlobalWorkerOptions.workerSrc = '../../build/generic/build/pdf.worker.js';
46
49
  callback();
47
50
  });
48
51
  }
52
+
49
53
  (function () {
50
54
  window.jasmine = jasmineRequire.core(jasmineRequire);
51
55
  jasmineRequire.html(jasmine);
@@ -57,26 +61,27 @@ function initializePDFJS(callback) {
57
61
  return window.location;
58
62
  }
59
63
  });
60
- var stoppingOnSpecFailure = queryString.getParam('failFast');
61
- env.stopOnSpecFailure(typeof stoppingOnSpecFailure === 'undefined' ? false : stoppingOnSpecFailure);
62
- var throwingExpectationFailures = queryString.getParam('throwFailures');
63
- env.throwOnExpectationFailure(throwingExpectationFailures);
64
+ var config = {
65
+ failFast: queryString.getParam('failFast'),
66
+ oneFailurePerSpec: queryString.getParam('oneFailurePerSpec'),
67
+ hideDisabled: queryString.getParam('hideDisabled')
68
+ };
64
69
  var random = queryString.getParam('random');
65
- env.randomizeTests(random);
70
+
71
+ if (random !== undefined && random !== '') {
72
+ config.random = random;
73
+ }
74
+
66
75
  var seed = queryString.getParam('seed');
76
+
67
77
  if (seed) {
68
- env.seed(seed);
78
+ config.seed = seed;
69
79
  }
80
+
70
81
  var htmlReporter = new jasmine.HtmlReporter({
71
82
  env: env,
72
- onStopExecutionClick: function onStopExecutionClick() {
73
- queryString.navigateWithNewParam('failFast', env.stoppingOnSpecFailure());
74
- },
75
- onThrowExpectationsClick: function onThrowExpectationsClick() {
76
- queryString.navigateWithNewParam('throwFailures', !env.throwingExpectationFailures());
77
- },
78
- onRandomClick: function onRandomClick() {
79
- queryString.navigateWithNewParam('random', !env.randomTests());
83
+ navigateWithNewParam: function navigateWithNewParam(key, value) {
84
+ return queryString.navigateWithNewParam(key, value);
80
85
  },
81
86
  addToExistingQueryString: function addToExistingQueryString(key, value) {
82
87
  return queryString.fullStringWithNewParam(key, value);
@@ -90,37 +95,45 @@ function initializePDFJS(callback) {
90
95
  createTextNode: function createTextNode() {
91
96
  return document.createTextNode.apply(document, arguments);
92
97
  },
93
-
94
98
  timer: new jasmine.Timer()
95
99
  });
96
100
  env.addReporter(htmlReporter);
101
+
97
102
  if (queryString.getParam('browser')) {
98
103
  var testReporter = new TestReporter(queryString.getParam('browser'), queryString.getParam('path'));
99
104
  env.addReporter(testReporter);
100
105
  }
106
+
101
107
  var specFilter = new jasmine.HtmlSpecFilter({
102
108
  filterString: function filterString() {
103
109
  return queryString.getParam('spec');
104
110
  }
105
111
  });
106
- env.specFilter = function (spec) {
112
+
113
+ config.specFilter = function (spec) {
107
114
  return specFilter.matches(spec.getFullName());
108
115
  };
116
+
117
+ env.configure(config);
109
118
  jasmine.DEFAULT_TIMEOUT_INTERVAL = 30000;
110
119
  var currentWindowOnload = window.onload;
120
+
111
121
  window.onload = function () {
112
122
  if (currentWindowOnload) {
113
123
  currentWindowOnload();
114
124
  }
125
+
115
126
  initializePDFJS(function () {
116
127
  htmlReporter.initialize();
117
128
  env.execute();
118
129
  });
119
130
  };
131
+
120
132
  function extend(destination, source) {
121
133
  for (var property in source) {
122
134
  destination[property] = source[property];
123
135
  }
136
+
124
137
  return destination;
125
138
  }
126
139
  })();
@@ -19,15 +19,15 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
24
+ var _util = require("../../shared/util");
25
25
 
26
- var _util = require('../../shared/util');
26
+ var _api = require("../../display/api");
27
27
 
28
- var _api = require('../../display/api');
28
+ var _message_handler = require("../../shared/message_handler");
29
29
 
30
- var _message_handler = require('../../shared/message_handler');
30
+ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
31
31
 
32
32
  describe('message_handler', function () {
33
33
  function sleep(ticks) {
@@ -35,12 +35,13 @@ describe('message_handler', function () {
35
35
  return ticks && sleep(ticks - 1);
36
36
  });
37
37
  }
38
+
38
39
  describe('sendWithStream', function () {
39
40
  it('should return a ReadableStream', function () {
40
41
  var port = new _api.LoopbackPort();
41
42
  var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
42
43
  var readable = messageHandler1.sendWithStream('fakeHandler');
43
- expect(typeof readable === 'undefined' ? 'undefined' : _typeof(readable)).toEqual('object');
44
+ expect(_typeof(readable)).toEqual('object');
44
45
  expect(_typeof(readable.getReader)).toEqual('function');
45
46
  });
46
47
  it('should read using a reader', function (done) {
@@ -52,9 +53,11 @@ describe('message_handler', function () {
52
53
  sink.onPull = function () {
53
54
  log += 'p';
54
55
  };
56
+
55
57
  sink.onCancel = function (reason) {
56
58
  log += 'c';
57
59
  };
60
+
58
61
  sink.ready.then(function () {
59
62
  sink.enqueue('hi');
60
63
  return sink.ready;
@@ -94,9 +97,11 @@ describe('message_handler', function () {
94
97
  sink.onPull = function () {
95
98
  log += 'p';
96
99
  };
100
+
97
101
  sink.onCancel = function (reason) {
98
102
  log += 'c';
99
103
  };
104
+
100
105
  log += '0';
101
106
  sink.ready.then(function () {
102
107
  log += '1';
@@ -144,9 +149,11 @@ describe('message_handler', function () {
144
149
  sink.onPull = function () {
145
150
  log += 'p';
146
151
  };
152
+
147
153
  sink.onCancel = function (reason) {
148
154
  log += 'c';
149
155
  };
156
+
150
157
  sink.ready.then(function () {
151
158
  sink.enqueue([1, 2, 3, 4], 4);
152
159
  return sink.ready;
@@ -183,9 +190,11 @@ describe('message_handler', function () {
183
190
  sink.onPull = function () {
184
191
  log += 'p';
185
192
  };
193
+
186
194
  sink.onCancel = function (reason) {
187
195
  log += 'c';
188
196
  };
197
+
189
198
  log += '0';
190
199
  sink.ready.then(function () {
191
200
  log += '1';
@@ -238,9 +247,11 @@ describe('message_handler', function () {
238
247
  sink.onPull = function () {
239
248
  log += 'p';
240
249
  };
250
+
241
251
  sink.onCancel = function (reason) {
242
252
  log += 'c';
243
253
  };
254
+
244
255
  log += '0';
245
256
  sink.ready.then(function () {
246
257
  log += '1';
@@ -295,9 +306,11 @@ describe('message_handler', function () {
295
306
  sink.onPull = function () {
296
307
  log += 'p';
297
308
  };
309
+
298
310
  sink.onCancel = function (reason) {
299
311
  log += 'c';
300
312
  };
313
+
301
314
  log += '0';
302
315
  sink.ready.then(function () {
303
316
  log += '1';
@@ -19,34 +19,38 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _util = require('../../shared/util');
24
+ var _util = require("../../shared/util");
25
25
 
26
- var _metadata = require('../../display/metadata');
26
+ var _metadata = require("../../display/metadata");
27
27
 
28
28
  describe('metadata', function () {
29
29
  it('should handle valid metadata', function () {
30
- var validData = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' + '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' + '<dc:title><rdf:Alt><rdf:li xml:lang="x-default">Foo bar baz</rdf:li>' + '</rdf:Alt></dc:title></rdf:Description></rdf:RDF></x:xmpmeta>';
31
- var metadata = new _metadata.Metadata(validData);
30
+ var data = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' + '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' + '<dc:title><rdf:Alt><rdf:li xml:lang="x-default">Foo bar baz</rdf:li>' + '</rdf:Alt></dc:title></rdf:Description></rdf:RDF></x:xmpmeta>';
31
+ var metadata = new _metadata.Metadata(data);
32
32
  expect(metadata.has('dc:title')).toBeTruthy();
33
33
  expect(metadata.has('dc:qux')).toBeFalsy();
34
34
  expect(metadata.get('dc:title')).toEqual('Foo bar baz');
35
35
  expect(metadata.get('dc:qux')).toEqual(null);
36
- expect(metadata.getAll()).toEqual({ 'dc:title': 'Foo bar baz' });
36
+ expect(metadata.getAll()).toEqual({
37
+ 'dc:title': 'Foo bar baz'
38
+ });
37
39
  });
38
40
  it('should repair and handle invalid metadata', function () {
39
- var invalidData = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' + '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' + '<dc:title>\\376\\377\\000P\\000D\\000F\\000&</dc:title>' + '</rdf:Description></rdf:RDF></x:xmpmeta>';
40
- var metadata = new _metadata.Metadata(invalidData);
41
+ var data = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' + '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' + '<dc:title>\\376\\377\\000P\\000D\\000F\\000&</dc:title>' + '</rdf:Description></rdf:RDF></x:xmpmeta>';
42
+ var metadata = new _metadata.Metadata(data);
41
43
  expect(metadata.has('dc:title')).toBeTruthy();
42
44
  expect(metadata.has('dc:qux')).toBeFalsy();
43
45
  expect(metadata.get('dc:title')).toEqual('PDF&');
44
46
  expect(metadata.get('dc:qux')).toEqual(null);
45
- expect(metadata.getAll()).toEqual({ 'dc:title': 'PDF&' });
47
+ expect(metadata.getAll()).toEqual({
48
+ 'dc:title': 'PDF&'
49
+ });
46
50
  });
47
51
  it('should repair and handle invalid metadata (bug 1424938)', function () {
48
- var invalidData = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\' ' + 'x:xmptk=\'XMP toolkit 2.9.1-13, framework 1.6\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\' ' + 'xmlns:iX=\'http://ns.adobe.com/iX/1.0/\'>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:pdf=\'http://ns.adobe.com/pdf/1.3/\' ' + 'pdf:Producer=\'GPL Ghostscript 8.63\'/>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:xap=\'http://ns.adobe.com/xap/1.0/\' ' + 'xap:ModifyDate=\'2009-02-13T12:42:54+01:00\' ' + 'xap:CreateDate=\'2009-02-13T12:42:54+01:00\'>' + '<xap:CreatorTool>\\376\\377\\000P\\000D\\000F\\000C\\000r\\000e\\000a' + '\\000t\\000o\\000r\\000 \\000V\\000e\\000r\\000s\\000i\\000o\\000n' + '\\000 \\0000\\000.\\0009\\000.\\0006</xap:CreatorTool>' + '</rdf:Description><rdf:Description ' + 'rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:xapMM=\'http://ns.adobe.com/xap/1.0/mm/\' ' + 'xapMM:DocumentID=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\'/>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:dc=\'http://purl.org/dc/elements/1.1/\' ' + 'dc:format=\'application/pdf\'><dc:title><rdf:Alt>' + '<rdf:li xml:lang=\'x-default\'>\\376\\377\\000L\\000&apos;\\000O\\000d' + '\\000i\\000s\\000s\\000e\\000e\\000 \\000t\\000h\\000\\351\\000m\\000a' + '\\000t\\000i\\000q\\000u\\000e\\000 \\000l\\000o\\000g\\000o\\000 ' + '\\000O\\000d\\000i\\000s\\000s\\000\\351\\000\\351\\000 \\000-\\000 ' + '\\000d\\000\\351\\000c\\000e\\000m\\000b\\000r\\000e\\000 \\0002\\0000' + '\\0000\\0008\\000.\\000p\\000u\\000b</rdf:li></rdf:Alt></dc:title>' + '<dc:creator><rdf:Seq><rdf:li>\\376\\377\\000O\\000D\\000I\\000S' + '</rdf:li></rdf:Seq></dc:creator></rdf:Description></rdf:RDF>' + '</x:xmpmeta>';
49
- var metadata = new _metadata.Metadata(invalidData);
52
+ var data = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\' ' + 'x:xmptk=\'XMP toolkit 2.9.1-13, framework 1.6\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\' ' + 'xmlns:iX=\'http://ns.adobe.com/iX/1.0/\'>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:pdf=\'http://ns.adobe.com/pdf/1.3/\' ' + 'pdf:Producer=\'GPL Ghostscript 8.63\'/>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:xap=\'http://ns.adobe.com/xap/1.0/\' ' + 'xap:ModifyDate=\'2009-02-13T12:42:54+01:00\' ' + 'xap:CreateDate=\'2009-02-13T12:42:54+01:00\'>' + '<xap:CreatorTool>\\376\\377\\000P\\000D\\000F\\000C\\000r\\000e\\000a' + '\\000t\\000o\\000r\\000 \\000V\\000e\\000r\\000s\\000i\\000o\\000n' + '\\000 \\0000\\000.\\0009\\000.\\0006</xap:CreatorTool>' + '</rdf:Description><rdf:Description ' + 'rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:xapMM=\'http://ns.adobe.com/xap/1.0/mm/\' ' + 'xapMM:DocumentID=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\'/>' + '<rdf:Description rdf:about=\'61652fa7-fc1f-11dd-0000-ce81d41f9ecf\' ' + 'xmlns:dc=\'http://purl.org/dc/elements/1.1/\' ' + 'dc:format=\'application/pdf\'><dc:title><rdf:Alt>' + '<rdf:li xml:lang=\'x-default\'>\\376\\377\\000L\\000&apos;\\000O\\000d' + '\\000i\\000s\\000s\\000e\\000e\\000 \\000t\\000h\\000\\351\\000m\\000a' + '\\000t\\000i\\000q\\000u\\000e\\000 \\000l\\000o\\000g\\000o\\000 ' + '\\000O\\000d\\000i\\000s\\000s\\000\\351\\000\\351\\000 \\000-\\000 ' + '\\000d\\000\\351\\000c\\000e\\000m\\000b\\000r\\000e\\000 \\0002\\0000' + '\\0000\\0008\\000.\\000p\\000u\\000b</rdf:li></rdf:Alt></dc:title>' + '<dc:creator><rdf:Seq><rdf:li>\\376\\377\\000O\\000D\\000I\\000S' + '</rdf:li></rdf:Seq></dc:creator></rdf:Description></rdf:RDF>' + '</x:xmpmeta>';
53
+ var metadata = new _metadata.Metadata(data);
50
54
  expect(metadata.has('dc:title')).toBeTruthy();
51
55
  expect(metadata.has('dc:qux')).toBeFalsy();
52
56
  expect(metadata.get('dc:title')).toEqual('L\'Odissee thématique logo Odisséé - décembre 2008.pub');
@@ -62,4 +66,53 @@ describe('metadata', function () {
62
66
  var metadata = new _metadata.Metadata(data);
63
67
  expect((0, _util.isEmptyObj)(metadata.getAll())).toEqual(true);
64
68
  });
69
+ it('should gracefully handle "junk" before the actual metadata (issue 10395)', function () {
70
+ var data = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>' + '<x:xmpmeta x:xmptk="TallComponents PDFObjects 1.0" ' + 'xmlns:x="adobe:ns:meta/">' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + '<rdf:Description rdf:about="" ' + 'xmlns:pdf="http://ns.adobe.com/pdf/1.3/">' + '<pdf:Producer>PDFKit.NET 4.0.102.0</pdf:Producer>' + '<pdf:Keywords></pdf:Keywords>' + '<pdf:PDFVersion>1.7</pdf:PDFVersion></rdf:Description>' + '<rdf:Description rdf:about="" ' + 'xmlns:xap="http://ns.adobe.com/xap/1.0/">' + '<xap:CreateDate>2018-12-27T13:50:36-08:00</xap:CreateDate>' + '<xap:ModifyDate>2018-12-27T13:50:38-08:00</xap:ModifyDate>' + '<xap:CreatorTool></xap:CreatorTool>' + '<xap:MetadataDate>2018-12-27T13:50:38-08:00</xap:MetadataDate>' + '</rdf:Description><rdf:Description rdf:about="" ' + 'xmlns:dc="http://purl.org/dc/elements/1.1/">' + '<dc:creator><rdf:Seq><rdf:li></rdf:li></rdf:Seq></dc:creator>' + '<dc:subject><rdf:Bag /></dc:subject>' + '<dc:description><rdf:Alt><rdf:li xml:lang="x-default">' + '</rdf:li></rdf:Alt></dc:description>' + '<dc:title><rdf:Alt><rdf:li xml:lang="x-default"></rdf:li>' + '</rdf:Alt></dc:title><dc:format>application/pdf</dc:format>' + '</rdf:Description></rdf:RDF></x:xmpmeta><?xpacket end="w"?>';
71
+ var metadata = new _metadata.Metadata(data);
72
+ expect(metadata.has('dc:title')).toBeTruthy();
73
+ expect(metadata.has('dc:qux')).toBeFalsy();
74
+ expect(metadata.get('dc:title')).toEqual('');
75
+ expect(metadata.get('dc:qux')).toEqual(null);
76
+ expect(metadata.getAll()).toEqual({
77
+ 'dc:creator': '',
78
+ 'dc:description': '',
79
+ 'dc:format': 'application/pdf',
80
+ 'dc:subject': '',
81
+ 'dc:title': '',
82
+ 'pdf:keywords': '',
83
+ 'pdf:pdfversion': '1.7',
84
+ 'pdf:producer': 'PDFKit.NET 4.0.102.0',
85
+ 'xap:createdate': '2018-12-27T13:50:36-08:00',
86
+ 'xap:creatortool': '',
87
+ 'xap:metadatadate': '2018-12-27T13:50:38-08:00',
88
+ 'xap:modifydate': '2018-12-27T13:50:38-08:00'
89
+ });
90
+ });
91
+ it('should correctly handle metadata containing "&apos" (issue 10407)', function () {
92
+ var data = '<x:xmpmeta xmlns:x=\'adobe:ns:meta/\'>' + '<rdf:RDF xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>' + '<rdf:Description xmlns:dc=\'http://purl.org/dc/elements/1.1/\'>' + '<dc:title><rdf:Alt>' + '<rdf:li xml:lang="x-default">&apos;Foo bar baz&apos;</rdf:li>' + '</rdf:Alt></dc:title></rdf:Description></rdf:RDF></x:xmpmeta>';
93
+ var metadata = new _metadata.Metadata(data);
94
+ expect(metadata.has('dc:title')).toBeTruthy();
95
+ expect(metadata.has('dc:qux')).toBeFalsy();
96
+ expect(metadata.get('dc:title')).toEqual('\'Foo bar baz\'');
97
+ expect(metadata.get('dc:qux')).toEqual(null);
98
+ expect(metadata.getAll()).toEqual({
99
+ 'dc:title': '\'Foo bar baz\''
100
+ });
101
+ });
102
+ it('should gracefully handle unbalanced end tags (issue 10410)', function () {
103
+ var data = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + '<rdf:Description rdf:about="" ' + 'xmlns:pdf="http://ns.adobe.com/pdf/1.3/">' + '<pdf:Producer>Soda PDF 5</pdf:Producer></rdf:Description>' + '<rdf:Description rdf:about="" ' + 'xmlns:xap="http://ns.adobe.com/xap/1.0/">' + '<xap:CreateDate>2018-10-02T08:14:49-05:00</xap:CreateDate>' + '<xap:CreatorTool>Soda PDF 5</xap:CreatorTool>' + '<xap:MetadataDate>2018-10-02T08:14:49-05:00</xap:MetadataDate> ' + '<xap:ModifyDate>2018-10-02T08:14:49-05:00</xap:ModifyDate>' + '</rdf:Description><rdf:Description rdf:about="" ' + 'xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">' + '<xmpMM:DocumentID>uuid:00000000-1c84-3cf9-89ba-bef0e729c831' + '</xmpMM:DocumentID></rdf:Description>' + '</rdf:RDF></x:xmpmeta><?xpacket end="w"?>';
104
+ var metadata = new _metadata.Metadata(data);
105
+ expect((0, _util.isEmptyObj)(metadata.getAll())).toEqual(true);
106
+ });
107
+ it('should not be vulnerable to the billion laughs attack', function () {
108
+ var data = '<?xml version="1.0"?>' + '<!DOCTYPE lolz [' + ' <!ENTITY lol "lol">' + ' <!ENTITY lol1 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">' + ' <!ENTITY lol2 "&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;&lol1;">' + ' <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">' + ' <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">' + ' <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">' + ' <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">' + ' <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">' + ' <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">' + ' <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">' + ']>' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + ' <rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/">' + ' <dc:title>' + ' <rdf:Alt>' + ' <rdf:li xml:lang="x-default">a&lol9;b</rdf:li>' + ' </rdf:Alt>' + ' </dc:title>' + ' </rdf:Description>' + '</rdf:RDF>';
109
+ var metadata = new _metadata.Metadata(data);
110
+ expect(metadata.has('dc:title')).toBeTruthy();
111
+ expect(metadata.has('dc:qux')).toBeFalsy();
112
+ expect(metadata.get('dc:title')).toEqual('a&lol9;b');
113
+ expect(metadata.get('dc:qux')).toEqual(null);
114
+ expect(metadata.getAll()).toEqual({
115
+ 'dc:title': 'a&lol9;b'
116
+ });
117
+ });
65
118
  });
@@ -19,9 +19,9 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _murmurhash = require('../../core/murmurhash3');
24
+ var _murmurhash = require("../../core/murmurhash3");
25
25
 
26
26
  describe('MurmurHash3_64', function () {
27
27
  it('instantiates without seed', function () {
@@ -19,9 +19,9 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _network = require('../../display/network');
24
+ var _network = require("../../display/network");
25
25
 
26
26
  describe('network', function () {
27
27
  var pdf1 = new URL('../pdfs/tracemonkey.pdf', window.location).href;
@@ -43,16 +43,19 @@ describe('network', function () {
43
43
  });
44
44
  var len = 0,
45
45
  count = 0;
46
+
46
47
  var read = function read() {
47
48
  return fullReader.read().then(function (result) {
48
49
  if (result.done) {
49
50
  return;
50
51
  }
52
+
51
53
  count++;
52
54
  len += result.value.byteLength;
53
55
  return read();
54
56
  });
55
57
  };
58
+
56
59
  var readPromise = Promise.all([read(), promise]);
57
60
  readPromise.then(function (page) {
58
61
  expect(len).toEqual(pdf1Length);
@@ -67,11 +70,13 @@ describe('network', function () {
67
70
  it('read with streaming', function (done) {
68
71
  var userAgent = window.navigator.userAgent;
69
72
  var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(userAgent);
73
+
70
74
  if (!m || m[1] < 9) {
71
75
  expect(true).toEqual(true);
72
76
  done();
73
77
  return;
74
78
  }
79
+
75
80
  var stream = new _network.PDFNetworkStream({
76
81
  url: pdf2,
77
82
  rangeChunkSize: 65536,
@@ -86,16 +91,19 @@ describe('network', function () {
86
91
  });
87
92
  var len = 0,
88
93
  count = 0;
94
+
89
95
  var read = function read() {
90
96
  return fullReader.read().then(function (result) {
91
97
  if (result.done) {
92
98
  return;
93
99
  }
100
+
94
101
  count++;
95
102
  len += result.value.byteLength;
96
103
  return read();
97
104
  });
98
105
  };
106
+
99
107
  var readPromise = Promise.all([read(), promise]);
100
108
  readPromise.then(function () {
101
109
  expect(len).toEqual(pdf2Length);
@@ -127,17 +135,24 @@ describe('network', function () {
127
135
  var tailSize = pdf1Length % rangeSize || rangeSize;
128
136
  var range1Reader = stream.getRangeReader(pdf1Length - tailSize - rangeSize, pdf1Length - tailSize);
129
137
  var range2Reader = stream.getRangeReader(pdf1Length - tailSize, pdf1Length);
130
- var result1 = { value: 0 },
131
- result2 = { value: 0 };
138
+ var result1 = {
139
+ value: 0
140
+ },
141
+ result2 = {
142
+ value: 0
143
+ };
144
+
132
145
  var read = function read(reader, lenResult) {
133
146
  return reader.read().then(function (result) {
134
147
  if (result.done) {
135
148
  return;
136
149
  }
150
+
137
151
  lenResult.value += result.value.byteLength;
138
152
  return read(reader, lenResult);
139
153
  });
140
154
  };
155
+
141
156
  var readPromises = Promise.all([read(range1Reader, result1), read(range2Reader, result2), promise]);
142
157
  readPromises.then(function () {
143
158
  expect(result1.value).toEqual(rangeSize);
@@ -19,17 +19,19 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _network_utils = require('../../display/network_utils');
24
+ var _network_utils = require("../../display/network_utils");
25
25
 
26
- var _util = require('../../shared/util');
26
+ var _util = require("../../shared/util");
27
27
 
28
28
  describe('network_utils', function () {
29
29
  describe('validateRangeRequestCapabilities', function () {
30
30
  it('rejects range chunk sizes that are not larger than zero', function () {
31
31
  expect(function () {
32
- (0, _network_utils.validateRangeRequestCapabilities)({ rangeChunkSize: 0 });
32
+ (0, _network_utils.validateRangeRequestCapabilities)({
33
+ rangeChunkSize: 0
34
+ });
33
35
  }).toThrow(new Error('Range chunk size must be larger than zero'));
34
36
  });
35
37
  it('rejects disabled or non-HTTP range requests', function () {
@@ -19,25 +19,34 @@
19
19
  * @licend The above is the entire license notice for the
20
20
  * Javascript code in this page
21
21
  */
22
- 'use strict';
22
+ "use strict";
23
23
 
24
- var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
24
+ var _util = require("../../shared/util");
25
25
 
26
- var _util = require('../../shared/util');
26
+ var _is_node = _interopRequireDefault(require("../../shared/is_node"));
27
27
 
28
- var _is_node = require('../../shared/is_node');
28
+ var _node_stream = require("../../display/node_stream");
29
29
 
30
- var _is_node2 = _interopRequireDefault(_is_node);
30
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
31
31
 
32
- var _node_stream = require('../../display/node_stream');
32
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
33
33
 
34
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
35
+
36
+ function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
37
+
38
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
39
+
40
+ (0, _util.assert)((0, _is_node.default)());
35
41
 
36
- (0, _util.assert)((0, _is_node2.default)());
37
42
  var path = require('path');
43
+
38
44
  var url = require('url');
45
+
39
46
  var http = require('http');
47
+
40
48
  var fs = require('fs');
49
+
41
50
  describe('node_stream', function () {
42
51
  var server = null;
43
52
  var port = null;
@@ -49,9 +58,10 @@ describe('node_stream', function () {
49
58
  fs.lstat(filePath, function (error, stat) {
50
59
  if (error) {
51
60
  response.writeHead(404);
52
- response.end('File ' + request.url + ' not found!');
61
+ response.end("File ".concat(request.url, " not found!"));
53
62
  return;
54
63
  }
64
+
55
65
  if (!request.headers['range']) {
56
66
  var contentLength = stat.size;
57
67
  var stream = fs.createReadStream(filePath);
@@ -73,7 +83,11 @@ describe('node_stream', function () {
73
83
  start: start,
74
84
  end: end
75
85
  });
76
- response.writeHead(206, { 'Content-Type': 'application/pdf' });
86
+
87
+ response.writeHead(206, {
88
+ 'Content-Type': 'application/pdf'
89
+ });
90
+
77
91
  _stream.pipe(response);
78
92
  }
79
93
  });
@@ -87,7 +101,7 @@ describe('node_stream', function () {
87
101
  });
88
102
  it('read both http(s) and filesystem pdf files', function (done) {
89
103
  var stream1 = new _node_stream.PDFNodeStream({
90
- url: 'http://127.0.0.1:' + port + '/tracemonkey.pdf',
104
+ url: "http://127.0.0.1:".concat(port, "/tracemonkey.pdf"),
91
105
  rangeChunkSize: 65536,
92
106
  disableStream: true,
93
107
  disableRange: true
@@ -100,38 +114,41 @@ describe('node_stream', function () {
100
114
  });
101
115
  var fullReader1 = stream1.getFullReader();
102
116
  var fullReader2 = stream2.getFullReader();
103
- var isStreamingSupported1 = void 0,
104
- isRangeSupported1 = void 0;
117
+ var isStreamingSupported1, isRangeSupported1;
105
118
  var promise1 = fullReader1.headersReady.then(function () {
106
119
  isStreamingSupported1 = fullReader1.isStreamingSupported;
107
120
  isRangeSupported1 = fullReader1.isRangeSupported;
108
121
  });
109
- var isStreamingSupported2 = void 0,
110
- isRangeSupported2 = void 0;
122
+ var isStreamingSupported2, isRangeSupported2;
111
123
  var promise2 = fullReader2.headersReady.then(function () {
112
124
  isStreamingSupported2 = fullReader2.isStreamingSupported;
113
125
  isRangeSupported2 = fullReader2.isRangeSupported;
114
126
  });
115
127
  var len1 = 0,
116
128
  len2 = 0;
129
+
117
130
  var read1 = function read1() {
118
131
  return fullReader1.read().then(function (result) {
119
132
  if (result.done) {
120
133
  return;
121
134
  }
135
+
122
136
  len1 += result.value.byteLength;
123
137
  return read1();
124
138
  });
125
139
  };
140
+
126
141
  var read2 = function read2() {
127
142
  return fullReader2.read().then(function (result) {
128
143
  if (result.done) {
129
144
  return;
130
145
  }
146
+
131
147
  len2 += result.value.byteLength;
132
148
  return read2();
133
149
  });
134
150
  };
151
+
135
152
  var readPromise = Promise.all([read1(), read2(), promise1, promise2]);
136
153
  readPromise.then(function (result) {
137
154
  expect(isStreamingSupported1).toEqual(false);
@@ -148,7 +165,7 @@ describe('node_stream', function () {
148
165
  it('read custom ranges for both http(s) and filesystem urls', function (done) {
149
166
  var rangeSize = 32768;
150
167
  var stream1 = new _node_stream.PDFNodeStream({
151
- url: 'http://127.0.0.1:' + port + '/tracemonkey.pdf',
168
+ url: "http://127.0.0.1:".concat(port, "/tracemonkey.pdf"),
152
169
  length: pdfLength,
153
170
  rangeChunkSize: rangeSize,
154
171
  disableStream: true,
@@ -163,12 +180,8 @@ describe('node_stream', function () {
163
180
  });
164
181
  var fullReader1 = stream1.getFullReader();
165
182
  var fullReader2 = stream2.getFullReader();
166
- var isStreamingSupported1 = void 0,
167
- isRangeSupported1 = void 0,
168
- fullReaderCancelled1 = void 0;
169
- var isStreamingSupported2 = void 0,
170
- isRangeSupported2 = void 0,
171
- fullReaderCancelled2 = void 0;
183
+ var isStreamingSupported1, isRangeSupported1, fullReaderCancelled1;
184
+ var isStreamingSupported2, isRangeSupported2, fullReaderCancelled2;
172
185
  var promise1 = fullReader1.headersReady.then(function () {
173
186
  isStreamingSupported1 = fullReader1.isStreamingSupported;
174
187
  isRangeSupported1 = fullReader1.isRangeSupported;
@@ -186,19 +199,30 @@ describe('node_stream', function () {
186
199
  var range12Reader = stream1.getRangeReader(pdfLength - tailSize, pdfLength);
187
200
  var range21Reader = stream2.getRangeReader(pdfLength - tailSize - rangeSize, pdfLength - tailSize);
188
201
  var range22Reader = stream2.getRangeReader(pdfLength - tailSize, pdfLength);
189
- var result11 = { value: 0 },
190
- result12 = { value: 0 };
191
- var result21 = { value: 0 },
192
- result22 = { value: 0 };
202
+ var result11 = {
203
+ value: 0
204
+ },
205
+ result12 = {
206
+ value: 0
207
+ };
208
+ var result21 = {
209
+ value: 0
210
+ },
211
+ result22 = {
212
+ value: 0
213
+ };
214
+
193
215
  var read = function read(reader, lenResult) {
194
216
  return reader.read().then(function (result) {
195
217
  if (result.done) {
196
218
  return;
197
219
  }
220
+
198
221
  lenResult.value += result.value.byteLength;
199
222
  return read(reader, lenResult);
200
223
  });
201
224
  };
225
+
202
226
  var readPromises = Promise.all([read(range11Reader, result11), read(range12Reader, result12), read(range21Reader, result21), read(range22Reader, result22), promise1, promise2]);
203
227
  readPromises.then(function () {
204
228
  expect(result11.value).toEqual(rangeSize);