xtermjs/xterm.js

Infinite loop when drawing large ligatures to char atlas

Open

#4.362 aberto em 2 de jan. de 2023

Ver no GitHub
 (1 comment) (0 reactions) (0 assignees)TypeScript (1.574 forks)batch import
area/addon/ligaturesarea/addon/webglhelp wantedtype/bug

Métricas do repositório

Stars
 (16.196 stars)
Métricas de merge de PR
 (Mesclagem média 4d 3h) (81 fundiu PRs em 30d)

Description

some fonts provide extremely long ligatures, e.g. Fira Code for =================================================== The char atlas code tries to find a row to fit it but fails and gets stuck in an infinite loop https://github.com/xtermjs/xterm.js/blob/fe8981766769c19ab1903dffa19f1a64ad83da13/src/browser/renderer/shared/TextureAtlas.ts#L792-L799 ^Here we're checking if there's room on the current row and creating a new one if not.

Details

  • Browser and browser version: chrome 108
  • OS version: macOS 12
  • xterm.js version: 5.1.0 (also on latest master branch)

Steps to reproduce

  1. Install Fira Code font, Run the xterm demo and enable ligatures
  2. start typing =
  3. Keep looking at the char atlas drawn below, once the glyph is almost the same width as char atlas, typing the next = will freeze everything.

Guia do colaborador