From f9d9880325454e51948518d54e36cc6a6e91bde2 Mon Sep 17 00:00:00 2001
From: John MacFarlane <jgm@berkeley.edu>
Date: Mon, 7 Jan 2019 20:24:22 -0800
Subject: [PATCH] TWiki reader: fix performance issue with underscores.

Underscore emphasis can't cross table cell boundaries,
but the parser wasn't respecting this, leading to exponential
behavior in documents with table cells containing underscores.

This fixes the original sample; it's possible that there
are other performance issues involving underscores.

Closes #3921.
---
 src/Text/Pandoc/Readers/TWiki.hs | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/Text/Pandoc/Readers/TWiki.hs b/src/Text/Pandoc/Readers/TWiki.hs
index c3cfedcfb..191343203 100644
--- a/src/Text/Pandoc/Readers/TWiki.hs
+++ b/src/Text/Pandoc/Readers/TWiki.hs
@@ -424,7 +424,9 @@ strongAndEmph :: PandocMonad m => TWParser m B.Inlines
 strongAndEmph = try $ B.emph . B.strong <$> enclosed (string "__") nestedInlines
 
 emph :: PandocMonad m => TWParser m B.Inlines
-emph = try $ B.emph <$> enclosed (char '_') nestedInlines
+emph = try $ B.emph <$> enclosed (char '_')
+                        (\p -> notFollowedBy (char '|') >> nestedInlines p)
+-- emphasis closers can't cross table cell boundaries, see #3921
 
 emphHtml :: PandocMonad m => TWParser m B.Inlines
 emphHtml = B.emph . mconcat <$> (parseHtmlContent "em" inline <|> parseHtmlContent "i" inline)