pdfjs-dist 2.0.943 → 2.4.456

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 (192) hide show
  1. package/CODE_OF_CONDUCT.md +15 -0
  2. package/README.md +4 -0
  3. package/bower.json +1 -1
  4. package/build/pdf.js +8286 -14230
  5. package/build/pdf.js.map +1 -1
  6. package/build/pdf.min.js +22 -1
  7. package/build/pdf.worker.entry.js +5 -3
  8. package/build/pdf.worker.js +25500 -26628
  9. package/build/pdf.worker.js.map +1 -1
  10. package/build/pdf.worker.min.js +22 -1
  11. package/es5/build/pdf.js +25473 -0
  12. package/es5/build/pdf.js.map +1 -0
  13. package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
  14. package/es5/build/pdf.worker.js +57878 -0
  15. package/es5/build/pdf.worker.js.map +1 -0
  16. package/es5/web/images/annotation-check.svg +11 -0
  17. package/es5/web/images/annotation-comment.svg +16 -0
  18. package/es5/web/images/annotation-help.svg +26 -0
  19. package/es5/web/images/annotation-insert.svg +10 -0
  20. package/es5/web/images/annotation-key.svg +11 -0
  21. package/es5/web/images/annotation-newparagraph.svg +11 -0
  22. package/es5/web/images/annotation-noicon.svg +7 -0
  23. package/es5/web/images/annotation-note.svg +42 -0
  24. package/es5/web/images/annotation-paragraph.svg +16 -0
  25. package/es5/web/images/loading-icon.gif +0 -0
  26. package/es5/web/images/shadow.png +0 -0
  27. package/es5/web/images/texture.png +0 -0
  28. package/es5/web/pdf_viewer.css +407 -0
  29. package/es5/web/pdf_viewer.js +7757 -0
  30. package/es5/web/pdf_viewer.js.map +1 -0
  31. package/image_decoders/pdf.image_decoders.js +2887 -4094
  32. package/image_decoders/pdf.image_decoders.js.map +1 -1
  33. package/image_decoders/pdf.image_decoders.min.js +22 -1
  34. package/lib/README.md +7 -0
  35. package/lib/core/annotation.js +855 -778
  36. package/lib/core/arithmetic_decoder.js +325 -311
  37. package/lib/core/bidi.js +117 -50
  38. package/lib/core/ccitt.js +251 -89
  39. package/lib/core/ccitt_stream.js +26 -16
  40. package/lib/core/cff_parser.js +525 -197
  41. package/lib/core/charsets.js +6 -5
  42. package/lib/core/chunked_stream.js +541 -406
  43. package/lib/core/cmap.js +368 -253
  44. package/lib/core/colorspace.js +781 -800
  45. package/lib/core/core_utils.js +152 -0
  46. package/lib/core/crypto.js +609 -422
  47. package/lib/core/document.js +649 -481
  48. package/lib/core/encodings.js +33 -24
  49. package/lib/core/evaluator.js +1471 -736
  50. package/lib/core/font_renderer.js +289 -149
  51. package/lib/core/fonts.js +1067 -413
  52. package/lib/core/function.js +517 -287
  53. package/lib/core/glyphlist.js +4529 -4527
  54. package/lib/core/image.js +232 -114
  55. package/lib/core/image_utils.js +94 -0
  56. package/lib/core/jbig2.js +711 -342
  57. package/lib/core/jbig2_stream.js +31 -19
  58. package/lib/core/jpeg_stream.js +151 -26
  59. package/lib/core/jpg.js +433 -181
  60. package/lib/core/jpx.js +551 -143
  61. package/lib/core/jpx_stream.js +40 -28
  62. package/lib/core/metrics.js +2931 -2931
  63. package/lib/core/murmurhash3.js +104 -97
  64. package/lib/core/obj.js +1561 -1053
  65. package/lib/core/operator_list.js +192 -64
  66. package/lib/core/parser.js +1162 -864
  67. package/lib/core/pattern.js +224 -75
  68. package/lib/core/pdf_manager.js +154 -285
  69. package/lib/core/primitives.js +145 -69
  70. package/lib/core/ps_parser.js +212 -162
  71. package/lib/core/standard_fonts.js +245 -244
  72. package/lib/core/stream.js +353 -81
  73. package/lib/core/type1_parser.js +218 -68
  74. package/lib/core/unicode.js +1682 -1655
  75. package/lib/core/worker.js +233 -302
  76. package/lib/core/worker_stream.js +168 -0
  77. package/lib/display/annotation_layer.js +808 -862
  78. package/lib/display/api.js +1778 -1462
  79. package/lib/display/api_compatibility.js +14 -9
  80. package/lib/display/canvas.js +463 -140
  81. package/lib/display/content_disposition.js +86 -58
  82. package/lib/display/display_utils.js +524 -0
  83. package/lib/display/fetch_stream.js +202 -274
  84. package/lib/display/font_loader.js +311 -333
  85. package/lib/display/metadata.js +98 -88
  86. package/lib/display/network.js +343 -347
  87. package/lib/display/network_utils.js +46 -26
  88. package/lib/display/node_stream.js +326 -404
  89. package/lib/display/pattern_helper.js +168 -69
  90. package/lib/display/svg.js +1296 -885
  91. package/lib/display/text_layer.js +229 -103
  92. package/lib/display/transport_stream.js +290 -250
  93. package/lib/display/webgl.js +116 -83
  94. package/lib/display/worker_options.js +6 -5
  95. package/lib/display/xml_parser.js +358 -337
  96. package/lib/examples/node/domstubs.js +95 -39
  97. package/lib/pdf.js +49 -31
  98. package/lib/pdf.worker.js +7 -5
  99. package/lib/shared/compatibility.js +3 -145
  100. package/lib/shared/is_node.js +8 -7
  101. package/lib/shared/message_handler.js +367 -314
  102. package/lib/shared/util.js +421 -415
  103. package/lib/test/unit/annotation_spec.js +1570 -690
  104. package/lib/test/unit/api_spec.js +855 -493
  105. package/lib/test/unit/bidi_spec.js +12 -12
  106. package/lib/test/unit/cff_parser_spec.js +88 -61
  107. package/lib/test/unit/clitests_helper.js +9 -12
  108. package/lib/test/unit/cmap_spec.js +140 -88
  109. package/lib/test/unit/colorspace_spec.js +204 -152
  110. package/lib/test/unit/core_utils_spec.js +211 -0
  111. package/lib/test/unit/crypto_spec.js +194 -182
  112. package/lib/test/unit/custom_spec.js +50 -64
  113. package/lib/test/unit/display_svg_spec.js +53 -38
  114. package/lib/test/unit/display_utils_spec.js +263 -0
  115. package/lib/test/unit/document_spec.js +17 -22
  116. package/lib/test/unit/encodings_spec.js +15 -57
  117. package/lib/test/unit/evaluator_spec.js +90 -83
  118. package/lib/test/unit/fetch_stream_spec.js +111 -0
  119. package/lib/test/unit/function_spec.js +219 -205
  120. package/lib/test/unit/jasmine-boot.js +68 -39
  121. package/lib/test/unit/message_handler_spec.js +187 -160
  122. package/lib/test/unit/metadata_spec.js +87 -34
  123. package/lib/test/unit/murmurhash3_spec.js +13 -13
  124. package/lib/test/unit/network_spec.js +26 -59
  125. package/lib/test/unit/network_utils_spec.js +187 -121
  126. package/lib/test/unit/node_stream_spec.js +98 -90
  127. package/lib/test/unit/parser_spec.js +173 -131
  128. package/lib/test/unit/pdf_find_controller_spec.js +148 -67
  129. package/lib/test/unit/pdf_find_utils_spec.js +35 -34
  130. package/lib/test/unit/pdf_history_spec.js +45 -33
  131. package/lib/test/unit/primitives_spec.js +161 -126
  132. package/lib/test/unit/stream_spec.js +22 -15
  133. package/lib/test/unit/test_utils.js +149 -98
  134. package/lib/test/unit/testreporter.js +36 -18
  135. package/lib/test/unit/type1_parser_spec.js +46 -44
  136. package/lib/test/unit/ui_utils_spec.js +388 -372
  137. package/lib/test/unit/unicode_spec.js +49 -46
  138. package/lib/test/unit/util_spec.js +144 -248
  139. package/lib/web/annotation_layer_builder.js +75 -95
  140. package/lib/web/app.js +1538 -1147
  141. package/lib/web/app_options.js +116 -104
  142. package/lib/web/base_viewer.js +950 -775
  143. package/lib/web/chromecom.js +217 -225
  144. package/lib/web/debugger.js +236 -148
  145. package/lib/web/download_manager.js +50 -50
  146. package/lib/web/firefox_print_service.js +51 -33
  147. package/lib/web/firefoxcom.js +225 -352
  148. package/lib/web/genericcom.js +30 -93
  149. package/lib/web/genericl10n.js +26 -143
  150. package/lib/web/grab_to_pan.js +57 -33
  151. package/lib/web/interfaces.js +105 -232
  152. package/lib/web/overlay_manager.js +73 -227
  153. package/lib/web/password_prompt.js +44 -62
  154. package/lib/web/pdf_attachment_viewer.js +118 -123
  155. package/lib/web/pdf_cursor_tools.js +89 -93
  156. package/lib/web/pdf_document_properties.js +242 -281
  157. package/lib/web/pdf_find_bar.js +157 -163
  158. package/lib/web/pdf_find_controller.js +598 -454
  159. package/lib/web/pdf_find_utils.js +32 -16
  160. package/lib/web/pdf_history.js +481 -355
  161. package/lib/web/pdf_link_service.js +355 -323
  162. package/lib/web/pdf_outline_viewer.js +167 -152
  163. package/lib/web/pdf_page_view.js +511 -457
  164. package/lib/web/pdf_presentation_mode.js +347 -335
  165. package/lib/web/pdf_print_service.js +133 -103
  166. package/lib/web/pdf_rendering_queue.js +98 -100
  167. package/lib/web/pdf_sidebar.js +323 -299
  168. package/lib/web/pdf_sidebar_resizer.js +107 -108
  169. package/lib/web/pdf_single_page_viewer.js +94 -146
  170. package/lib/web/pdf_thumbnail_view.js +319 -269
  171. package/lib/web/pdf_thumbnail_viewer.js +219 -199
  172. package/lib/web/pdf_viewer.component.js +111 -32
  173. package/lib/web/pdf_viewer.js +61 -101
  174. package/lib/web/preferences.js +87 -272
  175. package/lib/web/secondary_toolbar.js +207 -220
  176. package/lib/web/text_layer_builder.js +322 -322
  177. package/lib/web/toolbar.js +227 -180
  178. package/lib/web/ui_utils.js +476 -421
  179. package/lib/web/view_history.js +59 -208
  180. package/lib/web/viewer_compatibility.js +9 -6
  181. package/package.json +2 -9
  182. package/web/pdf_viewer.css +36 -22
  183. package/web/pdf_viewer.js +4407 -4516
  184. package/web/pdf_viewer.js.map +1 -1
  185. package/webpack.js +14 -5
  186. package/external/streams/streams-lib.js +0 -3962
  187. package/external/url/url-lib.js +0 -627
  188. package/lib/display/dom_utils.js +0 -441
  189. package/lib/shared/streams_polyfill.js +0 -39
  190. package/lib/shared/url_polyfill.js +0 -50
  191. package/lib/test/unit/dom_utils_spec.js +0 -89
  192. package/lib/web/dom_events.js +0 -140
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2018 Mozilla Foundation
5
+ * Copyright 2020 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,47 +19,100 @@
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.js");
25
25
 
