Markdown: HTML inside code blocks and inline code isn't escaped

Abierto Apto para principiantes
#3,814 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@KishanKanejiya23 ya está trabajando en esto.

Desde el 28/10/2026.

  • #3823 de @KishanKanejiya23 — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
88/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
markdown, react, typescript
Área
frontend

Línea de trabajo

Empieza en markdown.tsx y busca los renderizadores de code y codespan; el issue indica que ambos insertan texto sin escapar. Lee las pruebas existentes del componente Markdown y añade un caso para HTML en bloques de código con vallas y en código en línea. Se considera terminado cuando ambos se muestran como texto escapado, de acuerdo con la salida esperada en el issue.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

What versions are you using? (if relevant)

[email protected] (also on canary), [email protected], [email protected]

Describe the Bug

<Markdown> doesn't escape what's inside code blocks and inline code. If a fenced block or a code span contains HTML, the tags go into the email as real HTML, so a code sample showing <b>bold</b> comes out as bold text instead of the snippet.

The code and codespan renderers in markdown.tsx insert text as is, while marked's own renderers escape it.

What is affected (leave empty if unsure)

Markdown Component

Link to the code that reproduces this issue

The repro is short, so it's inline under To Reproduce. It only needs [email protected], [email protected] and [email protected].

To Reproduce

Save this as check.mjs and run it with node:

import { createElement as h } from 'react';
import { renderToStaticMarkup } from 'react-dom/server';
import { Markdown } from 'react-email';

const md = '```html\n<b>bold</b> & <i>x</i>\n```\n\nInline: `<br>`';
console.log(renderToStaticMarkup(h(Markdown, null, md)).replace(/ style="[^"]*"/g, ''));

With the inline styles stripped, the output contains <pre><code><b>bold</b> & <i>x</i> and <p>Inline: <code><br></code></p>.

Expected Behavior

The code gets escaped, the way marked's default renderer does it: &lt;b&gt;bold&lt;/b&gt; &amp; &lt;i&gt;x&lt;/i&gt; and <code>&lt;br&gt;</code>.

I'd like to send a PR for this with a test, if that's okay.

What's your node version? (if relevant)

26.7.0

Lenguaje dominante
TypeScript
Estrellas
19.9k
Forks
1.1k
Merge medio
1 d 15 h
PR fusionados (30 d)
49

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de resend/react-email

Todos los issues de resend/react-email

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.