aboutsummaryrefslogtreecommitdiffstats
path: root/docs/design
diff options
context:
space:
mode:
authoreunhhu <[email protected]>2026-09-28 16:15:37 +0100
committereunhhu <[email protected]>2026-09-28 16:15:37 +0100
commite30e3c2f17fb26cddc91e9f950f6f26948fa8e0e (patch)
treec28cd4b29189646a0f73d4a478b1cf76378e4555 /docs/design
parentea6dbcf627e9a440590d0d35ff16ca7ae60d5719 (diff)
downloadvega-e30e3c2f17fb26cddc91e9f950f6f26948fa8e0e.tar.gz
vega-e30e3c2f17fb26cddc91e9f950f6f26948fa8e0e.zip
Go on past a runaway GSUB as HarfBuzz does
A font whose GSUB grows the buffer past its bounds (text-rendering-tests' GSUB-3) made vega_shape fail. HarfBuzz goes on with the glyphs of the last pass that finished: every later pass does nothing, positions are the default advances. Vega's buffer operations already stand still once the buffer is unsuccessful, so it now goes on too, and a broken font shows what HarfBuzz shows rather than nothing. HarfBuzz's suite: 5018 of 5199 the same, none failing.
Diffstat (limited to 'docs/design')
-rw-r--r--docs/design/004-text.md4
1 files changed, 4 insertions, 0 deletions
diff --git a/docs/design/004-text.md b/docs/design/004-text.md
index 58a53ad..2f629cb 100644
--- a/docs/design/004-text.md
+++ b/docs/design/004-text.md
@@ -258,6 +258,10 @@ U+180B–180E만 넣고 네 번째 자유 이체 선택자(U+180F)를 빠뜨렸�
색인을 담는다. 글꼴 24개, 계획 96개의 무작위 실행이 HarfBuzz와 같다. 처음에는 형식 2가 달랐다. HarfBuzz가 등급 표 밖의
글리프를 다이제스트로 거르므로, 거짓 양성이 된 공백이 등급 0으로 커닝되었다.
+GSUB가 끝없이 늘리는 글꼴(text-rendering-tests의 GSUB-3)에서 Vega는 버퍼 한도를 넘으면 실패를 돌려주었다. HarfBuzz는
+마지막으로 끝난 패스의 글리프로 계속한다. 그 뒤의 패스는 아무것도 하지 않고, 위치는 기본 advance가 된다. Vega도 그렇게
+한다. 깨진 글꼴에서도 글이 사라지지 않고 HarfBuzz와 같은 모습으로 남는다(5,018건이 같다).
+
## 비례폭 글줄
[text/layout.c](../../text/layout.c)는 검증한 부품을 UAX #9 3.4절과 UAX #14가 말하는 순서로 잇는다.