pdfjs-dist 2.0.489 → 2.2.228
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.
- package/CODE_OF_CONDUCT.md +15 -0
- package/bower.json +1 -1
- package/build/pdf.js +18515 -11402
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +48266 -37137
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/external/url/url-lib.js +627 -0
- package/image_decoders/pdf.image_decoders.js +11350 -0
- package/image_decoders/pdf.image_decoders.js.map +1 -0
- package/image_decoders/pdf.image_decoders.min.js +1 -0
- package/lib/core/annotation.js +587 -242
- package/lib/core/arithmetic_decoder.js +275 -245
- package/lib/core/bidi.js +65 -6
- package/lib/core/ccitt.js +173 -18
- package/lib/core/ccitt_stream.js +15 -6
- package/lib/core/cff_parser.js +433 -61
- package/lib/core/charsets.js +5 -4
- package/lib/core/chunked_stream.js +400 -152
- package/lib/core/cmap.js +326 -87
- package/lib/core/colorspace.js +874 -594
- package/lib/core/core_utils.js +147 -0
- package/lib/core/crypto.js +290 -45
- package/lib/core/document.js +560 -268
- package/lib/core/encodings.js +19 -10
- package/lib/core/evaluator.js +1005 -360
- package/lib/core/font_renderer.js +331 -97
- package/lib/core/fonts.js +812 -195
- package/lib/core/function.js +284 -71
- package/lib/core/glyphlist.js +4 -3
- package/lib/core/image.js +169 -62
- package/lib/core/image_utils.js +111 -0
- package/lib/core/jbig2.js +479 -66
- package/lib/core/jbig2_stream.js +19 -8
- package/lib/core/jpeg_stream.js +38 -13
- package/lib/core/jpg.js +253 -29
- package/lib/core/jpx.js +396 -6
- package/lib/core/jpx_stream.js +18 -6
- package/lib/core/metrics.js +15 -15
- package/lib/core/murmurhash3.js +56 -34
- package/lib/core/obj.js +1354 -488
- package/lib/core/operator_list.js +144 -31
- package/lib/core/parser.js +539 -191
- package/lib/core/pattern.js +148 -14
- package/lib/core/pdf_manager.js +323 -133
- package/lib/core/primitives.js +111 -24
- package/lib/core/ps_parser.js +134 -45
- package/lib/core/standard_fonts.js +17 -17
- package/lib/core/stream.js +313 -34
- package/lib/core/type1_parser.js +143 -13
- package/lib/core/unicode.js +32 -5
- package/lib/core/worker.js +217 -190
- package/lib/core/worker_stream.js +277 -0
- package/lib/display/annotation_layer.js +450 -133
- package/lib/display/api.js +1597 -784
- package/lib/display/api_compatibility.js +11 -13
- package/lib/display/canvas.js +360 -44
- package/lib/display/content_disposition.js +83 -32
- package/lib/display/display_utils.js +747 -0
- package/lib/display/fetch_stream.js +221 -90
- package/lib/display/font_loader.js +468 -236
- package/lib/display/metadata.js +38 -16
- package/lib/display/network.js +635 -428
- package/lib/display/network_utils.js +32 -19
- package/lib/display/node_stream.js +367 -175
- package/lib/display/pattern_helper.js +81 -31
- package/lib/display/svg.js +1235 -519
- package/lib/display/text_layer.js +153 -29
- package/lib/display/transport_stream.js +345 -94
- package/lib/display/webgl.js +64 -18
- package/lib/display/worker_options.js +5 -4
- package/lib/display/xml_parser.js +166 -53
- package/lib/examples/node/domstubs.js +60 -4
- package/lib/pdf.js +36 -14
- package/lib/pdf.worker.js +5 -3
- package/lib/shared/compatibility.js +158 -564
- package/lib/shared/global_scope.js +2 -2
- package/lib/shared/is_node.js +4 -4
- package/lib/shared/message_handler.js +521 -0
- package/lib/shared/streams_polyfill.js +21 -17
- package/lib/shared/url_polyfill.js +56 -0
- package/lib/shared/util.js +243 -710
- package/lib/test/unit/annotation_spec.js +870 -401
- package/lib/test/unit/api_spec.js +657 -345
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +54 -11
- package/lib/test/unit/clitests_helper.js +10 -8
- package/lib/test/unit/cmap_spec.js +95 -41
- package/lib/test/unit/colorspace_spec.js +115 -63
- package/lib/test/unit/core_utils_spec.js +191 -0
- package/lib/test/unit/crypto_spec.js +17 -5
- package/lib/test/unit/custom_spec.js +43 -55
- package/lib/test/unit/display_svg_spec.js +34 -18
- package/lib/test/unit/display_utils_spec.js +273 -0
- package/lib/test/unit/document_spec.js +8 -13
- package/lib/test/unit/encodings_spec.js +25 -45
- package/lib/test/unit/evaluator_spec.js +38 -15
- package/lib/test/unit/fetch_stream_spec.js +109 -0
- package/lib/test/unit/function_spec.js +17 -5
- package/lib/test/unit/jasmine-boot.js +33 -20
- package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
- package/lib/test/unit/metadata_spec.js +71 -11
- package/lib/test/unit/murmurhash3_spec.js +3 -3
- package/lib/test/unit/network_spec.js +19 -54
- package/lib/test/unit/network_utils_spec.js +91 -14
- package/lib/test/unit/node_stream_spec.js +56 -32
- package/lib/test/unit/parser_spec.js +162 -71
- package/lib/test/unit/pdf_find_controller_spec.js +230 -0
- package/lib/test/unit/pdf_find_utils_spec.js +63 -0
- package/lib/test/unit/pdf_history_spec.js +21 -9
- package/lib/test/unit/primitives_spec.js +53 -20
- package/lib/test/unit/stream_spec.js +12 -4
- package/lib/test/unit/test_utils.js +273 -56
- package/lib/test/unit/testreporter.js +21 -3
- package/lib/test/unit/type1_parser_spec.js +8 -6
- package/lib/test/unit/ui_utils_spec.js +454 -16
- package/lib/test/unit/unicode_spec.js +18 -15
- package/lib/test/unit/util_spec.js +87 -128
- package/lib/web/annotation_layer_builder.js +39 -22
- package/lib/web/app.js +1290 -588
- package/lib/web/app_options.js +100 -62
- package/lib/web/base_viewer.js +511 -182
- package/lib/web/chromecom.js +261 -117
- package/lib/web/debugger.js +166 -22
- package/lib/web/download_manager.js +32 -13
- package/lib/web/firefox_print_service.js +20 -10
- package/lib/web/firefoxcom.js +315 -80
- package/lib/web/genericcom.js +89 -30
- package/lib/web/genericl10n.js +142 -30
- package/lib/web/grab_to_pan.js +28 -4
- package/lib/web/interfaces.js +170 -47
- package/lib/web/overlay_manager.js +235 -85
- package/lib/web/password_prompt.js +22 -14
- package/lib/web/pdf_attachment_viewer.js +38 -18
- package/lib/web/pdf_cursor_tools.js +39 -16
- package/lib/web/pdf_document_properties.js +255 -136
- package/lib/web/pdf_find_bar.js +84 -40
- package/lib/web/pdf_find_controller.js +495 -184
- package/lib/web/pdf_find_utils.js +111 -0
- package/lib/web/pdf_history.js +190 -53
- package/lib/web/pdf_link_service.js +138 -77
- package/lib/web/pdf_outline_viewer.js +122 -46
- package/lib/web/pdf_page_view.js +191 -67
- package/lib/web/pdf_presentation_mode.js +99 -34
- package/lib/web/pdf_print_service.js +61 -13
- package/lib/web/pdf_rendering_queue.js +28 -9
- package/lib/web/pdf_sidebar.js +141 -81
- package/lib/web/pdf_sidebar_resizer.js +42 -16
- package/lib/web/pdf_single_page_viewer.js +74 -66
- package/lib/web/pdf_thumbnail_view.js +104 -33
- package/lib/web/pdf_thumbnail_viewer.js +66 -26
- package/lib/web/pdf_viewer.component.js +112 -32
- package/lib/web/pdf_viewer.js +91 -52
- package/lib/web/preferences.js +284 -89
- package/lib/web/secondary_toolbar.js +165 -40
- package/lib/web/text_layer_builder.js +134 -59
- package/lib/web/toolbar.js +78 -43
- package/lib/web/ui_utils.js +462 -136
- package/lib/web/view_history.js +215 -67
- package/lib/web/viewer_compatibility.js +4 -13
- package/package.json +5 -4
- package/web/pdf_viewer.css +79 -11
- package/web/pdf_viewer.js +6107 -3748
- package/web/pdf_viewer.js.map +1 -1
- package/lib/display/dom_utils.js +0 -309
- package/lib/test/unit/dom_utils_spec.js +0 -89
- package/lib/test/unit/fonts_spec.js +0 -81
- package/lib/web/dom_events.js +0 -137
@@ -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
|
5
|
+
* Copyright 2019 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,83 +19,45 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var
|
24
|
+
var _util = require("../../shared/util");
|
25
25
|
|
26
|
-
var
|
26
|
+
var _api = require("../../display/api");
|
27
27
|
|
28
|
-
var
|
28
|
+
var _message_handler = require("../../shared/message_handler");
|
29
29
|
|
30
|
-
function
|
31
|
-
|
32
|
-
describe('util_stream', function () {
|
33
|
-
var FakePort = function () {
|
34
|
-
function FakePort() {
|
35
|
-
_classCallCheck(this, FakePort);
|
36
|
-
|
37
|
-
this._listeners = [];
|
38
|
-
this._deferred = Promise.resolve(undefined);
|
39
|
-
}
|
40
|
-
|
41
|
-
_createClass(FakePort, [{
|
42
|
-
key: 'postMessage',
|
43
|
-
value: function postMessage(obj) {
|
44
|
-
var _this = this;
|
45
|
-
|
46
|
-
var event = { data: obj };
|
47
|
-
this._deferred.then(function () {
|
48
|
-
_this._listeners.forEach(function (listener) {
|
49
|
-
listener.call(this, event);
|
50
|
-
}, _this);
|
51
|
-
});
|
52
|
-
}
|
53
|
-
}, {
|
54
|
-
key: 'addEventListener',
|
55
|
-
value: function addEventListener(name, listener) {
|
56
|
-
this._listeners.push(listener);
|
57
|
-
}
|
58
|
-
}, {
|
59
|
-
key: 'removeEventListener',
|
60
|
-
value: function removeEventListener(name, listener) {
|
61
|
-
var i = this._listeners.indexOf(listener);
|
62
|
-
this._listeners.splice(i, 1);
|
63
|
-
}
|
64
|
-
}, {
|
65
|
-
key: 'terminate',
|
66
|
-
value: function terminate() {
|
67
|
-
this._listeners = [];
|
68
|
-
}
|
69
|
-
}]);
|
70
|
-
|
71
|
-
return FakePort;
|
72
|
-
}();
|
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); }
|
73
31
|
|
32
|
+
describe('message_handler', function () {
|
74
33
|
function sleep(ticks) {
|
75
34
|
return Promise.resolve().then(function () {
|
76
35
|
return ticks && sleep(ticks - 1);
|
77
36
|
});
|
78
37
|
}
|
38
|
+
|
79
39
|
describe('sendWithStream', function () {
|
80
40
|
it('should return a ReadableStream', function () {
|
81
|
-
var port = new
|
82
|
-
var messageHandler1 = new
|
41
|
+
var port = new _api.LoopbackPort();
|
42
|
+
var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
|
83
43
|
var readable = messageHandler1.sendWithStream('fakeHandler');
|
84
|
-
expect(
|
44
|
+
expect(_typeof(readable)).toEqual('object');
|
85
45
|
expect(_typeof(readable.getReader)).toEqual('function');
|
86
46
|
});
|
87
47
|
it('should read using a reader', function (done) {
|
88
48
|
var log = '';
|
89
|
-
var port = new
|
90
|
-
var messageHandler1 = new
|
91
|
-
var messageHandler2 = new
|
49
|
+
var port = new _api.LoopbackPort();
|
50
|
+
var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
|
51
|
+
var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
|
92
52
|
messageHandler2.on('fakeHandler', function (data, sink) {
|
93
53
|
sink.onPull = function () {
|
94
54
|
log += 'p';
|
95
55
|
};
|
56
|
+
|
96
57
|
sink.onCancel = function (reason) {
|
97
58
|
log += 'c';
|
98
59
|
};
|
60
|
+
|
99
61
|
sink.ready.then(function () {
|
100
62
|
sink.enqueue('hi');
|
101
63
|
return sink.ready;
|
@@ -129,15 +91,17 @@ describe('util_stream', function () {
|
|
129
91
|
});
|
130
92
|
it('should not read any data when cancelled', function (done) {
|
131
93
|
var log = '';
|
132
|
-
var port = new
|
133
|
-
var messageHandler2 = new
|
94
|
+
var port = new _api.LoopbackPort();
|
95
|
+
var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
|
134
96
|
messageHandler2.on('fakeHandler', function (data, sink) {
|
135
97
|
sink.onPull = function () {
|
136
98
|
log += 'p';
|
137
99
|
};
|
100
|
+
|
138
101
|
sink.onCancel = function (reason) {
|
139
102
|
log += 'c';
|
140
103
|
};
|
104
|
+
|
141
105
|
log += '0';
|
142
106
|
sink.ready.then(function () {
|
143
107
|
log += '1';
|
@@ -154,7 +118,7 @@ describe('util_stream', function () {
|
|
154
118
|
log += '4';
|
155
119
|
});
|
156
120
|
});
|
157
|
-
var messageHandler1 = new
|
121
|
+
var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
|
158
122
|
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
|
159
123
|
highWaterMark: 4,
|
160
124
|
size: function size(arr) {
|
@@ -179,15 +143,17 @@ describe('util_stream', function () {
|
|
179
143
|
});
|
180
144
|
it('should not read when errored', function (done) {
|
181
145
|
var log = '';
|
182
|
-
var port = new
|
183
|
-
var messageHandler2 = new
|
146
|
+
var port = new _api.LoopbackPort();
|
147
|
+
var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
|
184
148
|
messageHandler2.on('fakeHandler', function (data, sink) {
|
185
149
|
sink.onPull = function () {
|
186
150
|
log += 'p';
|
187
151
|
};
|
152
|
+
|
188
153
|
sink.onCancel = function (reason) {
|
189
154
|
log += 'c';
|
190
155
|
};
|
156
|
+
|
191
157
|
sink.ready.then(function () {
|
192
158
|
sink.enqueue([1, 2, 3, 4], 4);
|
193
159
|
return sink.ready;
|
@@ -196,7 +162,7 @@ describe('util_stream', function () {
|
|
196
162
|
sink.error('error');
|
197
163
|
});
|
198
164
|
});
|
199
|
-
var messageHandler1 = new
|
165
|
+
var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
|
200
166
|
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
|
201
167
|
highWaterMark: 4,
|
202
168
|
size: function size(arr) {
|
@@ -218,15 +184,17 @@ describe('util_stream', function () {
|
|
218
184
|
});
|
219
185
|
it('should read data with blocking promise', function (done) {
|
220
186
|
var log = '';
|
221
|
-
var port = new
|
222
|
-
var messageHandler2 = new
|
187
|
+
var port = new _api.LoopbackPort();
|
188
|
+
var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
|
223
189
|
messageHandler2.on('fakeHandler', function (data, sink) {
|
224
190
|
sink.onPull = function () {
|
225
191
|
log += 'p';
|
226
192
|
};
|
193
|
+
|
227
194
|
sink.onCancel = function (reason) {
|
228
195
|
log += 'c';
|
229
196
|
};
|
197
|
+
|
230
198
|
log += '0';
|
231
199
|
sink.ready.then(function () {
|
232
200
|
log += '1';
|
@@ -240,7 +208,7 @@ describe('util_stream', function () {
|
|
240
208
|
sink.close();
|
241
209
|
});
|
242
210
|
});
|
243
|
-
var messageHandler1 = new
|
211
|
+
var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
|
244
212
|
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
|
245
213
|
highWaterMark: 4,
|
246
214
|
size: function size(arr) {
|
@@ -273,15 +241,17 @@ describe('util_stream', function () {
|
|
273
241
|
});
|
274
242
|
it('should read data with blocking promise and buffer whole data' + ' into stream', function (done) {
|
275
243
|
var log = '';
|
276
|
-
var port = new
|
277
|
-
var messageHandler2 = new
|
244
|
+
var port = new _api.LoopbackPort();
|
245
|
+
var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
|
278
246
|
messageHandler2.on('fakeHandler', function (data, sink) {
|
279
247
|
sink.onPull = function () {
|
280
248
|
log += 'p';
|
281
249
|
};
|
250
|
+
|
282
251
|
sink.onCancel = function (reason) {
|
283
252
|
log += 'c';
|
284
253
|
};
|
254
|
+
|
285
255
|
log += '0';
|
286
256
|
sink.ready.then(function () {
|
287
257
|
log += '1';
|
@@ -296,7 +266,7 @@ describe('util_stream', function () {
|
|
296
266
|
});
|
297
267
|
return sleep(10);
|
298
268
|
});
|
299
|
-
var messageHandler1 = new
|
269
|
+
var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
|
300
270
|
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
|
301
271
|
highWaterMark: 8,
|
302
272
|
size: function size(arr) {
|
@@ -329,16 +299,18 @@ describe('util_stream', function () {
|
|
329
299
|
});
|
330
300
|
it('should ignore any pull after close is called', function (done) {
|
331
301
|
var log = '';
|
332
|
-
var port = new
|
302
|
+
var port = new _api.LoopbackPort();
|
333
303
|
var capability = (0, _util.createPromiseCapability)();
|
334
|
-
var messageHandler2 = new
|
304
|
+
var messageHandler2 = new _message_handler.MessageHandler('worker', 'main', port);
|
335
305
|
messageHandler2.on('fakeHandler', function (data, sink) {
|
336
306
|
sink.onPull = function () {
|
337
307
|
log += 'p';
|
338
308
|
};
|
309
|
+
|
339
310
|
sink.onCancel = function (reason) {
|
340
311
|
log += 'c';
|
341
312
|
};
|
313
|
+
|
342
314
|
log += '0';
|
343
315
|
sink.ready.then(function () {
|
344
316
|
log += '1';
|
@@ -348,7 +320,7 @@ describe('util_stream', function () {
|
|
348
320
|
sink.close();
|
349
321
|
});
|
350
322
|
});
|
351
|
-
var messageHandler1 = new
|
323
|
+
var messageHandler1 = new _message_handler.MessageHandler('main', 'worker', port);
|
352
324
|
var readable = messageHandler1.sendWithStream('fakeHandler', {}, {
|
353
325
|
highWaterMark: 10,
|
354
326
|
size: function size(arr) {
|
@@ -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
|
5
|
+
* Copyright 2019 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,32 +19,38 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var
|
24
|
+
var _util = require("../../shared/util");
|
25
|
+
|
26
|
+
var _metadata = require("../../display/metadata");
|
25
27
|
|
26
28
|
describe('metadata', function () {
|
27
29
|
it('should handle valid metadata', function () {
|
28
|
-
var
|
29
|
-
var metadata = new _metadata.Metadata(
|
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);
|
30
32
|
expect(metadata.has('dc:title')).toBeTruthy();
|
31
33
|
expect(metadata.has('dc:qux')).toBeFalsy();
|
32
34
|
expect(metadata.get('dc:title')).toEqual('Foo bar baz');
|
33
35
|
expect(metadata.get('dc:qux')).toEqual(null);
|
34
|
-
expect(metadata.getAll()).toEqual({
|
36
|
+
expect(metadata.getAll()).toEqual({
|
37
|
+
'dc:title': 'Foo bar baz'
|
38
|
+
});
|
35
39
|
});
|
36
40
|
it('should repair and handle invalid metadata', function () {
|
37
|
-
var
|
38
|
-
var metadata = new _metadata.Metadata(
|
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);
|
39
43
|
expect(metadata.has('dc:title')).toBeTruthy();
|
40
44
|
expect(metadata.has('dc:qux')).toBeFalsy();
|
41
45
|
expect(metadata.get('dc:title')).toEqual('PDF&');
|
42
46
|
expect(metadata.get('dc:qux')).toEqual(null);
|
43
|
-
expect(metadata.getAll()).toEqual({
|
47
|
+
expect(metadata.getAll()).toEqual({
|
48
|
+
'dc:title': 'PDF&'
|
49
|
+
});
|
44
50
|
});
|
45
51
|
it('should repair and handle invalid metadata (bug 1424938)', function () {
|
46
|
-
var
|
47
|
-
var metadata = new _metadata.Metadata(
|
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'\\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);
|
48
54
|
expect(metadata.has('dc:title')).toBeTruthy();
|
49
55
|
expect(metadata.has('dc:qux')).toBeFalsy();
|
50
56
|
expect(metadata.get('dc:title')).toEqual('L\'Odissee thématique logo Odisséé - décembre 2008.pub');
|
@@ -55,4 +61,58 @@ describe('metadata', function () {
|
|
55
61
|
'xap:creatortool': 'PDFCreator Version 0.9.6'
|
56
62
|
});
|
57
63
|
});
|
64
|
+
it('should gracefully handle incomplete tags (issue 8884)', function () {
|
65
|
+
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"?>';
|
66
|
+
var metadata = new _metadata.Metadata(data);
|
67
|
+
expect((0, _util.isEmptyObj)(metadata.getAll())).toEqual(true);
|
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">'Foo bar baz'</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
|
+
});
|
58
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
|
5
|
+
* Copyright 2019 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,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
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var _murmurhash = require(
|
24
|
+
var _murmurhash = require("../../core/murmurhash3");
|
25
25
|
|
26
26
|
describe('MurmurHash3_64', function () {
|
27
27
|
it('instantiates without seed', function () {
|
@@ -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
|
5
|
+
* Copyright 2019 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,15 +19,13 @@
|
|
19
19
|
* @licend The above is the entire license notice for the
|
20
20
|
* Javascript code in this page
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";
|
23
23
|
|
24
|
-
var _network = require(
|
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;
|
28
28
|
var pdf1Length = 1016315;
|
29
|
-
var pdf2 = new URL('../pdfs/pdf.pdf', window.location).href;
|
30
|
-
var pdf2Length = 32472771;
|
31
29
|
it('read without stream and range', function (done) {
|
32
30
|
var stream = new _network.PDFNetworkStream({
|
33
31
|
url: pdf1,
|
@@ -43,16 +41,19 @@ describe('network', function () {
|
|
43
41
|
});
|
44
42
|
var len = 0,
|
45
43
|
count = 0;
|
44
|
+
|
46
45
|
var read = function read() {
|
47
46
|
return fullReader.read().then(function (result) {
|
48
47
|
if (result.done) {
|
49
|
-
return;
|
48
|
+
return undefined;
|
50
49
|
}
|
50
|
+
|
51
51
|
count++;
|
52
52
|
len += result.value.byteLength;
|
53
53
|
return read();
|
54
54
|
});
|
55
55
|
};
|
56
|
+
|
56
57
|
var readPromise = Promise.all([read(), promise]);
|
57
58
|
readPromise.then(function (page) {
|
58
59
|
expect(len).toEqual(pdf1Length);
|
@@ -60,50 +61,7 @@ describe('network', function () {
|
|
60
61
|
expect(isStreamingSupported).toEqual(false);
|
61
62
|
expect(isRangeSupported).toEqual(false);
|
62
63
|
done();
|
63
|
-
})
|
64
|
-
done.fail(reason);
|
65
|
-
});
|
66
|
-
});
|
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) {
|
64
|
+
})["catch"](function (reason) {
|
107
65
|
done.fail(reason);
|
108
66
|
});
|
109
67
|
});
|
@@ -127,17 +85,24 @@ describe('network', function () {
|
|
127
85
|
var tailSize = pdf1Length % rangeSize || rangeSize;
|
128
86
|
var range1Reader = stream.getRangeReader(pdf1Length - tailSize - rangeSize, pdf1Length - tailSize);
|
129
87
|
var range2Reader = stream.getRangeReader(pdf1Length - tailSize, pdf1Length);
|
130
|
-
var result1 = {
|
131
|
-
|
88
|
+
var result1 = {
|
89
|
+
value: 0
|
90
|
+
},
|
91
|
+
result2 = {
|
92
|
+
value: 0
|
93
|
+
};
|
94
|
+
|
132
95
|
var read = function read(reader, lenResult) {
|
133
96
|
return reader.read().then(function (result) {
|
134
97
|
if (result.done) {
|
135
|
-
return;
|
98
|
+
return undefined;
|
136
99
|
}
|
100
|
+
|
137
101
|
lenResult.value += result.value.byteLength;
|
138
102
|
return read(reader, lenResult);
|
139
103
|
});
|
140
104
|
};
|
105
|
+
|
141
106
|
var readPromises = Promise.all([read(range1Reader, result1), read(range2Reader, result2), promise]);
|
142
107
|
readPromises.then(function () {
|
143
108
|
expect(result1.value).toEqual(rangeSize);
|
@@ -146,7 +111,7 @@ describe('network', function () {
|
|
146
111
|
expect(isRangeSupported).toEqual(true);
|
147
112
|
expect(fullReaderCancelled).toEqual(true);
|
148
113
|
done();
|
149
|
-
})
|
114
|
+
})["catch"](function (reason) {
|
150
115
|
done.fail(reason);
|
151
116
|
});
|
152
117
|
});
|