pdfjs-dist 2.5.207 → 2.6.347
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/bower.json +1 -1
- package/build/pdf.js +867 -216
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +10214 -8547
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/es5/build/pdf.js +2023 -1046
- package/es5/build/pdf.js.map +1 -1
- package/es5/build/pdf.min.js +22 -0
- package/es5/build/pdf.worker.js +11136 -8144
- package/es5/build/pdf.worker.js.map +1 -1
- package/es5/build/pdf.worker.min.js +22 -0
- package/es5/image_decoders/pdf.image_decoders.js +12529 -0
- package/es5/image_decoders/pdf.image_decoders.js.map +1 -0
- package/es5/image_decoders/pdf.image_decoders.min.js +22 -0
- package/es5/web/images/shadow.png +0 -0
- package/es5/web/pdf_viewer.css +8 -5
- package/es5/web/pdf_viewer.js +195 -51
- package/es5/web/pdf_viewer.js.map +1 -1
- package/image_decoders/pdf.image_decoders.js +24 -16
- package/image_decoders/pdf.image_decoders.js.map +1 -1
- package/image_decoders/pdf.image_decoders.min.js +1 -1
- package/lib/core/annotation.js +479 -43
- package/lib/core/cff_parser.js +643 -615
- package/lib/core/chunked_stream.js +64 -50
- package/lib/core/colorspace.js +126 -104
- package/lib/core/crypto.js +37 -0
- package/lib/core/document.js +128 -75
- package/lib/core/evaluator.js +3015 -2754
- package/lib/core/fonts.js +47 -46
- package/lib/core/function.js +79 -6
- package/lib/core/image.js +364 -357
- package/lib/core/image_utils.js +109 -8
- package/lib/core/jpg.js +8 -3
- package/lib/core/obj.js +255 -34
- package/lib/core/operator_list.js +17 -15
- package/lib/core/parser.js +40 -3
- package/lib/core/pattern.js +24 -11
- package/lib/core/primitives.js +112 -53
- package/lib/core/type1_parser.js +2 -0
- package/lib/core/worker.js +102 -37
- package/lib/core/writer.js +242 -0
- package/lib/display/annotation_layer.js +51 -10
- package/lib/display/annotation_storage.js +89 -0
- package/lib/display/api.js +140 -54
- package/lib/display/canvas.js +215 -46
- package/lib/display/display_utils.js +55 -18
- package/lib/display/fetch_stream.js +6 -0
- package/lib/display/font_loader.js +26 -15
- package/lib/display/metadata.js +1 -7
- package/lib/display/network.js +0 -14
- package/lib/display/node_utils.js +87 -0
- package/lib/display/optional_content_config.js +184 -0
- package/lib/display/svg.js +1 -1
- package/lib/display/text_layer.js +4 -1
- package/lib/pdf.js +2 -2
- package/lib/pdf.worker.js +2 -2
- package/lib/shared/is_node.js +1 -1
- package/lib/shared/util.js +13 -10
- package/lib/test/unit/annotation_spec.js +520 -50
- package/lib/test/unit/annotation_storage_spec.js +83 -0
- package/lib/test/unit/api_spec.js +16 -6
- package/lib/test/unit/cmap_spec.js +4 -4
- package/lib/test/unit/colorspace_spec.js +216 -24
- package/lib/test/unit/crypto_spec.js +51 -4
- package/lib/test/unit/custom_spec.js +129 -1
- package/lib/test/unit/document_spec.js +112 -1
- package/lib/test/unit/evaluator_spec.js +29 -10
- package/lib/test/unit/jasmine-boot.js +1 -1
- package/lib/test/unit/metadata_spec.js +3 -3
- package/lib/test/unit/primitives_spec.js +242 -63
- package/lib/test/unit/test_utils.js +42 -89
- package/lib/test/unit/testreporter.js +17 -6
- package/lib/test/unit/util_spec.js +13 -12
- package/lib/test/unit/writer_spec.js +84 -0
- package/lib/web/annotation_layer_builder.js +13 -9
- package/lib/web/app.js +231 -26
- package/lib/web/app_options.js +1 -6
- package/lib/web/base_tree_viewer.js +100 -0
- package/lib/web/base_viewer.js +53 -4
- package/lib/web/download_manager.js +3 -10
- package/lib/web/firefox_print_service.js +32 -12
- package/lib/web/firefoxcom.js +20 -6
- package/lib/web/interfaces.js +1 -1
- package/lib/web/pdf_attachment_viewer.js +80 -38
- package/lib/web/pdf_find_controller.js +2 -1
- package/lib/web/pdf_layer_viewer.js +208 -0
- package/lib/web/pdf_outline_viewer.js +24 -57
- package/lib/web/pdf_page_view.js +29 -6
- package/lib/web/pdf_print_service.js +13 -11
- package/lib/web/pdf_sidebar.js +46 -25
- package/lib/web/pdf_thumbnail_view.js +16 -3
- package/lib/web/pdf_thumbnail_viewer.js +17 -1
- package/lib/web/pdf_viewer.component.js +2 -2
- package/lib/web/preferences.js +1 -1
- package/lib/web/toolbar.js +1 -1
- package/lib/web/ui_utils.js +7 -1
- package/package.json +3 -1
- package/types/display/annotation_layer.d.ts +61 -0
- package/types/display/annotation_storage.d.ts +36 -0
- package/types/display/api.d.ts +1107 -0
- package/types/display/api_compatibility.d.ts +1 -0
- package/types/display/canvas.d.ts +4 -0
- package/types/display/content_disposition.d.ts +7 -0
- package/types/display/display_utils.d.ts +243 -0
- package/types/display/fetch_stream.d.ts +67 -0
- package/types/display/font_loader.d.ts +19 -0
- package/types/display/metadata.d.ts +9 -0
- package/types/display/network.d.ts +80 -0
- package/types/display/network_utils.d.ts +14 -0
- package/types/display/node_stream.d.ts +72 -0
- package/types/display/node_utils.d.ts +6 -0
- package/types/display/optional_content_config.d.ts +12 -0
- package/types/display/pattern_helper.d.ts +5 -0
- package/types/display/svg.d.ts +2 -0
- package/types/display/text_layer.d.ts +83 -0
- package/types/display/transport_stream.d.ts +57 -0
- package/types/display/webgl.d.ts +20 -0
- package/types/display/worker_options.d.ts +27 -0
- package/types/display/xml_parser.d.ts +35 -0
- package/types/pdf.d.ts +33 -0
- package/types/shared/compatibility.d.ts +1 -0
- package/types/shared/is_node.d.ts +1 -0
- package/types/shared/message_handler.d.ts +62 -0
- package/types/shared/util.d.ts +421 -0
- package/web/images/shadow.png +0 -0
- package/web/pdf_viewer.css +8 -5
- package/web/pdf_viewer.js +109 -33
- package/web/pdf_viewer.js.map +1 -1
- package/webpack.js +1 -9
- package/es5/web/images/texture.png +0 -0
- package/web/images/texture.png +0 -0
@@ -29,6 +29,8 @@ var _api = require("../../display/api.js");
|
|
29
29
|
|
30
30
|
var _is_node = require("../../shared/is_node.js");
|
31
31
|
|
32
|
+
var _node_utils = require("../../display/node_utils.js");
|
33
|
+
|
32
34
|
function getTopLeftPixel(canvasContext) {
|
33
35
|
const imgData = canvasContext.getImageData(0, 0, 1, 1);
|
34
36
|
return {
|
@@ -46,7 +48,7 @@ describe("custom canvas rendering", function () {
|
|
46
48
|
let page;
|
47
49
|
beforeAll(function (done) {
|
48
50
|
if (_is_node.isNodeJS) {
|
49
|
-
CanvasFactory = new
|
51
|
+
CanvasFactory = new _node_utils.NodeCanvasFactory();
|
50
52
|
} else {
|
51
53
|
CanvasFactory = new _display_utils.DOMCanvasFactory();
|
52
54
|
}
|
@@ -105,4 +107,130 @@ describe("custom canvas rendering", function () {
|
|
105
107
|
done();
|
106
108
|
}).catch(done.fail);
|
107
109
|
});
|
110
|
+
});
|
111
|
+
describe("custom ownerDocument", function () {
|
112
|
+
const FontFace = globalThis.FontFace;
|
113
|
+
|
114
|
+
const checkFont = font => /g_d\d+_f1/.test(font.family);
|
115
|
+
|
116
|
+
const checkFontFaceRule = rule => /^@font-face {font-family:"g_d\d+_f1";src:/.test(rule);
|
117
|
+
|
118
|
+
beforeEach(() => {
|
119
|
+
globalThis.FontFace = function MockFontFace(name) {
|
120
|
+
this.family = name;
|
121
|
+
};
|
122
|
+
});
|
123
|
+
afterEach(() => {
|
124
|
+
globalThis.FontFace = FontFace;
|
125
|
+
});
|
126
|
+
|
127
|
+
function getMocks() {
|
128
|
+
const elements = [];
|
129
|
+
|
130
|
+
const createElement = name => {
|
131
|
+
let element = typeof document !== "undefined" && document.createElement(name);
|
132
|
+
|
133
|
+
if (name === "style") {
|
134
|
+
element = {
|
135
|
+
tagName: name,
|
136
|
+
sheet: {
|
137
|
+
cssRules: [],
|
138
|
+
|
139
|
+
insertRule(rule) {
|
140
|
+
this.cssRules.push(rule);
|
141
|
+
}
|
142
|
+
|
143
|
+
}
|
144
|
+
};
|
145
|
+
Object.assign(element, {
|
146
|
+
remove() {
|
147
|
+
this.remove.called = true;
|
148
|
+
}
|
149
|
+
|
150
|
+
});
|
151
|
+
}
|
152
|
+
|
153
|
+
elements.push(element);
|
154
|
+
return element;
|
155
|
+
};
|
156
|
+
|
157
|
+
const ownerDocument = {
|
158
|
+
fonts: new Set(),
|
159
|
+
createElement,
|
160
|
+
documentElement: {
|
161
|
+
getElementsByTagName: () => [{
|
162
|
+
appendChild: () => {}
|
163
|
+
}]
|
164
|
+
}
|
165
|
+
};
|
166
|
+
const CanvasFactory = _is_node.isNodeJS ? new _node_utils.NodeCanvasFactory() : new _display_utils.DOMCanvasFactory({
|
167
|
+
ownerDocument
|
168
|
+
});
|
169
|
+
return {
|
170
|
+
elements,
|
171
|
+
ownerDocument,
|
172
|
+
CanvasFactory
|
173
|
+
};
|
174
|
+
}
|
175
|
+
|
176
|
+
it("should use given document for loading fonts (with Font Loading API)", async function () {
|
177
|
+
const {
|
178
|
+
ownerDocument,
|
179
|
+
elements,
|
180
|
+
CanvasFactory
|
181
|
+
} = getMocks();
|
182
|
+
const getDocumentParams = (0, _test_utils.buildGetDocumentParams)("TrueType_without_cmap.pdf", {
|
183
|
+
disableFontFace: false,
|
184
|
+
ownerDocument
|
185
|
+
});
|
186
|
+
const loadingTask = (0, _api.getDocument)(getDocumentParams);
|
187
|
+
const doc = await loadingTask.promise;
|
188
|
+
const page = await doc.getPage(1);
|
189
|
+
const viewport = page.getViewport({
|
190
|
+
scale: 1
|
191
|
+
});
|
192
|
+
const canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
|
193
|
+
await page.render({
|
194
|
+
canvasContext: canvasAndCtx.context,
|
195
|
+
viewport
|
196
|
+
}).promise;
|
197
|
+
const style = elements.find(element => element.tagName === "style");
|
198
|
+
expect(style).toBeFalsy();
|
199
|
+
expect(ownerDocument.fonts.size).toBeGreaterThanOrEqual(1);
|
200
|
+
expect(Array.from(ownerDocument.fonts).find(checkFont)).toBeTruthy();
|
201
|
+
await doc.destroy();
|
202
|
+
await loadingTask.destroy();
|
203
|
+
CanvasFactory.destroy(canvasAndCtx);
|
204
|
+
expect(ownerDocument.fonts.size).toBe(0);
|
205
|
+
});
|
206
|
+
it("should use given document for loading fonts (with CSS rules)", async function () {
|
207
|
+
const {
|
208
|
+
ownerDocument,
|
209
|
+
elements,
|
210
|
+
CanvasFactory
|
211
|
+
} = getMocks();
|
212
|
+
ownerDocument.fonts = null;
|
213
|
+
const getDocumentParams = (0, _test_utils.buildGetDocumentParams)("TrueType_without_cmap.pdf", {
|
214
|
+
disableFontFace: false,
|
215
|
+
ownerDocument
|
216
|
+
});
|
217
|
+
const loadingTask = (0, _api.getDocument)(getDocumentParams);
|
218
|
+
const doc = await loadingTask.promise;
|
219
|
+
const page = await doc.getPage(1);
|
220
|
+
const viewport = page.getViewport({
|
221
|
+
scale: 1
|
222
|
+
});
|
223
|
+
const canvasAndCtx = CanvasFactory.create(viewport.width, viewport.height);
|
224
|
+
await page.render({
|
225
|
+
canvasContext: canvasAndCtx.context,
|
226
|
+
viewport
|
227
|
+
}).promise;
|
228
|
+
const style = elements.find(element => element.tagName === "style");
|
229
|
+
expect(style.sheet.cssRules.length).toBeGreaterThanOrEqual(1);
|
230
|
+
expect(style.sheet.cssRules.find(checkFontFaceRule)).toBeTruthy();
|
231
|
+
await doc.destroy();
|
232
|
+
await loadingTask.destroy();
|
233
|
+
CanvasFactory.destroy(canvasAndCtx);
|
234
|
+
expect(style.remove.called).toBe(true);
|
235
|
+
});
|
108
236
|
});
|
@@ -23,20 +23,131 @@
|
|
23
23
|
|
24
24
|
var _test_utils = require("./test_utils.js");
|
25
25
|
|
26
|
+
var _primitives = require("../../core/primitives.js");
|
27
|
+
|
28
|
+
var _document = require("../../core/document.js");
|
29
|
+
|
30
|
+
var _stream = require("../../core/stream.js");
|
31
|
+
|
26
32
|
describe("document", function () {
|
27
33
|
describe("Page", function () {
|
28
|
-
it("should create correct objId using the idFactory", function () {
|
34
|
+
it("should create correct objId/fontId using the idFactory", function () {
|
29
35
|
const idFactory1 = (0, _test_utils.createIdFactory)(0);
|
30
36
|
const idFactory2 = (0, _test_utils.createIdFactory)(1);
|
31
37
|
expect(idFactory1.createObjId()).toEqual("p0_1");
|
32
38
|
expect(idFactory1.createObjId()).toEqual("p0_2");
|
39
|
+
expect(idFactory1.createFontId()).toEqual("f1");
|
40
|
+
expect(idFactory1.createFontId()).toEqual("f2");
|
33
41
|
expect(idFactory1.getDocId()).toEqual("g_d0");
|
34
42
|
expect(idFactory2.createObjId()).toEqual("p1_1");
|
35
43
|
expect(idFactory2.createObjId()).toEqual("p1_2");
|
44
|
+
expect(idFactory2.createFontId()).toEqual("f1");
|
45
|
+
expect(idFactory2.createFontId()).toEqual("f2");
|
36
46
|
expect(idFactory2.getDocId()).toEqual("g_d0");
|
37
47
|
expect(idFactory1.createObjId()).toEqual("p0_3");
|
38
48
|
expect(idFactory1.createObjId()).toEqual("p0_4");
|
49
|
+
expect(idFactory1.createFontId()).toEqual("f3");
|
50
|
+
expect(idFactory1.createFontId()).toEqual("f4");
|
39
51
|
expect(idFactory1.getDocId()).toEqual("g_d0");
|
40
52
|
});
|
41
53
|
});
|
54
|
+
describe("PDFDocument", function () {
|
55
|
+
const pdfManager = {
|
56
|
+
get docId() {
|
57
|
+
return "d0";
|
58
|
+
}
|
59
|
+
|
60
|
+
};
|
61
|
+
const stream = new _stream.StringStream("Dummy_PDF_data");
|
62
|
+
|
63
|
+
function getDocument(acroForm) {
|
64
|
+
const pdfDocument = new _document.PDFDocument(pdfManager, stream);
|
65
|
+
pdfDocument.catalog = {
|
66
|
+
acroForm
|
67
|
+
};
|
68
|
+
return pdfDocument;
|
69
|
+
}
|
70
|
+
|
71
|
+
it("should get form info when no form data is present", function () {
|
72
|
+
const pdfDocument = getDocument(null);
|
73
|
+
expect(pdfDocument.formInfo).toEqual({
|
74
|
+
hasAcroForm: false,
|
75
|
+
hasXfa: false
|
76
|
+
});
|
77
|
+
});
|
78
|
+
it("should get form info when XFA is present", function () {
|
79
|
+
const acroForm = new _primitives.Dict();
|
80
|
+
acroForm.set("XFA", []);
|
81
|
+
let pdfDocument = getDocument(acroForm);
|
82
|
+
expect(pdfDocument.formInfo).toEqual({
|
83
|
+
hasAcroForm: false,
|
84
|
+
hasXfa: false
|
85
|
+
});
|
86
|
+
acroForm.set("XFA", ["foo", "bar"]);
|
87
|
+
pdfDocument = getDocument(acroForm);
|
88
|
+
expect(pdfDocument.formInfo).toEqual({
|
89
|
+
hasAcroForm: false,
|
90
|
+
hasXfa: true
|
91
|
+
});
|
92
|
+
acroForm.set("XFA", new _stream.StringStream(""));
|
93
|
+
pdfDocument = getDocument(acroForm);
|
94
|
+
expect(pdfDocument.formInfo).toEqual({
|
95
|
+
hasAcroForm: false,
|
96
|
+
hasXfa: false
|
97
|
+
});
|
98
|
+
acroForm.set("XFA", new _stream.StringStream("non-empty"));
|
99
|
+
pdfDocument = getDocument(acroForm);
|
100
|
+
expect(pdfDocument.formInfo).toEqual({
|
101
|
+
hasAcroForm: false,
|
102
|
+
hasXfa: true
|
103
|
+
});
|
104
|
+
});
|
105
|
+
it("should get form info when AcroForm is present", function () {
|
106
|
+
const acroForm = new _primitives.Dict();
|
107
|
+
acroForm.set("Fields", []);
|
108
|
+
let pdfDocument = getDocument(acroForm);
|
109
|
+
expect(pdfDocument.formInfo).toEqual({
|
110
|
+
hasAcroForm: false,
|
111
|
+
hasXfa: false
|
112
|
+
});
|
113
|
+
acroForm.set("Fields", ["foo", "bar"]);
|
114
|
+
pdfDocument = getDocument(acroForm);
|
115
|
+
expect(pdfDocument.formInfo).toEqual({
|
116
|
+
hasAcroForm: true,
|
117
|
+
hasXfa: false
|
118
|
+
});
|
119
|
+
acroForm.set("Fields", ["foo", "bar"]);
|
120
|
+
acroForm.set("SigFlags", 2);
|
121
|
+
pdfDocument = getDocument(acroForm);
|
122
|
+
expect(pdfDocument.formInfo).toEqual({
|
123
|
+
hasAcroForm: true,
|
124
|
+
hasXfa: false
|
125
|
+
});
|
126
|
+
const annotationDict = new _primitives.Dict();
|
127
|
+
annotationDict.set("FT", _primitives.Name.get("Sig"));
|
128
|
+
annotationDict.set("Rect", [0, 0, 0, 0]);
|
129
|
+
|
130
|
+
const annotationRef = _primitives.Ref.get(11, 0);
|
131
|
+
|
132
|
+
const kidsDict = new _primitives.Dict();
|
133
|
+
kidsDict.set("Kids", [annotationRef]);
|
134
|
+
|
135
|
+
const kidsRef = _primitives.Ref.get(10, 0);
|
136
|
+
|
137
|
+
pdfDocument.xref = new _test_utils.XRefMock([{
|
138
|
+
ref: annotationRef,
|
139
|
+
data: annotationDict
|
140
|
+
}, {
|
141
|
+
ref: kidsRef,
|
142
|
+
data: kidsDict
|
143
|
+
}]);
|
144
|
+
acroForm.set("Fields", [kidsRef]);
|
145
|
+
acroForm.set("SigFlags", 3);
|
146
|
+
pdfDocument = getDocument(acroForm);
|
147
|
+
expect(pdfDocument.formInfo).toEqual({
|
148
|
+
hasAcroForm: false,
|
149
|
+
hasXfa: false
|
150
|
+
});
|
151
|
+
});
|
152
|
+
});
|
42
153
|
});
|
@@ -108,14 +108,26 @@ describe("evaluator", function () {
|
|
108
108
|
});
|
109
109
|
});
|
110
110
|
it("should handle two glued operations", function (done) {
|
111
|
-
|
112
|
-
|
111
|
+
const imgDict = new _primitives.Dict();
|
112
|
+
imgDict.set("Subtype", _primitives.Name.get("Image"));
|
113
|
+
imgDict.set("Width", 1);
|
114
|
+
imgDict.set("Height", 1);
|
115
|
+
const imgStream = new _stream.Stream([0]);
|
116
|
+
imgStream.dict = imgDict;
|
117
|
+
const xObject = new _primitives.Dict();
|
118
|
+
xObject.set("Res1", imgStream);
|
119
|
+
const resources = new ResourcesMock();
|
120
|
+
resources.XObject = xObject;
|
113
121
|
var stream = new _stream.StringStream("/Res1 DoQ");
|
114
122
|
runOperatorListCheck(partialEvaluator, stream, resources, function (result) {
|
115
|
-
expect(
|
116
|
-
expect(result.fnArray
|
117
|
-
expect(result.fnArray[
|
118
|
-
expect(result.fnArray[
|
123
|
+
expect(result.fnArray.length).toEqual(3);
|
124
|
+
expect(result.fnArray[0]).toEqual(_util.OPS.dependency);
|
125
|
+
expect(result.fnArray[1]).toEqual(_util.OPS.paintImageXObject);
|
126
|
+
expect(result.fnArray[2]).toEqual(_util.OPS.restore);
|
127
|
+
expect(result.argsArray.length).toEqual(3);
|
128
|
+
expect(result.argsArray[0]).toEqual(["img_p0_1"]);
|
129
|
+
expect(result.argsArray[1]).toEqual(["img_p0_1", 1, 1]);
|
130
|
+
expect(result.argsArray[2]).toEqual(null);
|
119
131
|
done();
|
120
132
|
});
|
121
133
|
});
|
@@ -194,16 +206,23 @@ describe("evaluator", function () {
|
|
194
206
|
});
|
195
207
|
});
|
196
208
|
it("should execute if nested commands", function (done) {
|
209
|
+
const gState = new _primitives.Dict();
|
210
|
+
gState.set("LW", 2);
|
211
|
+
gState.set("CA", 0.5);
|
212
|
+
const extGState = new _primitives.Dict();
|
213
|
+
extGState.set("GS2", gState);
|
214
|
+
const resources = new ResourcesMock();
|
215
|
+
resources.ExtGState = extGState;
|
197
216
|
var stream = new _stream.StringStream("/F2 /GS2 gs 5.711 Tf");
|
198
|
-
runOperatorListCheck(partialEvaluator, stream,
|
217
|
+
runOperatorListCheck(partialEvaluator, stream, resources, function (result) {
|
199
218
|
expect(result.fnArray.length).toEqual(3);
|
200
219
|
expect(result.fnArray[0]).toEqual(_util.OPS.setGState);
|
201
220
|
expect(result.fnArray[1]).toEqual(_util.OPS.dependency);
|
202
221
|
expect(result.fnArray[2]).toEqual(_util.OPS.setFont);
|
203
222
|
expect(result.argsArray.length).toEqual(3);
|
204
|
-
expect(result.argsArray[0]
|
205
|
-
expect(result.argsArray[1]
|
206
|
-
expect(result.argsArray[2]
|
223
|
+
expect(result.argsArray[0]).toEqual([[["LW", 2], ["CA", 0.5]]]);
|
224
|
+
expect(result.argsArray[1]).toEqual(["g_font_error"]);
|
225
|
+
expect(result.argsArray[2]).toEqual(["g_font_error", 5.711]);
|
207
226
|
done();
|
208
227
|
});
|
209
228
|
});
|
@@ -22,7 +22,7 @@
|
|
22
22
|
"use strict";
|
23
23
|
|
24
24
|
function initializePDFJS(callback) {
|
25
|
-
Promise.all(["pdfjs/display/api.js", "pdfjs/display/worker_options.js", "pdfjs/display/network.js", "pdfjs/display/fetch_stream.js", "pdfjs/shared/is_node.js", "pdfjs-test/unit/annotation_spec.js", "pdfjs-test/unit/api_spec.js", "pdfjs-test/unit/bidi_spec.js", "pdfjs-test/unit/cff_parser_spec.js", "pdfjs-test/unit/cmap_spec.js", "pdfjs-test/unit/colorspace_spec.js", "pdfjs-test/unit/core_utils_spec.js", "pdfjs-test/unit/crypto_spec.js", "pdfjs-test/unit/custom_spec.js", "pdfjs-test/unit/display_svg_spec.js", "pdfjs-test/unit/display_utils_spec.js", "pdfjs-test/unit/document_spec.js", "pdfjs-test/unit/encodings_spec.js", "pdfjs-test/unit/evaluator_spec.js", "pdfjs-test/unit/function_spec.js", "pdfjs-test/unit/fetch_stream_spec.js", "pdfjs-test/unit/message_handler_spec.js", "pdfjs-test/unit/metadata_spec.js", "pdfjs-test/unit/murmurhash3_spec.js", "pdfjs-test/unit/network_spec.js", "pdfjs-test/unit/network_utils_spec.js", "pdfjs-test/unit/parser_spec.js", "pdfjs-test/unit/pdf_find_controller_spec.js", "pdfjs-test/unit/pdf_find_utils_spec.js", "pdfjs-test/unit/pdf_history_spec.js", "pdfjs-test/unit/primitives_spec.js", "pdfjs-test/unit/stream_spec.js", "pdfjs-test/unit/type1_parser_spec.js", "pdfjs-test/unit/ui_utils_spec.js", "pdfjs-test/unit/unicode_spec.js", "pdfjs-test/unit/util_spec.js"].map(function (moduleName) {
|
25
|
+
Promise.all(["pdfjs/display/api.js", "pdfjs/display/worker_options.js", "pdfjs/display/network.js", "pdfjs/display/fetch_stream.js", "pdfjs/shared/is_node.js", "pdfjs-test/unit/annotation_spec.js", "pdfjs-test/unit/annotation_storage_spec.js", "pdfjs-test/unit/api_spec.js", "pdfjs-test/unit/bidi_spec.js", "pdfjs-test/unit/cff_parser_spec.js", "pdfjs-test/unit/cmap_spec.js", "pdfjs-test/unit/colorspace_spec.js", "pdfjs-test/unit/core_utils_spec.js", "pdfjs-test/unit/crypto_spec.js", "pdfjs-test/unit/custom_spec.js", "pdfjs-test/unit/display_svg_spec.js", "pdfjs-test/unit/display_utils_spec.js", "pdfjs-test/unit/document_spec.js", "pdfjs-test/unit/encodings_spec.js", "pdfjs-test/unit/evaluator_spec.js", "pdfjs-test/unit/function_spec.js", "pdfjs-test/unit/fetch_stream_spec.js", "pdfjs-test/unit/message_handler_spec.js", "pdfjs-test/unit/metadata_spec.js", "pdfjs-test/unit/murmurhash3_spec.js", "pdfjs-test/unit/network_spec.js", "pdfjs-test/unit/network_utils_spec.js", "pdfjs-test/unit/parser_spec.js", "pdfjs-test/unit/pdf_find_controller_spec.js", "pdfjs-test/unit/pdf_find_utils_spec.js", "pdfjs-test/unit/pdf_history_spec.js", "pdfjs-test/unit/primitives_spec.js", "pdfjs-test/unit/stream_spec.js", "pdfjs-test/unit/type1_parser_spec.js", "pdfjs-test/unit/ui_utils_spec.js", "pdfjs-test/unit/unicode_spec.js", "pdfjs-test/unit/util_spec.js", "pdfjs-test/unit/writer_spec.js"].map(function (moduleName) {
|
26
26
|
return SystemJS.import(moduleName);
|
27
27
|
})).then(function (modules) {
|
28
28
|
const displayApi = modules[0];
|
@@ -21,7 +21,7 @@
|
|
21
21
|
*/
|
22
22
|
"use strict";
|
23
23
|
|
24
|
-
var
|
24
|
+
var _test_utils = require("./test_utils.js");
|
25
25
|
|
26
26
|
var _metadata = require("../../display/metadata.js");
|
27
27
|
|
@@ -64,7 +64,7 @@ describe("metadata", function () {
|
|
64
64
|
it("should gracefully handle incomplete tags (issue 8884)", function () {
|
65
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
66
|
const metadata = new _metadata.Metadata(data);
|
67
|
-
expect((0,
|
67
|
+
expect((0, _test_utils.isEmptyObj)(metadata.getAll())).toEqual(true);
|
68
68
|
});
|
69
69
|
it('should gracefully handle "junk" before the actual metadata (issue 10395)', function () {
|
70
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"?>';
|
@@ -102,7 +102,7 @@ describe("metadata", function () {
|
|
102
102
|
it("should gracefully handle unbalanced end tags (issue 10410)", function () {
|
103
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
104
|
const metadata = new _metadata.Metadata(data);
|
105
|
-
expect((0,
|
105
|
+
expect((0, _test_utils.isEmptyObj)(metadata.getAll())).toEqual(true);
|
106
106
|
});
|
107
107
|
it("should not be vulnerable to the billion laughs attack", function () {
|
108
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>";
|