Skip to content

Commit e3fc5ce

Browse files
committed
update
1 parent f91e134 commit e3fc5ce

1 file changed

Lines changed: 12 additions & 4 deletions

File tree

Mailman/HTMLFormatter.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -406,18 +406,26 @@ def ParseTags(self, template, replacements, lang=None):
406406
# Convert replacement keys to lowercase for case-insensitive matching
407407
replacements = {k.lower(): v for k, v in replacements.items()}
408408

409-
# Split on MM tags, case-insensitive
409+
# Split on MM tags, case-insensitive, but preserve HTML entities
410410
parts = re.split('(</?[Mm][Mm]-[^>]*>)', text)
411411
i = 1
412412
while i < len(parts):
413413
tag = parts[i].lower() # Convert to lowercase for matching
414414
if tag in replacements:
415415
repl = replacements[tag]
416416
if isinstance(repl, str):
417-
repl = repl.encode(charset, 'replace')
418-
if isinstance(repl, bytes):
417+
# Don't encode HTML entities
418+
if '&' in repl:
419+
parts[i] = repl
420+
else:
421+
repl = repl.encode(charset, 'replace')
422+
repl = repl.decode(charset, 'replace')
423+
parts[i] = repl
424+
elif isinstance(repl, bytes):
419425
repl = repl.decode(charset, 'replace')
420-
parts[i] = repl
426+
parts[i] = repl
427+
else:
428+
parts[i] = str(repl)
421429
else:
422430
parts[i] = ''
423431
i = i + 2

0 commit comments

Comments
 (0)