Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

diffToDelta and patchToText can throw if diff split surrogate-pair

Abierto
#6 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
70/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Tranquilo
Stack tecnológico
javascript, typescript
Área
tooling

Línea de trabajo

Comienza por los puntos de entrada diff, diffToDelta, patch y patchToText que se muestran en la reproducción y, a continuación, ejecuta el ejemplo de par sustituto proporcionado. Rastrea cómo llegan los caracteres divididos al paso de codificación de URI; se considera terminado cuando el ejemplo se completa sin URIError y conserva el texto de diff y patch esperado.

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

Descripción

Describe the bug

The current diff implementation operates on UTF-16 characters directly, which can cause it to split surrogate-pairs. When this happens, diffToDelta and patchToText can throw URIError.

Reproducible on the latest v2.0.1.

Reproduction:

import { diff, diffToDelta, patch, patchToText } from 'diff-match-patch-es'

const oldText = '😀'
const newText = '😃'

const diffs = diff(oldText, newText)
console.log('diff:', JSON.stringify(diffs))

for (const [label, reproduce] of [
  ['diffToDelta', () => diffToDelta(diffs)],
  ['patchToText', () => patchToText(patch(oldText, newText))],
]) {
  try {
    console.log(`${label}:`, reproduce())
  } catch (error) {
    console.log(`${label}:`, `${error.name}: ${error.message}`)
  }
}

Output:

diff: [[0,"\ud83d"],[-1,"\ude00"],[1,"\ude03"]]
diffToDelta: URIError: URI malformed
patchToText: URIError: URI malformed
Reproduction

https://github.com/aforemendude/bugs-reproduction/tree/main/diff-match-patch-es-urierror

System Info
  System:
    OS: Linux 7.0 Ubuntu 24.04.4 LTS 24.04.4 LTS (Noble Numbat)
    CPU: (4) x64 Intel(R) N95
    Memory: 12.10 GB / 15.40 GB
    Container: Yes
    Shell: 5.2.21 - /bin/bash
  Binaries:
    Node: 24.18.0 - /usr/local/nodejs/bin/node
    npm: 11.16.0 - /usr/local/nodejs/bin/npm
Used Package Manager

npm

Validations
  • Follow our Code of Conduct
  • Read the Contributing Guide.
  • Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
  • Check that this is a concrete bug. For Q&A, please open a GitHub Discussion instead.
  • The provided reproduction is a minimal reproducible of the bug.
Contributions
  • I am willing to submit a PR to fix this issue
  • I am willing to submit a PR with failing tests (actually just go ahead and do it, thanks!)
Lenguaje dominante
TypeScript
Estrellas
200
Forks
6
Métricas de merge de PR
Sin PR fusionados en 30 d

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 antfu/diff-match-patch-es

Todos los issues de antfu/diff-match-patch-es

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.