[Pkg-javascript-commits] [pdf.js] 118/414: Wraps worker script if its cross-origin location is detected.
David Prévot
taffit at moszumanska.debian.org
Tue Jun 28 17:12:12 UTC 2016
This is an automated email from the git hooks/post-receive script.
taffit pushed a commit to branch master
in repository pdf.js.
commit 1e45f2d4e134d3ff5ced2b48f10dd2b4d7d76afa
Author: Yury Delendik <ydelendik at mozilla.com>
Date: Fri Jan 15 15:05:46 2016 -0600
Wraps worker script if its cross-origin location is detected.
---
src/display/api.js | 17 +++++++++++++++++
src/shared/util.js | 16 ++++++++++++++++
2 files changed, 33 insertions(+)
diff --git a/src/display/api.js b/src/display/api.js
index 864a80e..74f0f87 100644
--- a/src/display/api.js
+++ b/src/display/api.js
@@ -48,6 +48,7 @@ var error = sharedUtil.error;
var deprecated = sharedUtil.deprecated;
var info = sharedUtil.info;
var isArrayBuffer = sharedUtil.isArrayBuffer;
+var isSameOrigin = sharedUtil.isSameOrigin;
var loadJpegStream = sharedUtil.loadJpegStream;
var stringToBytes = sharedUtil.stringToBytes;
var warn = sharedUtil.warn;
@@ -1226,6 +1227,14 @@ var PDFWorker = (function PDFWorkerClosure() {
return PDFJS.fakeWorkerFilesLoadedCapability.promise;
}
+ function createCDNWrapper(url) {
+ // We will rely on blob URL's property to specify origin.
+ // We want this function to fail in case if createObjectURL or Blob do not
+ // exist or fail for some reason -- our Worker creation will fail anyway.
+ var wrapper = 'importScripts(\'' + url + '\');';
+ return URL.createObjectURL(new Blob([wrapper]));
+ }
+
function PDFWorker(name) {
this.name = name;
this.destroyed = false;
@@ -1261,6 +1270,14 @@ var PDFWorker = (function PDFWorkerClosure() {
var workerSrc = getWorkerSrc();
try {
+//#if GENERIC
+// // Wraps workerSrc path into blob URL, if the former does not belong
+// // to the same origin.
+// if (!isSameOrigin(window.location.href, workerSrc)) {
+// workerSrc = createCDNWrapper(
+// combineUrl(window.location.href, workerSrc));
+// }
+//#endif
// Some versions of FF can't create a worker on localhost, see:
// https://bugzilla.mozilla.org/show_bug.cgi?id=683280
var worker = new Worker(workerSrc);
diff --git a/src/shared/util.js b/src/shared/util.js
index 2869688..ce7e795 100644
--- a/src/shared/util.js
+++ b/src/shared/util.js
@@ -293,6 +293,21 @@ function combineUrl(baseUrl, url) {
return new URL(url, baseUrl).href;
}
+// Checks if URLs have the same origin. For non-HTTP based URLs, returns false.
+function isSameOrigin(baseUrl, otherUrl) {
+ try {
+ var base = new URL(baseUrl);
+ if (!base.origin || base.origin === 'null') {
+ return false; // non-HTTP url
+ }
+ } catch (e) {
+ return false;
+ }
+
+ var other = new URL(otherUrl, base);
+ return base.origin === other.origin;
+}
+
// Validates if URL is safe and allowed, e.g. to avoid XSS.
function isValidUrl(url, allowRelative) {
if (!url) {
@@ -2291,6 +2306,7 @@ exports.isExternalLinkTargetSet = isExternalLinkTargetSet;
exports.isInt = isInt;
exports.isNum = isNum;
exports.isString = isString;
+exports.isSameOrigin = isSameOrigin;
exports.isValidUrl = isValidUrl;
exports.loadJpegStream = loadJpegStream;
exports.log2 = log2;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/pdf.js.git
More information about the Pkg-javascript-commits
mailing list