From 3d608494dcd8b8f5f3f7823d98bedbee71b9a544 Mon Sep 17 00:00:00 2001 From: Jonny Gerig Meyer Date: Wed, 28 Feb 2024 11:57:54 -0500 Subject: [PATCH] Escape attr before using in querySelectorAll. Closes #156. --- src/parse.ts | 4 +++- tests/unit/setup.ts | 8 ++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/parse.ts b/src/parse.ts index e5b990c3..9f7ae1ba 100644 --- a/src/parse.ts +++ b/src/parse.ts @@ -449,7 +449,9 @@ async function getAnchorEl( if (customPropName) { anchorName = getCSSPropertyValue(targetEl, customPropName); } else if (anchorAttr) { - return await validatedForPositioning(targetEl, [`#${anchorAttr}`]); + return await validatedForPositioning(targetEl, [ + `#${CSS.escape(anchorAttr)}`, + ]); } } const anchorSelectors = anchorName ? anchorNames[anchorName] ?? [] : []; diff --git a/tests/unit/setup.ts b/tests/unit/setup.ts index e9995a32..393bced7 100644 --- a/tests/unit/setup.ts +++ b/tests/unit/setup.ts @@ -1,5 +1,13 @@ import fetchMock from 'fetch-mock'; +beforeAll(() => { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + window.CSS = { + escape: (str) => str, + }; +}); + afterEach(() => { fetchMock.reset(); });