diff --git a/client/src/views/fields/url-multiple.js b/client/src/views/fields/url-multiple.js index 3cfaf6e39a..ca4d5496a4 100644 --- a/client/src/views/fields/url-multiple.js +++ b/client/src/views/fields/url-multiple.js @@ -53,13 +53,32 @@ class UrlMultipleFieldView extends ArrayFieldView { value = this.strip(value); } - if (value === decodeURI(value)) { - value = encodeURI(value); + try { + if (value === decodeURI(value)) { + value = encodeURI(value); + } + } catch (e) { + console.warn(`Malformed URI ${value}.`); } super.addValueFromUi(value); } + /** + * @private + * @param {string} value + * @return {string} + */ + decodeURI(value) { + try { + return decodeURI(value); + } catch (e) { + console.warn(`Malformed URI ${value}.`); + + return value; + } + } + /** * @param {string} value * @return {string} @@ -88,7 +107,7 @@ class UrlMultipleFieldView extends ArrayFieldView { return $('') .attr('href', this.prepareUrl(value)) .attr('target', '_blank') - .text(decodeURI(value)); + .text(this.decodeURI(value)); }); return $list @@ -111,7 +130,7 @@ class UrlMultipleFieldView extends ArrayFieldView { .attr('href', this.prepareUrl(value)) .css('user-drag', 'none') .attr('target', '_blank') - .text(decodeURI(value)) + .text(this.decodeURI(value)) ); return $item.get(0).outerHTML; diff --git a/client/src/views/fields/url.js b/client/src/views/fields/url.js index d4b27235ac..6ef7146752 100644 --- a/client/src/views/fields/url.js +++ b/client/src/views/fields/url.js @@ -70,7 +70,7 @@ class UrlFieldView extends VarcharFieldView { return; } - const decoded = parsedValue ? decodeURI(parsedValue) : ''; + const decoded = parsedValue ? this.decodeURI(parsedValue) : ''; this.$element.val(decoded); }); @@ -80,7 +80,22 @@ class UrlFieldView extends VarcharFieldView { getValueForDisplay() { const value = this.model.get(this.name); - return value ? decodeURI(value) : null; + return value ? this.decodeURI(value) : null; + } + + /** + * @private + * @param {string} value + * @return {string} + */ + decodeURI(value) { + try { + return decodeURI(value); + } catch (e) { + console.warn(`Malformed URI ${value}.`); + + return value; + } } /** @@ -94,8 +109,14 @@ class UrlFieldView extends VarcharFieldView { value = this.strip(value); } - if (value === decodeURI(value)) { - value = encodeURI(value); + try { + if (value === decodeURI(value)) { + value = encodeURI(value); + } + } catch (e) { + console.warn(`Malformed URI ${value}.`); + + return value; } return value;