diffToDelta and patchToText can throw if diff split surrogate-pair
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
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de antfu/diff-match-patch-es
-
Dificultad 3/5 1-2 días Aptitud para principiantes 74/100
Todos los issues de antfu/diff-match-patch-es
Issues similares
-
module-request
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
ports get and web print 'Port N already in use, trying next...' for every busy port they skipAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
appandflow/stim#1604 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100
lingdojo/kana-dojo#31060 · 1 comentario · 5 reacciones ·
Los mantenedores suelen responder en 1 día
-
SSH workspace restore rewrites relative symlinks into the deleted sync-back staging directoryAbierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
paperclipai/paperclip#14173 ·
Los mantenedores suelen responder en 1 día
-
needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 1 día