Problem: SystemStackError: stack level too deep occurred when rendering
messages with indented content (4+ spaces) for WhatsApp, Instagram, and
Facebook channels.
Root Cause: CommonMarker::Renderer#code_block contains a self-recursive
placeholder that must be overridden:
```
def code_block(node)
code_block(node) # calls itself infinitely
end
```
WhatsAppRenderer and InstagramRenderer were missing this override,
causing infinite recursion when markdown with 4-space indentation
(interpreted as code blocks) was rendered.
Fix: Added code_block method to both renderers that outputs the node
content as plain text:
```
def code_block(node)
out(node.string_content)
end
```
Fix https://linear.app/chatwoot/issue/CW-6217/systemstackerror-stack-level-too-deep-systemstackerror
41 lines
601 B
Ruby
41 lines
601 B
Ruby
class Messages::MarkdownRenderers::WhatsAppRenderer < Messages::MarkdownRenderers::BaseMarkdownRenderer
|
|
def strong(_node)
|
|
out('*', :children, '*')
|
|
end
|
|
|
|
def emph(_node)
|
|
out('_', :children, '_')
|
|
end
|
|
|
|
def code(node)
|
|
out('`', node.string_content, '`')
|
|
end
|
|
|
|
def link(node)
|
|
out(node.url)
|
|
end
|
|
|
|
def list(_node)
|
|
out(:children)
|
|
cr
|
|
end
|
|
|
|
def list_item(_node)
|
|
out('- ', :children)
|
|
cr
|
|
end
|
|
|
|
def blockquote(_node)
|
|
out('> ', :children)
|
|
cr
|
|
end
|
|
|
|
def code_block(node)
|
|
out(node.string_content)
|
|
end
|
|
|
|
def softbreak(_node)
|
|
out("\n")
|
|
end
|
|
end
|