Applying a patch with a fuzzFactor can be very very slow

Abierto
#692 2 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

@json-open-source ya está trabajando en esto.

Desde el 1/10/2026.

  • #711 de @json-open-source — abierto
  • #716 de @anzal1 — abierto

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
48/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Tranquilo
Stack tecnológico
javascript
Área
security

Línea de trabajo

Comienza en los puntos de entrada applyPatch(...) y applyPatches(...) y sigue la lógica de coincidencia difusa de parches descrita en el informe. Reproduce los casos de control y los casos high-fuzzFactor preparados para medir la ralentización. Se considera terminado cuando los parches difusos preparados ya no provocan un uso excesivo de CPU, mientras el comportamiento normal de aplicación difusa permanece intacto.

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

Descripción

performance

Thanks to the following five security researchers for reporting this:

Finding 1: Fuzzy patch application can cause algorithmic complexity DoS
Affected behavior

applyPatch and applyPatches support fuzzy patch matching. With crafted hunks and a high fuzzFactor, the matching logic can end up exploring many alternatives recursively and spend a large amount of CPU time on a single input.

Affected entrypoints

`applyPatch(...)`
`applyPatches(...)`

Reproduction notes
In our reproduction, a normal control case completed in under 1 ms, while a crafted fuzzy patch took about 7.7 seconds on the same setup:

control time: 0.568181 ms
exploit time: 7737.472789 ms
slowdown: 13617.9717x

The issue appears to come from recursive branch exploration in the fuzzy patch application logic.

Lenguaje dominante
JavaScript
Estrellas
9.2k
Forks
555
Merge medio
1 d 9 h
PR fusionados (30 d)
5

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 kpdecker/jsdiff

Todos los issues de kpdecker/jsdiff

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.