<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>215691</bug_id>
          
          <creation_ts>2020-08-19 23:32:48 -0700</creation_ts>
          <short_desc>[Cocoa] Disable fallback by using kCTFontFallbackOptionNone instead of kCTFontCascadeListAttribute and LastResort</short_desc>
          <delta_ts>2021-07-22 11:03:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>225567</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1681646</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-19 23:32:48 -0700</bug_when>
    <thetext>[Cocoa] Disable fallback by using kCTFontFallbackOptionNone instead of kCTFontCascadeListAttribute and LastResort</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681647</commentid>
    <comment_count>1</comment_count>
      <attachid>406920</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-19 23:33:58 -0700</bug_when>
    <thetext>Created attachment 406920
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1681648</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-08-19 23:34:24 -0700</bug_when>
    <thetext>&lt;rdar://problem/52386488&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686434</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-07 14:10:16 -0700</bug_when>
    <thetext>I see what&apos;s happening.

Previously, something really bad was happening. In the complex text codepath, we try to only ever create CTRuns with characters that we know will never trigger font fallback, and if we mess it up somehow, we inject LastResort into the cascade list just after the font we expect to be used. Then, we just assume that we are successful, and ignore the font that Core Text actually used for the CTRuns, and just clobber the used font with out own font we assume Core Text will use. This means that, if we get it wrong, we can use Last Resort&apos;s glyph IDs with the wrong font. This is super bad.

Indeed, it looks like we &quot;mess it up&quot; any time small-caps is triggered with a font that supports the lowercase characters but doesn&apos;t support the uppercase characters.

(Aside: there is no guarantee that we won&apos;t mess it up; in fact, our cluster segmentation code is significantly different than the one used in Core Text, so &apos;messing it up&apos; is probably more common than we&apos;d like. The more robust solution to this is to consider the font that Core Text *actually* used for the run, rather than pretending we know what it will do.)

This patch disables font fallback entirely in Core Text, which means that instead of returning runs using Last Resort, it will instead return .notdef glyph IDs in the primary font. These end up getting rendered visibly as the tofu. So this is kind of a progression, in that before we would get random characters rendered (which is what happens when you render glyph IDs from one font using another font), but now we get .notdef rendered instead.

I think I&apos;ll open a new bug for fixing the problem that this bug uncovered, and block this one on that one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1686440</commentid>
    <comment_count>4</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-09-07 14:46:38 -0700</bug_when>
    <thetext>I think we should do 4 things:

1. Make WebKit properly do font fallback when small-caps is specified, thereby fixing this test
2. Make WebKit&apos;s cluster segmentation match Core Texts, to decrease the probability we will &quot;mess it up&quot; like above
3. Consider the font that Core Text actually uses to render its CTRuns (this will involve somehow mapping CTFonts to WebCore::Font objects, which might be impossible???)
4. Switching to kCTFontFallbackOptionNone like this patch does</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406920</attachid>
            <date>2020-08-19 23:33:58 -0700</date>
            <delta_ts>2020-08-19 23:33:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215691-20200819233357.patch</filename>
            <type>text/plain</type>
            <size>4428</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1ODkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjMwYmRlNzlmZTU5ODk4
