From 00efff532cf4754d0335560a5f1afc894ec03417 Mon Sep 17 00:00:00 2001 From: Jonas Jenwald Date: Wed, 11 Sep 2019 13:17:41 +0200 Subject: [PATCH] Ensure that `addLinkAttributes` is always called with a valid `url` parameter There's no good reason for calling this helper function without a `url` parameter, and this way we can prevent that from happening. Note how the `PDFOutlineViewer` call-site was already doing the right thing here, and only the `LinkAnnotationElement` call-site needed a small adjustment to make it work. --- src/display/annotation_layer.js | 26 ++++++++++++-------------- src/display/display_utils.js | 17 +++++++++-------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/display/annotation_layer.js b/src/display/annotation_layer.js index 83cdd4baab24f..fdf06a62e94f1 100644 --- a/src/display/annotation_layer.js +++ b/src/display/annotation_layer.js @@ -294,20 +294,18 @@ class LinkAnnotationElement extends AnnotationElement { const { data, linkService, } = this; const link = document.createElement('a'); - addLinkAttributes(link, { - url: data.url, - target: (data.newWindow ? - LinkTarget.BLANK : linkService.externalLinkTarget), - rel: linkService.externalLinkRel, - enabled: linkService.externalLinkEnabled, - }); - - if (!data.url) { - if (data.action) { - this._bindNamedAction(link, data.action); - } else { - this._bindLink(link, data.dest); - } + if (data.url) { + addLinkAttributes(link, { + url: data.url, + target: (data.newWindow ? + LinkTarget.BLANK : linkService.externalLinkTarget), + rel: linkService.externalLinkRel, + enabled: linkService.externalLinkEnabled, + }); + } else if (data.action) { + this._bindNamedAction(link, data.action); + } else { + this._bindLink(link, data.dest); } this.container.appendChild(link); diff --git a/src/display/display_utils.js b/src/display/display_utils.js index d9b0159e509f9..119ee77af1f82 100644 --- a/src/display/display_utils.js +++ b/src/display/display_utils.js @@ -354,7 +354,10 @@ const LinkTargetStringMap = [ * @param {ExternalLinkParameters} params */ function addLinkAttributes(link, { url, target, rel, enabled = true, } = {}) { - const urlNullRemoved = (url ? removeNullCharacters(url) : ''); + assert(url && typeof url === 'string', + 'addLinkAttributes: A valid "url" parameter must provided.'); + + const urlNullRemoved = removeNullCharacters(url); if (enabled) { link.href = link.title = urlNullRemoved; } else { @@ -365,14 +368,12 @@ function addLinkAttributes(link, { url, target, rel, enabled = true, } = {}) { }; } - if (url) { - const LinkTargetValues = Object.values(LinkTarget); - const targetIndex = - LinkTargetValues.includes(target) ? target : LinkTarget.NONE; - link.target = LinkTargetStringMap[targetIndex]; + const LinkTargetValues = Object.values(LinkTarget); + const targetIndex = + LinkTargetValues.includes(target) ? target : LinkTarget.NONE; + link.target = LinkTargetStringMap[targetIndex]; - link.rel = (typeof rel === 'string' ? rel : DEFAULT_LINK_REL); - } + link.rel = (typeof rel === 'string' ? rel : DEFAULT_LINK_REL); } // Gets the file name from a given URL.