26
- var _metadata = require('../../display/metadata');
26
+ var _metadata = require("../../display/metadata.js");
27
27
 
28
- describe('metadata', function () {
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);
32
- expect(metadata.has('dc:title')).toBeTruthy();
33
- expect(metadata.has('dc:qux')).toBeFalsy();
34
- expect(metadata.get('dc:title')).toEqual('Foo bar baz');
35
- expect(metadata.get('dc:qux')).toEqual(null);
36
- expect(metadata.getAll()).toEqual({ 'dc:title': 'Foo bar baz' });
28
+ describe("metadata", function () {
29
+ it("should handle valid metadata", function () {
30
+ const 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
+ const metadata = new _metadata.Metadata(data);
32
+ expect(metadata.has("dc:title")).toBeTruthy();
33
+ expect(metadata.has("dc:qux")).toBeFalsy();
34
+ expect(metadata.get("dc:title")).toEqual("Foo bar baz");
35
+ expect(metadata.get("dc:qux")).toEqual(null);
36
+ expect(metadata.getAll()).toEqual({
37
+ "dc:title": "Foo bar baz"
38
+ });
37
39
  });
38
- 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
- expect(metadata.has('dc:title')).toBeTruthy();
42
- expect(metadata.has('dc:qux')).toBeFalsy();
43
- expect(metadata.get('dc:title')).toEqual('PDF&');
44
- expect(metadata.get('dc:qux')).toEqual(null);
45
- expect(metadata.getAll()).toEqual({ 'dc:title': 'PDF&' });
40
+ it("should repair and handle invalid metadata", function () {
41
+ const 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
+ const metadata = new _metadata.Metadata(data);
43
+ expect(metadata.has("dc:title")).toBeTruthy();
44
+ expect(metadata.has("dc:qux")).toBeFalsy();
45
+ expect(metadata.get("dc:title")).toEqual("PDF&");
46
+ expect(metadata.get("dc:qux")).toEqual(null);
47
+ expect(metadata.getAll()).toEqual({
48
+ "dc:title": "PDF&"
49
+ });
46
50
  });
47
- 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);
50
- expect(metadata.has('dc:title')).toBeTruthy();
51
- expect(metadata.has('dc:qux')).toBeFalsy();
52
- expect(metadata.get('dc:title')).toEqual('L\'Odissee thématique logo Odisséé - décembre 2008.pub');
53
- expect(metadata.get('dc:qux')).toEqual(null);
51
+ it("should repair and handle invalid metadata (bug 1424938)", function () {
52
+ const 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
+ const metadata = new _metadata.Metadata(data);
54
+ expect(metadata.has("dc:title")).toBeTruthy();
55
+ expect(metadata.has("dc:qux")).toBeFalsy();
56
+ expect(metadata.get("dc:title")).toEqual("L'Odissee thématique logo Odisséé - décembre 2008.pub");
57
+ expect(metadata.get("dc:qux")).toEqual(null);
54
58
  expect(metadata.getAll()).toEqual({
55
- 'dc:creator': 'ODIS',
56
- 'dc:title': 'L\'Odissee thématique logo Odisséé - décembre 2008.pub',
57
- 'xap:creatortool': 'PDFCreator Version 0.9.6'
59
+ "dc:creator": "ODIS",
60
+ "dc:title": "L'Odissee thématique logo Odisséé - décembre 2008.pub",
61
+ "xap:creatortool": "PDFCreator Version 0.9.6"
58
62
  });
59
63
  });
60
- it('should gracefully handle incomplete tags (issue 8884)', function () {
61
- var data = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d' + '<x:xmpmeta xmlns:x="adobe:ns:meta/">' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + '<rdf:Description rdf:about=""' + 'xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">' + '</rdf:Description>' + '<rdf:Description rdf:about=""' + 'xmlns:xap="http://ns.adobe.com/xap/1.0/">' + '<xap:ModifyDate>2010-03-25T11:20:09-04:00</xap:ModifyDate>' + '<xap:CreateDate>2010-03-25T11:20:09-04:00</xap:CreateDate>' + '<xap:MetadataDate>2010-03-25T11:20:09-04:00</xap:MetadataDate>' + '</rdf:Description>' + '<rdf:Description rdf:about=""' + 'xmlns:dc="http://purl.org/dc/elements/1.1/">' + '<dc:format>application/pdf</dc:format>' + '</rdf:Description>' + '<rdf:Description rdf:about=""' + 'xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">' + '<pdfaid:part>1</pdfaid:part>' + '<pdfaid:conformance>A</pdfaid:conformance>' + '</rdf:Description>' + '</rdf:RDF>' + '</x:xmpmeta>' + '<?xpacket end="w"?>';
62
- var metadata = new _metadata.Metadata(data);
64
+ it("should gracefully handle incomplete tags (issue 8884)", function () {
65
+ const data = '<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d' + '<x:xmpmeta xmlns:x="adobe:ns:meta/">' + '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">' + '<rdf:Description rdf:about=""' + 'xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">' + "</rdf:Description>" + '<rdf:Description rdf:about=""' + 'xmlns:xap="http://ns.adobe.com/xap/1.0/">' + "<xap:ModifyDate>2010-03-25T11:20:09-04:00</xap:ModifyDate>" + "<xap:CreateDate>2010-03-25T11:20:09-04:00</xap:CreateDate>" + "<xap:MetadataDate>2010-03-25T11:20:09-04:00</xap:MetadataDate>" + "</rdf:Description>" + '<rdf:Description rdf:about=""' + 'xmlns:dc="http://purl.org/dc/elements/1.1/">' + "<dc:format>application/pdf</dc:format>" + "</rdf:Description>" + '<rdf:Description rdf:about=""' + 'xmlns:pdfaid="http://www.aiim.org/pdfa/ns/id/">' + "<pdfaid:part>1</pdfaid:part>" + "<pdfaid:conformance>A</pdfaid:conformance>" + "</rdf:Description>" + "</rdf:RDF>" + "</x:xmpmeta>" + '<?xpacket end="w"?>';
66
+ const 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
+ const 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
+ const 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
+ const 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
+ const 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
+ const 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
+ const 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
+ const 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
+ const 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
  });
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2018 Mozilla Foundation
5
+ * Copyright 2020 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,38 +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 _murmurhash = require('../../core/murmurhash3');
24
+ var _murmurhash = require("../../core/murmurhash3.js");
25
25
 
26
- describe('MurmurHash3_64', function () {
27
- it('instantiates without seed', function () {
26
+ describe("MurmurHash3_64", function () {
27
+ it("instantiates without seed", function () {
28
28
  var hash = new _murmurhash.MurmurHash3_64();
29
29
  expect(hash).toEqual(jasmine.any(_murmurhash.MurmurHash3_64));
30
30
  });
31
- it('instantiates with seed', function () {
31
+ it("instantiates with seed", function () {
32
32
  var hash = new _murmurhash.MurmurHash3_64(1);
33
33
  expect(hash).toEqual(jasmine.any(_murmurhash.MurmurHash3_64));
34
34
  });
35
- var hexDigestExpected = 'f61cfdbfdae0f65e';
36
- var sourceText = 'test';
35
+ var hexDigestExpected = "f61cfdbfdae0f65e";
36
+ var sourceText = "test";
37
37
  var sourceCharCodes = [116, 101, 115, 116];
38
- it('correctly generates a hash from a string', function () {
38
+ it("correctly generates a hash from a string", function () {
39
39
  var hash = new _murmurhash.MurmurHash3_64();
40
40
  hash.update(sourceText);
41
41
  expect(hash.hexdigest()).toEqual(hexDigestExpected);
42
42
  });
43
- it('correctly generates a hash from a Uint8Array', function () {
43
+ it("correctly generates a hash from a Uint8Array", function () {
44
44
  var hash = new _murmurhash.MurmurHash3_64();
45
45
  hash.update(new Uint8Array(sourceCharCodes));
46
46
  expect(hash.hexdigest()).toEqual(hexDigestExpected);
47
47
  });
48
- it('correctly generates a hash from a Uint32Array', function () {
48
+ it("correctly generates a hash from a Uint32Array", function () {
49
49
  var hash = new _murmurhash.MurmurHash3_64();
50
50
  hash.update(new Uint32Array(new Uint8Array(sourceCharCodes).buffer));
51
51
  expect(hash.hexdigest()).toEqual(hexDigestExpected);
52
52
  });
53
- it('changes the hash after update without seed', function () {
53
+ it("changes the hash after update without seed", function () {
54
54
  var hash = new _murmurhash.MurmurHash3_64();
55
55
  var hexdigest1, hexdigest2;
56
56
  hash.update(sourceText);
@@ -59,7 +59,7 @@ describe('MurmurHash3_64', function () {
59
59
  hexdigest2 = hash.hexdigest();
60
60
  expect(hexdigest1).not.toEqual(hexdigest2);
61
61
  });
62
- it('changes the hash after update with seed', function () {
62
+ it("changes the hash after update with seed", function () {
63
63
  var hash = new _murmurhash.MurmurHash3_64(1);
64
64
  var hexdigest1, hexdigest2;
65
65
  hash.update(sourceText);
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2018 Mozilla Foundation
5
+ * Copyright 2020 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -19,16 +19,16 @@
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 _util = require("../../shared/util.js");
25
25
 
26
- describe('network', function () {
27
- var pdf1 = new URL('../pdfs/tracemonkey.pdf', window.location).href;
26
+ var _network = require("../../display/network.js");
27
+
28
+ describe("network", function () {
29
+ var pdf1 = new URL("../pdfs/tracemonkey.pdf", window.location).href;
28
30
  var pdf1Length = 1016315;
29
- var pdf2 = new URL('../pdfs/pdf.pdf', window.location).href;
30
- var pdf2Length = 32472771;
31
- it('read without stream and range', function (done) {
31
+ it("read without stream and range", function (done) {
32
32
  var stream = new _network.PDFNetworkStream({
33
33
  url: pdf1,
34
34
  rangeChunkSize: 65536,
@@ -43,16 +43,19 @@ describe('network', function () {
43
43
  });
44
44
  var len = 0,
45
45
  count = 0;
46
- var read = function read() {
46
+
47
+ var read = function () {
47
48
  return fullReader.read().then(function (result) {
48
49
  if (result.done) {
49
- return;
50
+ return undefined;
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);
@@ -64,50 +67,7 @@ describe('network', function () {
64
67
  done.fail(reason);
65
68
  });
66
69
  });
67
- it('read with streaming', function (done) {
68
- var userAgent = window.navigator.userAgent;
69
- var m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(userAgent);
70
- if (!m || m[1] < 9) {
71
- expect(true).toEqual(true);
72
- done();
73
- return;
74
- }
75
- var stream = new _network.PDFNetworkStream({
76
- url: pdf2,
77
- rangeChunkSize: 65536,
78
- disableStream: false,
79
- disableRange: false
80
- });
81
- var fullReader = stream.getFullReader();
82
- var isStreamingSupported, isRangeSupported;
83
- var promise = fullReader.headersReady.then(function () {
84
- isStreamingSupported = fullReader.isStreamingSupported;
85
- isRangeSupported = fullReader.isRangeSupported;
86
- });
87
- var len = 0,
88
- count = 0;
89
- var read = function read() {
90
- return fullReader.read().then(function (result) {
91
- if (result.done) {
92
- return;
93
- }
94
- count++;
95
- len += result.value.byteLength;
96
- return read();
97
- });
98
- };
99
- var readPromise = Promise.all([read(), promise]);
100
- readPromise.then(function () {
101
- expect(len).toEqual(pdf2Length);
102
- expect(count).toBeGreaterThan(1);
103
- expect(isStreamingSupported).toEqual(true);
104
- expect(isRangeSupported).toEqual(true);
105
- done();
106
- }).catch(function (reason) {
107
- done.fail(reason);
108
- });
109
- });
110
- it('read custom ranges', function (done) {
70
+ it("read custom ranges", function (done) {
111
71
  var rangeSize = 32768;
112
72
  var stream = new _network.PDFNetworkStream({
113
73
  url: pdf1,
@@ -121,23 +81,30 @@ describe('network', function () {
121
81
  var promise = fullReader.headersReady.then(function () {
122
82
  isStreamingSupported = fullReader.isStreamingSupported;
123
83
  isRangeSupported = fullReader.isRangeSupported;
124
- fullReader.cancel('Don\'t need full reader');
84
+ fullReader.cancel(new _util.AbortException("Don't need fullReader."));
125
85
  fullReaderCancelled = true;
126
86
  });
127
87
  var tailSize = pdf1Length % rangeSize || rangeSize;
128
88
  var range1Reader = stream.getRangeReader(pdf1Length - tailSize - rangeSize, pdf1Length - tailSize);
129
89
  var range2Reader = stream.getRangeReader(pdf1Length - tailSize, pdf1Length);
130
- var result1 = { value: 0 },
131
- result2 = { value: 0 };
132
- var read = function read(reader, lenResult) {
90
+ var result1 = {
91
+ value: 0
92
+ },
93
+ result2 = {
94
+ value: 0
95
+ };
96
+
97
+ var read = function (reader, lenResult) {
133
98
  return reader.read().then(function (result) {
134
99
  if (result.done) {
135
- return;
100
+ return undefined;
136
101
  }
102
+
137
103
  lenResult.value += result.value.byteLength;
138
104
  return read(reader, lenResult);
139
105
  });
140
106
  };
107
+
141
108
  var readPromises = Promise.all([read(range1Reader, result1), read(range2Reader, result2), promise]);
142
109
  readPromises.then(function () {
143
110
  expect(result1.value).toEqual(rangeSize);