From d5e8cf713ad450d5c2db2955036de5c55259a9fe Mon Sep 17 00:00:00 2001 From: Garvin Hicking <gh@faktor-e.de> Date: Wed, 19 Jun 2024 14:47:11 +0200 Subject: [PATCH] [BUGFIX] Fix backend page tree filter with special characters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When filtering the page tree with characters that have special meaning for a regular expression (for example, ")" or "(" or "?" and some others), the filtering would return a "Page Tree error". JavaScript does not have something like "preg_quote", so this uses the escape string provided by the MDN with fixed special characters. Resolves: #104092 Releases: main, 12.4, 11.5 Change-Id: I4a29c62eaca8b7643c8ef78dda1d8337b3e1e53a Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/84785 Tested-by: core-ci <typo3@b13.com> Tested-by: Benni Mack <benni@typo3.org> Tested-by: Jasmina Ließmann <minapokhalo+typo3@gmail.com> Tested-by: Andreas Kienast <a.fernandez@scripting-base.de> Reviewed-by: Jasmina Ließmann <minapokhalo+typo3@gmail.com> Reviewed-by: Andreas Kienast <a.fernandez@scripting-base.de> Reviewed-by: Benni Mack <benni@typo3.org> --- Build/Sources/TypeScript/backend/tree/tree.ts | 3 ++- typo3/sysext/backend/Resources/Public/JavaScript/tree/tree.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Build/Sources/TypeScript/backend/tree/tree.ts b/Build/Sources/TypeScript/backend/tree/tree.ts index 59741e47c0c4..f8295ea40f17 100644 --- a/Build/Sources/TypeScript/backend/tree/tree.ts +++ b/Build/Sources/TypeScript/backend/tree/tree.ts @@ -1038,7 +1038,8 @@ export class Tree extends LitElement { labelNode.textContent = label; label = labelNode.innerHTML; if (this.searchTerm) { - const regexp = new RegExp(this.searchTerm, 'gi'); + // Escape all meta characters of regular expressions: ( ) [ ] $ * + ? . { } / | ^ - + const regexp = new RegExp(this.searchTerm.replace(/[/\-\\^$*+?.()|[\]{}]/g, '\\$&'), 'gi'); label = label.replace(regexp, '<span class="node-highlight-text">$&</span>'); } diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/tree/tree.js b/typo3/sysext/backend/Resources/Public/JavaScript/tree/tree.js index 20ddb7d8431b..8565bc159578 100644 --- a/typo3/sysext/backend/Resources/Public/JavaScript/tree/tree.js +++ b/typo3/sysext/backend/Resources/Public/JavaScript/tree/tree.js @@ -108,7 +108,7 @@ var __decorate=function(e,t,i,o){var s,n=arguments.length,r=n<3?t:null===o?o=Obj size="small" ></typo3-backend-icon> </span> - `:html`${nothing}`}createNodeContentLabel(e){let t=(e.prefix||"")+e.name+(e.suffix||"");const i=document.createElement("div");if(i.textContent=t,t=i.innerHTML,this.searchTerm){const e=new RegExp(this.searchTerm,"gi");t=t.replace(e,'<span class="node-highlight-text">$&</span>')}return html` + `:html`${nothing}`}createNodeContentLabel(e){let t=(e.prefix||"")+e.name+(e.suffix||"");const i=document.createElement("div");if(i.textContent=t,t=i.innerHTML,this.searchTerm){const e=new RegExp(this.searchTerm.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&"),"gi");t=t.replace(e,'<span class="node-highlight-text">$&</span>')}return html` <div class="node-contentlabel"> <div class="node-name" .innerHTML="${t}"></div> ${e.note?html`<div class="node-note">${e.note}</div>`:nothing} -- GitLab