xtermjs/xterm.js

Infinite loop when drawing large ligatures to char atlas

オープン

#4,362 opened on 2023/01/02

 (1 件のコメント) (0 件のリアクション) (0 人の担当者)TypeScript (1,574 件のフォーク)batch import
area/addon/ligaturesarea/addon/webglhelp wantedtype/bug

Repository metrics

Stars
 (16,196 個のスター)
PR merge metrics
 (平均マージ 2d 10h) (30d で 16 merged PRs)

説明

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.

コントリビューターガイド