M2M3MjczM2VmYjQ0OGQyZDc4NGMwNmUxYi4uYWI1MGIxODRhZDQ4MzIxMzE3Nzk5NjIyNGJmODgy
YjdjZjIyNmFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIwLTA4LTE5ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBE
aXNhYmxlIGZhbGxiYWNrIGJ5IHVzaW5nIGtDVEZvbnRGYWxsYmFja09wdGlvbk5vbmUgaW5zdGVh
ZCBvZiBrQ1RGb250Q2FzY2FkZUxpc3RBdHRyaWJ1dGUgYW5kIExhc3RSZXNvcnQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTY5MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGtDVEZvbnRGYWxsYmFja09w
dGlvbk5vbmUgaXMgZmFzdGVyIHRoYW4gc2V0dGluZyB1cCBhbiBleHBsaWNpdCBmYWxsYmFjayBs
aXN0IHdpdGggYSBzaW5nbGUgZW50cnkgdGhhdCBpcyBMYXN0UmVzb3J0LgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhc2NhZGVUb0xhc3RSZXNvcnRBdHRyaWJ1dGVzRGljdGlvbmFyeSk6
CisKIDIwMjAtMDgtMTkgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAK
ICAgICAgICAgW2lPU10gUmVzdG9yZSBhIDEwXzE1XyogdXNlci1hZ2VudCBzdHJpbmcgd2hlbiBy
ZXF1ZXN0aW5nIGRlc2t0b3Agc2l0ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUEFML0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL1BBTC9DaGFuZ2VMb2cKaW5kZXggMmMyNWY2ZGIxNmM4
OTU1ODI0NDMxZjAzYTllMDM5NDJjYmM4MTVjYS4uMTk4ZWU3MmRhOTZkODZiNDRmMmNmOTlmZWRk
OTkzMDY2ZmI5MzI4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUEFML0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9QQUwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAt
MDgtMTkgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAg
ICBbQ29jb2FdIERpc2FibGUgZmFsbGJhY2sgYnkgdXNpbmcga0NURm9udEZhbGxiYWNrT3B0aW9u
Tm9uZSBpbnN0ZWFkIG9mIGtDVEZvbnRDYXNjYWRlTGlzdEF0dHJpYnV0ZSBhbmQgTGFzdFJlc29y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1Njkx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU21hbGwg
cmVvcmdhbml6YXRpb24uCisKKyAgICAgICAgKiBwYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmg6
CisKIDIwMjAtMDgtMTkgIEFkaXR5YSBLZWVydGhpICA8YWtlZXJ0aGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFttYWNPU10gTW92ZSBzdGVwcGVyIHBhaW50aW5nIGNvZGUgb2ZmIG9mIENhcmJvbiBB
UEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BBTC9wYWwvc3BpL2NvY29hL0NvcmVUZXh0
U1BJLmggYi9Tb3VyY2UvV2ViQ29yZS9QQUwvcGFsL3NwaS9jb2NvYS9Db3JlVGV4dFNQSS5oCmlu
ZGV4IGIyMjhmOWJjODMyNDgzMzQ5NGEwYzc4MTgzYjRmMmUzYjU1YTlmMTYuLmNiNTA2MmRlMzM0
ZWQ1YWE3MTE5Y2UzYWNkZWFhMTFlYzBmNjVkNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BBTC9wYWwvc3BpL2NvY29hL0NvcmVUZXh0U1BJLmgKKysrIGIvU291cmNlL1dlYkNvcmUvUEFM
L3BhbC9zcGkvY29jb2EvQ29yZVRleHRTUEkuaApAQCAtODksNiArODksOSBAQCBleHRlcm4gY29u
c3QgQ0ZTdHJpbmdSZWYga0NURm9udE9wdGljYWxTaXplQXR0cmlidXRlOwogZXh0ZXJuIGNvbnN0
IENGU3RyaW5nUmVmIGtDVEZvbnRQb3N0U2NyaXB0TmFtZUF0dHJpYnV0ZTsKIGV4dGVybiBjb25z
dCBDRlN0cmluZ1JlZiBrQ1RGb250VXNlckluc3RhbGxlZEF0dHJpYnV0ZTsKIGV4dGVybiBjb25z
dCBDRlN0cmluZ1JlZiBrQ1RGb250RmFsbGJhY2tPcHRpb25BdHRyaWJ1dGU7CitleHRlcm4gY29u
c3QgQ0ZTdHJpbmdSZWYga0NURm9udENTU1dlaWdodEF0dHJpYnV0ZTsKK2V4dGVybiBjb25zdCBD
RlN0cmluZ1JlZiBrQ1RGb250Q1NTV2lkdGhBdHRyaWJ1dGU7CitleHRlcm4gY29uc3QgQ0ZTdHJp
bmdSZWYga0NURm9udERlc2NyaXB0b3JUZXh0U3R5bGVBdHRyaWJ1dGU7CiAKIGV4dGVybiBjb25z
dCBDRlN0cmluZ1JlZiBrQ1RGb250Q1NTRmFtaWx5U2VyaWY7CiBleHRlcm4gY29uc3QgQ0ZTdHJp
bmdSZWYga0NURm9udENTU0ZhbWlseVNhbnNTZXJpZjsKQEAgLTEyNCw5ICsxMjcsNiBAQCBDRkFy
cmF5UmVmIENURm9udE1hbmFnZXJDcmVhdGVGb250RGVzY3JpcHRvcnNGcm9tRGF0YShDRkRhdGFS
ZWYpOwogCiB2b2lkIENUUGFyYWdyYXBoU3R5bGVTZXRDb21wb3NpdGlvbkxhbmd1YWdlKENUUGFy
YWdyYXBoU3R5bGVSZWYsIENUQ29tcG9zaXRpb25MYW5ndWFnZSk7CiAKLWV4dGVybiBjb25zdCBD
RlN0cmluZ1JlZiBrQ1RGb250Q1NTV2VpZ2h0QXR0cmlidXRlOwotZXh0ZXJuIGNvbnN0IENGU3Ry
aW5nUmVmIGtDVEZvbnRDU1NXaWR0aEF0dHJpYnV0ZTsKLWV4dGVybiBjb25zdCBDRlN0cmluZ1Jl
ZiBrQ1RGb250RGVzY3JpcHRvclRleHRTdHlsZUF0dHJpYnV0ZTsKIGV4dGVybiBjb25zdCBDRlN0
cmluZ1JlZiBrQ1RGb250VUlGb250RGVzaWduVHJhaXQ7CiAKIGV4dGVybiBjb25zdCBDRlN0cmlu
Z1JlZiBrQ1RGb250VUlGb250RGVzaWduRGVmYXVsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2NvYS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRQbGF0Zm9ybURhdGFDb2Nv
YS5tbQppbmRleCA3MmU4MjUxYzNkMzc0ZTEwMjQ5Y2UzNDA5MzI3MTNiMDhlY2FjOGRlLi5lNjYy
NjAwMGY5YWJmNGY2YzRmYjM2NmZhZjgxZjJhZmY0ZmI2MDk0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250UGxhdGZvcm1EYXRhQ29jb2EubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3Jt
RGF0YUNvY29hLm1tCkBAIC0xMDUsMTMgKzEwNSwxMCBAQCBpbmxpbmUgaW50IG1hcEZvbnRXaWR0
aFZhcmlhbnRUb0NURmVhdHVyZVNlbGVjdG9yKEZvbnRXaWR0aFZhcmlhbnQgdmFyaWFudCkKIAog
c3RhdGljIFJldGFpblB0cjxDRkRpY3Rpb25hcnlSZWY+IGNhc2NhZGVUb0xhc3RSZXNvcnRBdHRy
aWJ1dGVzRGljdGlvbmFyeSgpCiB7Ci0gICAgYXV0byBsYXN0UmVzb3J0ID0gYWRvcHRDRihDVEZv
bnREZXNjcmlwdG9yQ3JlYXRlV2l0aE5hbWVBbmRTaXplKENGU1RSKCJMYXN0UmVzb3J0IiksIDAp
KTsKLQotICAgIENGVHlwZVJlZiBkZXNjcmlwdG9yc1tdID0geyBsYXN0UmVzb3J0LmdldCgpIH07
Ci0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGRlc2NyaXB0b3JzLCBXVEZfQVJSQVlfTEVOR1RIKGRlc2Ny
aXB0b3JzKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcykpOwotCi0gICAgQ0ZUeXBlUmVmIGtleXNb
XSA9IHsga0NURm9udENhc2NhZGVMaXN0QXR0cmlidXRlIH07Ci0gICAgQ0ZUeXBlUmVmIHZhbHVl
c1tdID0geyBhcnJheS5nZXQoKSB9OworICAgIGludCBmb250RmFsbGJhY2tPcHRpb24gPSBrQ1RG
b250RmFsbGJhY2tPcHRpb25Ob25lOworICAgIGF1dG8gZm9udEZhbGxiYWNrT3B0aW9uTnVtYmVy
ID0gYWRvcHRDRihDRk51bWJlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZOdW1iZXJJ
bnRUeXBlLCAmZm9udEZhbGxiYWNrT3B0aW9uKSk7CisgICAgQ0ZUeXBlUmVmIGtleXNbXSA9IHsg
a0NURm9udEZhbGxiYWNrT3B0aW9uQXR0cmlidXRlIH07CisgICAgQ0ZUeXBlUmVmIHZhbHVlc1td
ID0geyBmb250RmFsbGJhY2tPcHRpb25OdW1iZXIuZ2V0KCkgfTsKICAgICByZXR1cm4gYWRvcHRD
RihDRkRpY3Rpb25hcnlDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwga2V5cywgdmFsdWVzLCBX
VEZfQVJSQVlfTEVOR1RIKGtleXMpLCAma0NGVHlwZURpY3Rpb25hcnlLZXlDYWxsQmFja3MsICZr
Q0ZUeXBlRGljdGlvbmFyeVZhbHVlQ2FsbEJhY2tzKSk7CiB9CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>