From 1fe30eda6cf05e46bb929da53194cdba265c8887 Mon Sep 17 00:00:00 2001 From: zoomchan-cxj Date: Mon, 22 Aug 2022 12:09:19 +0800 Subject: [PATCH] fix(vue): fix regular expressions catastrophic backtracking --- driver/js/packages/hippy-react/src/dom/element-node.ts | 2 +- driver/js/packages/hippy-vue-css-loader/src/css-parser.js | 6 +++--- driver/js/packages/hippy-vue/src/renderer/element-node.js | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/driver/js/packages/hippy-react/src/dom/element-node.ts b/driver/js/packages/hippy-react/src/dom/element-node.ts index d69aa36d7..a52d788f0 100644 --- a/driver/js/packages/hippy-react/src/dom/element-node.ts +++ b/driver/js/packages/hippy-react/src/dom/element-node.ts @@ -122,7 +122,7 @@ function convertToDegree(value: string, unit = DEGREE_UNIT.DEG): string { */ function getLinearGradientAngle(value: string): string | undefined { const processedValue = (value || '').replace(/\s*/g, '').toLowerCase(); - const reg = /^([+-]?\d+\.?\d*)+(deg|turn|rad)|(to\w+)$/g; + const reg = /^([+-]?(?=(?\d+))\k\.?\d*)+(deg|turn|rad)|(to\w+)$/g; const valueList = reg.exec(processedValue); if (!Array.isArray(valueList)) return; // default direction is to bottom, i.e. 180degree diff --git a/driver/js/packages/hippy-vue-css-loader/src/css-parser.js b/driver/js/packages/hippy-vue-css-loader/src/css-parser.js index c3802c166..68e5bb15e 100644 --- a/driver/js/packages/hippy-vue-css-loader/src/css-parser.js +++ b/driver/js/packages/hippy-vue-css-loader/src/css-parser.js @@ -61,7 +61,7 @@ const commentRegexp = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//g; * Trim `str`. */ function trim(str) { - return str ? str.replace(/^\s+|\s+$/g, '') : ''; + return str ? str.trim() : ''; } @@ -297,7 +297,7 @@ function parseCSS(css, options) { /* @fix Remove all comments from selectors * http://ostermiller.org/findcomment.html */ return trim(m[0]) - .replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*\/+/g, '') + .replace(/\/\*(?=(?([^*]|[\r\n]|((?=(?\*+))\k([^*/]|[\r\n])))*))\k\*\/+/g, '') .replace(/"(?:\\"|[^"])*"|'(?:\\'|[^'])*'/g, m => m.replace(/,/g, '\u200C')) .split(/\s*(?![^(]*\)),\s*/) .map(s => s.replace(/\u200C/g, ',')); @@ -335,7 +335,7 @@ function parseCSS(css, options) { */ function getLinearGradientAngle(value) { const processedValue = (value || '').replace(/\s*/g, '').toLowerCase(); - const reg = /^([+-]?\d+\.?\d*)+(deg|turn|rad)|(to\w+)$/g; + const reg = /^([+-]?(?=(?\d+))\k\.?\d*)+(deg|turn|rad)|(to\w+)$/g; const valueList = reg.exec(processedValue); if (!Array.isArray(valueList)) return; // default direction is to bottom, i.e. 180degree diff --git a/driver/js/packages/hippy-vue/src/renderer/element-node.js b/driver/js/packages/hippy-vue/src/renderer/element-node.js index f0791f3bf..e7eabd4f6 100644 --- a/driver/js/packages/hippy-vue/src/renderer/element-node.js +++ b/driver/js/packages/hippy-vue/src/renderer/element-node.js @@ -92,7 +92,7 @@ function convertToDegree(value, unit = DEGREE_UNIT.DEG) { */ function getLinearGradientAngle(value) { const processedValue = (value || '').replace(/\s*/g, '').toLowerCase(); - const reg = /^([+-]?\d+\.?\d*)+(deg|turn|rad)|(to\w+)$/g; + const reg = /^([+-]?(?=(?\d+))\k\.?\d*)+(deg|turn|rad)|(to\w+)$/g; const valueList = reg.exec(processedValue); if (!Array.isArray(valueList)) return; // if default direction is to bottom, i.e. 180degree