diff --git a/packages/extension-ui/src/util/sanitizeOrigin.ts b/packages/extension-ui/src/util/sanitizeOrigin.ts index c48e0c1..1172935 100644 --- a/packages/extension-ui/src/util/sanitizeOrigin.ts +++ b/packages/extension-ui/src/util/sanitizeOrigin.ts @@ -9,22 +9,22 @@ const sanitizeHtml = (input: string, options?: { return ''; } - let sanitized = input; + //
becomes a line break only when asked for; everything else that looks + // like markup is removed below. + let sanitized = options?.allowLineBreaks + ? input.replace(//gi, '\n') + : input; - // Remove all HTML tags - sanitized = sanitized.replace(/<[^>]*>/g, ''); + // One pass of tag removal turns `ipt>` into a new ` to actual line breaks before sanitization - sanitized = input - .replace(//gi, '\n') - .replace(/<[^>]*>/g, ''); // Remove other HTML tags - } + do { + previous = sanitized; + sanitized = sanitized.replace(/<[^>]*>/g, ''); + } while (sanitized !== previous); - // Tag removal is a single pass, so nested input such as `ipt>` - // leaves a new tag behind. Drop every remaining angle bracket; an origin never - // contains one, and validateOrigin already treats them as suspicious. sanitized = sanitized.replace(/[<>]/g, ''); // Normalize whitespace