Scenario objective previews can split supplementary Unicode during truncation

Abierto Apto para principiantes
#3,870 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

@Aadithya-kl ya está trabajando en esto.

Desde el 3/11/2026.

  • #3890 de @Aadithya-kl — abierto

Evaluación

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

Línea de trabajo

Empieza en el helper objectivePreview, que trunca por unidad de código UTF-16. Revisa ahí el punto de corte y luego ejecuta la prueba enfocada attackAttemptFormatting en la revisión indicada para ver el high surrogate suelto en el índice 94. Se considera terminado cuando la vista previa nunca termina en un surrogate no emparejado, el caso de 94 a muestra la elipsis y el caso de control con un emoji completo sigue pasando.

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

Descripción

Bug: triage help wanted
Describe the bug

objectivePreview truncates JavaScript strings by UTF-16 code unit. If the boundary falls between the two code units of a supplementary Unicode character, the preview contains an unpaired surrogate. The scenario run table renders the corrupted preview. This is presentation-only; the test does not show that stored objectives are changed.

Steps/Code to Reproduce
const objective = `${'a'.repeat(94)}😀 trailing text`
const preview = objectivePreview(objective, 'seed-boundary')

Run the focused attackAttemptFormatting test at revision 01ce6ca66a315770b36c7dca1f320668c0d92d7c.

Expected Results

Truncate without splitting a Unicode scalar, for example 94 a characters followed by an ellipsis. No lone surrogate should appear in the preview.

Actual Results

The helper returns a string whose code unit at index 94 is 0xD83D, an unmatched high surrogate. JSON serialization shows \ud83d…; Jest renders it as �. A complete-emoji boundary control passes.

Screenshots

N/A. The exact returned string and code unit are asserted in the focused test.

Versions

Linux; Node 26.12.1; npm 11.20.0; Jest 30.5.2; frontend at revision 01ce6ca66a315770b36c7dca1f320668c0d92d7c. Pure TypeScript Jest run; no browser or backend.

Lenguaje dominante
Python
Estrellas
4.7k
Forks
1k
Merge medio
2 d 3 h
PR fusionados (30 d)
450

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

  • Sin Dockerfile ni archivo de Docker Compose
  • Tiene una plantilla de pull request
  • Sin guía de contribución

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 microsoft/PyRIT

Todos los issues de microsoft/PyRIT

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.