diffCleanupSemantic(Lossless) can run into an infinite loop
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 74/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- javascript, typescript
- Área
- tooling
Línea de trabajo
Ejecuta primero la reproducción proporcionada, luego inspecciona la lógica citada en src/diff.ts alrededor de diffCleanupSemantic y compárala con la implementación de Java enlazada. Usa la entrada diffFromDelta preparada para verificar que el bloqueo ha desaparecido y confirma el comportamiento documentado para entradas no válidas, idealmente con cobertura de regresión.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
For a specifically crafted input, diffFromDelta would produce a delta that cause diffCleanupSemantic and diffCleanupSemanticLossless to hang (infinite loop).
The documentation for diffFromDelta says that it would throw on invalid input, but it's not doing that for this case. Or this could be an issue with diffCleanupSemantic and diffCleanupSemanticLossless where they are mishandling specific diffs.
This is happening due to the empty edit/equality tuples. Reproducible on the latest v2.0.1.
Reproduction:
import { diffCleanupSemantic, diffFromDelta } from 'diff-match-patch-es'
const diffs = diffFromDelta('ac', '=1\t-0\t=0\t+b\t=1')
console.log('diff:', JSON.stringify(diffs))
diffCleanupSemantic(diffs)
Potential fix (unverified):
The original Java version has some extra check:
while (edit.length() != 0 && equality2.length() != 0
&& edit.charAt(0) == equality2.charAt(0)) {
But missing from the JS (and TS) version:
Reproduction
https://github.com/aforemendude/bugs-reproduction/tree/main/diff-match-patch-es-delta-inf-loop
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.39 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 70/100
Todos los issues de antfu/diff-match-patch-es
Issues similares
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
StabilityNexus/Fate-EVM-Frontend#153 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
code-yeongyu/oh-my-openagent#9039 ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Tencent/teamai-cli#862 ·
Los mantenedores suelen responder en 1 día
-
bug good first issue hacktoberfest redis
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
libredb/libredb-studio#1164 ·
Los mantenedores suelen responder en 1 día
-
flake
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
coder/xum#4920 · 2 comentarios ·
Los mantenedores suelen responder en 1 día