From 612822f5a3363f0345e8d7a11dc90e09bef70de7 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 18 Feb 2022 14:18:33 -0800 Subject: [PATCH 1/4] Handle non-number size attributes in images The previous code assumed we would always have number size values for width and height, but attributes like 100% are valid. In cases where we don't have a numeric value we can just fallback and let the item be sized by the reader CSS. --- packages/readabilityjs/Readability.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/readabilityjs/Readability.js b/packages/readabilityjs/Readability.js index 4398d59c6..9a2d75a04 100644 --- a/packages/readabilityjs/Readability.js +++ b/packages/readabilityjs/Readability.js @@ -512,11 +512,17 @@ Readability.prototype = { if (src) { const absoluteSrc = this.toAbsoluteURI(src); + const parseNumber = (str) => { + if (!str) { return 0; } + const res = parseNumber(str); + if (isNaN(res)) { return 0; } + return res + } - const width = image.getAttribute('width') || image.style.width; - const height = image.getAttribute('height') || image.style.height; + const width = parseNumber(image.getAttribute('width') || image.style.width); + const height = parseNumber(image.getAttribute('height') || image.style.height); - const proxySrc = this.createImageProxyUrl(absoluteSrc, width || 0, height || 0); + const proxySrc = this.createImageProxyUrl(absoluteSrc, width, height); image.setAttribute('src', proxySrc); } }); From 8756a52a540dd38fd658eaa4e448a04175d956e1 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 18 Feb 2022 14:53:24 -0800 Subject: [PATCH 2/4] Call correct parsing method --- packages/readabilityjs/Readability.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/readabilityjs/Readability.js b/packages/readabilityjs/Readability.js index 9a2d75a04..d9c64963a 100644 --- a/packages/readabilityjs/Readability.js +++ b/packages/readabilityjs/Readability.js @@ -519,8 +519,8 @@ Readability.prototype = { return res } - const width = parseNumber(image.getAttribute('width') || image.style.width); - const height = parseNumber(image.getAttribute('height') || image.style.height); + const width = parseInt(image.getAttribute('width') || image.style.width); + const height = parseInt(image.getAttribute('height') || image.style.height); const proxySrc = this.createImageProxyUrl(absoluteSrc, width, height); image.setAttribute('src', proxySrc); From 603e9683db23ff092b6185142a268a5e164e00af Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 18 Feb 2022 15:34:38 -0800 Subject: [PATCH 3/4] Better naming for this parsing function --- packages/readabilityjs/Readability.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/readabilityjs/Readability.js b/packages/readabilityjs/Readability.js index d9c64963a..d5963bc1a 100644 --- a/packages/readabilityjs/Readability.js +++ b/packages/readabilityjs/Readability.js @@ -512,15 +512,15 @@ Readability.prototype = { if (src) { const absoluteSrc = this.toAbsoluteURI(src); - const parseNumber = (str) => { + const attToNumber = (str) => { if (!str) { return 0; } - const res = parseNumber(str); + const res = parseInt(str); if (isNaN(res)) { return 0; } return res } - const width = parseInt(image.getAttribute('width') || image.style.width); - const height = parseInt(image.getAttribute('height') || image.style.height); + const width = attToNumber(image.getAttribute('width') || image.style.width); + const height = attToNumber(image.getAttribute('height') || image.style.height); const proxySrc = this.createImageProxyUrl(absoluteSrc, width, height); image.setAttribute('src', proxySrc); From bcb90dac493538a7238eec6421d270064b9b1d08 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Fri, 18 Feb 2022 18:31:06 -0800 Subject: [PATCH 4/4] Make sure we strictly interpret img width/height values --- packages/readabilityjs/Readability.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/readabilityjs/Readability.js b/packages/readabilityjs/Readability.js index d5963bc1a..fd10623f9 100644 --- a/packages/readabilityjs/Readability.js +++ b/packages/readabilityjs/Readability.js @@ -516,6 +516,7 @@ Readability.prototype = { if (!str) { return 0; } const res = parseInt(str); if (isNaN(res)) { return 0; } + if (String(res) !== str) { return 0; } return res }