<?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>223701</bug_id>
          
          <creation_ts>2021-03-24 10:44:31 -0700</creation_ts>
          <short_desc>Port FontDescriptionKey::computeHash() from legacy IntegerHasher to Hasher</short_desc>
          <delta_ts>2021-03-28 17:18:10 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=176131</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=223858</see_also>
          <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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1743405</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 10:44:31 -0700</bug_when>
    <thetext>Silence UBSan warning in FontDescriptionKey::computeHash():
- Source/WebCore/platform/graphics/FontCache.h:115:20: runtime error: -5 is outside the range of representable values of type &apos;unsigned int&apos;
- Source/WebCore/platform/graphics/FontCache.h:115:20: runtime error: -45 is outside the range of representable values of type &apos;unsigned int&apos;
- Source/WebCore/platform/graphics/FontCache.h:114:20: runtime error: -100 is outside the range of representable values of type &apos;unsigned int&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743406</commentid>
    <comment_count>1</comment_count>
      <attachid>424155</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 10:47:01 -0700</bug_when>
    <thetext>Created attachment 424155
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743418</commentid>
    <comment_count>2</comment_count>
      <attachid>424155</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2021-03-24 11:07:09 -0700</bug_when>
    <thetext>Comment on attachment 424155
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=424155&amp;action=review

&gt; Source/WebCore/ChangeLog:13
&gt; +        Since we&apos;re merely computing a hash here, I think the undefined behavior is acceptable here.

Are you saying that even though it&apos;s undefined, all compilers we use will always do a sane thing here? Officially, undefined behavior can erase my SSD, which I wouldn&apos;t like a hash function to do :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743419</commentid>
    <comment_count>3</comment_count>
      <attachid>424155</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-24 11:08:09 -0700</bug_when>
    <thetext>Comment on attachment 424155
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=424155&amp;action=review

&gt; Source/WebCore/platform/graphics/FontCache.h:109
&gt; +    NO_SANITIZE(&quot;undefined&quot;) inline unsigned computeHash() const

I guess this is OK, because IntegerHasher is deprecated and our stated direction is to move to Hasher instead.

If IntegerHasher was not deprecated, I would say that instead we need to do more overloading of the add function in IntegerHasher rather than writing NO_SANITIZE.

Maybe we should port this function to use Hasher instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743423</commentid>
    <comment_count>4</comment_count>
      <attachid>424155</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-24 11:11:40 -0700</bug_when>
    <thetext>Comment on attachment 424155
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=424155&amp;action=review

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        Since we&apos;re merely computing a hash here, I think the undefined behavior is acceptable here.
&gt; 
&gt; Are you saying that even though it&apos;s undefined, all compilers we use will always do a sane thing here? Officially, undefined behavior can erase my SSD, which I wouldn&apos;t like a hash function to do :)

That’s right.

Converting an int to unsigned without a cast works the same on all compilers, reinterpreting it, even though it’s technically &quot;undefined behavior&quot;. This is a problem with UBSan: there are important kinds of problems that are undefined behavior, and there are things that are really no problem at all like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743424</commentid>
    <comment_count>5</comment_count>
      <attachid>424155</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-24 11:12:14 -0700</bug_when>
    <thetext>Comment on attachment 424155
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=424155&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/FontCache.h:109
&gt;&gt; +    NO_SANITIZE(&quot;undefined&quot;) inline unsigned computeHash() const
&gt; 
&gt; I guess this is OK, because IntegerHasher is deprecated and our stated direction is to move to Hasher instead.
&gt; 
&gt; If IntegerHasher was not deprecated, I would say that instead we need to do more overloading of the add function in IntegerHasher rather than writing NO_SANITIZE.
&gt; 
&gt; Maybe we should port this function to use Hasher instead?

Or we could just add one explicit cast to unsigned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743433</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 11:37:00 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 424155 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=424155&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/FontCache.h:109
&gt; &gt;&gt; +    NO_SANITIZE(&quot;undefined&quot;) inline unsigned computeHash() const
&gt; &gt; 
&gt; &gt; I guess this is OK, because IntegerHasher is deprecated and our stated direction is to move to Hasher instead.
&gt; &gt; 
&gt; &gt; If IntegerHasher was not deprecated, I would say that instead we need to do more overloading of the add function in IntegerHasher rather than writing NO_SANITIZE.
&gt; &gt; 
&gt; &gt; Maybe we should port this function to use Hasher instead?
&gt; 
&gt; Or we could just add one explicit cast to unsigned.

I guess we could port the function to Hasher but all it does is force the caller to static cast to an unsigned integer type before calling Hasher::add(). Will the static_cast&lt;&gt; really silence the UBSan warning? Seems to me that casting a negative int to an unsigned is undefined behavior no matter what.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743441</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-24 11:49:16 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #6)
&gt; casting a negative int to an unsigned is undefined behavior
&gt; no matter what.

There has to be some way to do the conversion that does not rely on undefined behavior. Whether it’s static_cast or a new function we have to write.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743442</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 11:51:17 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #7)
&gt; (In reply to Chris Dumez from comment #6)
&gt; &gt; casting a negative int to an unsigned is undefined behavior
&gt; &gt; no matter what.
&gt; 
&gt; There has to be some way to do the conversion that does not rely on
&gt; undefined behavior. Whether it’s static_cast or a new function we have to
&gt; write.

Yes, so I initially tried to write such a function. Then I figured it was probably not worth the cost (I think it will involve extra branching) since this is only used for hashing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743446</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-24 11:53:10 -0700</bug_when>
    <thetext>We don’t want to be required to sprinkle NO_SANITIZE(&quot;undefined&quot;) calls into our sources every place we hash an int.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743447</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 11:53:48 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; We don’t want to be required to sprinkle NO_SANITIZE(&quot;undefined&quot;) calls into
&gt; our sources every place we hash an int.

Fair point. Let me rethink the approach then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743448</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-24 11:54:17 -0700</bug_when>
    <thetext>Instead we can have that in a single function inside the Hasher class.

It might be harder to do that for IntegerHasher because overloading for int would lead to having to do more overloading now that there is ambiguity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743463</commentid>
    <comment_count>12</comment_count>
      <attachid>424165</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 12:14:38 -0700</bug_when>
    <thetext>Created attachment 424165
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743598</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 16:42:50 -0700</bug_when>
    <thetext>I updated the patch to port the code to Hasher as suggested. Set review flag again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743620</commentid>
    <comment_count>14</comment_count>
      <attachid>424165</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-03-24 17:35:07 -0700</bug_when>
    <thetext>Comment on attachment 424165
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=424165&amp;action=review

Some nice features of Hasher that this does not take advantage of, that I would like you to be aware of for the future:

1) Can pass an entire collection, like a std::array, and Hasher knows how to hash all the items. Works for any object that has a begin function and that works with a range-based for loop.

2) Can list more than one item in a single call to add, rather than using separate calls to add each thing.

3) Can handle Optional, so no need to write valueOr.

4) Can pass a tuple and it will hash all the items in the tuple.

5) Can hash whole objects, not just integers, so can avoid doing hashes of hashes in most cases.

6) Can write add function overloads for use in combination with the above.

&gt; Source/WebCore/platform/graphics/FontCache.h:115
&gt; +        add(hasher, m_fontSelectionRequest.weight);
&gt; +        add(hasher, m_fontSelectionRequest.width);
&gt; +        add(hasher, m_fontSelectionRequest.slope.valueOr(normalItalicValue()));

Could just write this:

    add(hasher, m_fontSelectionRequest.tied());

&gt; Source/WebCore/platform/graphics/FontCache.h:116
&gt; +        add(hasher, m_locale.existingHash());

Could just write this:

    add(hasher, m_locale);

&gt; Source/WebCore/platform/graphics/FontCache.h:117
&gt;          for (unsigned flagItem : m_flags)

Could just write this:

    add(hasher, m_flags);

Instead of the loop.

&gt; Source/WebCore/platform/graphics/FontCache.h:120
&gt; +        add(hasher, m_featureSettings.hash());
&gt; +        add(hasher, m_variationSettings.hash());

With very little work we could refactor so this doesn’t make a hash out of hashes. Likely just need to make an add(Hasher&amp;, x) overload for FontTaggedSetting.

No need to do that now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743625</commentid>
    <comment_count>15</comment_count>
      <attachid>424209</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-03-24 17:44:34 -0700</bug_when>
    <thetext>Created attachment 424209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743631</commentid>
    <comment_count>16</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-03-24 18:28:51 -0700</bug_when>
    <thetext>Committed r274992: &lt;https://commits.webkit.org/r274992&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 424209.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1743632</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-03-24 18:29:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/75815864&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1744662</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-03-28 17:18:10 -0700</bug_when>
    <thetext>This patch caused the bug 223858.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424155</attachid>
            <date>2021-03-24 10:47:01 -0700</date>
            <delta_ts>2021-03-24 12:14:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223701-20210324104701.patch</filename>
            <type>text/plain</type>
            <size>3143</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTQxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGMyMmUwOTYyMzQ4MzA2Mjg0ZjViYzVl
YzU0ZGExNmZhMWEzNWM0MDIuLjYxZTQ4NTVjNGM4YzNmMWYzMjNlYjI1ZDMwN2NkZDRiYjczMTA5
OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjEtMDMtMjQgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KKworICAgICAgICBTaWxlbmNlIFVCU2FuIHdhcm5pbmcgaW4gRm9udERlc2Ny
aXB0aW9uS2V5Ojpjb21wdXRlSGFzaCgpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjM3MDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGQgTk9fU0FOSVRJWkUoKSBtYWNybyB0byBkaXNhYmxlIFVCU2Fu
IGZvciBhIHNwZWNpZmljIGZ1bmN0aW9uIHdoZW4gbmVjZXNzYXJ5LgorCisgICAgICAgICogd3Rm
L0NvbXBpbGVyLmg6CisKIDIwMjEtMDMtMjMgIERlYW4gSmFja3NvbiAgPHlvbG9AYXBwbGUuY29t
PgogCiAgICAgICAgIEVuYWJsZSBNZXRhbCBBTkdMRSBiYWNrZW5kIGZvciBXZWJHTApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CmluZGV4IGI0MDFkNzM2YmVmNjNjOWMzZTg0NTdhN2Y3YjQ5YjAwOTkwY2YzYTEuLmRiNjEwMTY0
YmJkMzc1NzFiYTZlZWM2NzdlZTc5YTgyMjFjYWI5OTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
MCBAQAorMjAyMS0wMy0yNCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAg
ICAgIFNpbGVuY2UgVUJTYW4gd2FybmluZyBpbiBGb250RGVzY3JpcHRpb25LZXk6OmNvbXB1dGVI
YXNoKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIy
MzcwMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNp
bGVuY2UgVUJTYW4gd2FybmluZyBpbiBGb250RGVzY3JpcHRpb25LZXk6OmNvbXB1dGVIYXNoKCk6
CisgICAgICAgIC0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6
MTE1OjIwOiBydW50aW1lIGVycm9yOiAtNSBpcyBvdXRzaWRlIHRoZSByYW5nZSBvZiByZXByZXNl
bnRhYmxlIHZhbHVlcyBvZiB0eXBlICd1bnNpZ25lZCBpbnQnCisgICAgICAgIC0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6MTE1OjIwOiBydW50aW1lIGVycm9y
OiAtNDUgaXMgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgcmVwcmVzZW50YWJsZSB2YWx1ZXMgb2YgdHlw
ZSAndW5zaWduZWQgaW50JworICAgICAgICAtIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRDYWNoZS5oOjExNDoyMDogcnVudGltZSBlcnJvcjogLTEwMCBpcyBvdXRzaWRlIHRo
ZSByYW5nZSBvZiByZXByZXNlbnRhYmxlIHZhbHVlcyBvZiB0eXBlICd1bnNpZ25lZCBpbnQnCisK
KyAgICAgICAgU2luY2Ugd2UncmUgbWVyZWx5IGNvbXB1dGluZyBhIGhhc2ggaGVyZSwgSSB0aGlu
ayB0aGUgdW5kZWZpbmVkIGJlaGF2aW9yIGlzIGFjY2VwdGFibGUgaGVyZS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udERl
c2NyaXB0aW9uS2V5Ojpjb21wdXRlSGFzaCBjb25zdCk6CisKIDIwMjEtMDMtMjQgIEFudG9pbmUg
UXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU3VwcG9ydCBhbmltYXRpb24g
b2YgdGhlIHRhYi1zaXplIENTUyBwcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
Q29tcGlsZXIuaCBiL1NvdXJjZS9XVEYvd3RmL0NvbXBpbGVyLmgKaW5kZXggZWZjYzc0Mzk1YmE2
MjU5ODdkMjlhOGZmZDlhOWI5NTIwZTYwMTM5OS4uMjNjYmIyZDE4NTc3MTFhNzJiN2M3MWVjZWFi
N2UyNzAyZjVmMDYzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvQ29tcGlsZXIuaAorKysg
Yi9Tb3VyY2UvV1RGL3d0Zi9Db21waWxlci5oCkBAIC0yNjksNiArMjY5LDE2IEBACiAjZGVmaW5l
IE5PX1JFVFVSTgogI2VuZGlmCiAKKy8qIE5PX1NBTklUSVpFICovCisKKyNpZiAhZGVmaW5lZChO
T19TQU5JVElaRSkgJiYgQ09NUElMRVIoQ0xBTkcpCisjZGVmaW5lIE5PX1NBTklUSVpFKGNhdGVn
b3J5KSBfX2F0dHJpYnV0ZV9fKChub19zYW5pdGl6ZShjYXRlZ29yeSkpKQorI2VuZGlmCisKKyNp
ZiAhZGVmaW5lZChOT19TQU5JVElaRSkKKyNkZWZpbmUgTk9fU0FOSVRJWkUoY2F0ZWdvcnkpCisj
ZW5kaWYKKwogLyogTk9UX1RBSUxfQ0FMTEVEICovCiAKICNpZiAhZGVmaW5lZChOT1RfVEFJTF9D
QUxMRUQpICYmIGRlZmluZWQoX19oYXNfYXR0cmlidXRlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBkZWNkNjdlZGFkNjhjNzcxZjA4MmQ4ZmNi
NTc4YzMxMjNkNTdmZjJlLi5kMjBhMzFhNmIzZGQ0N2M1OGI5MzJlODhhZGRhMzE4MzUwNDA4Njg5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaApAQCAt
MTA2LDcgKzEwNiw3IEBAIHN0cnVjdCBGb250RGVzY3JpcHRpb25LZXkgewogCiAgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZWxldGVkVmFsdWU7
IH0KIAotICAgIGlubGluZSB1bnNpZ25lZCBjb21wdXRlSGFzaCgpIGNvbnN0CisgICAgTk9fU0FO
SVRJWkUoInVuZGVmaW5lZCIpIGlubGluZSB1bnNpZ25lZCBjb21wdXRlSGFzaCgpIGNvbnN0CiAg
ICAgewogICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKICAgICAgICAgaGFzaGVyLmFkZCht
X3NpemUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424165</attachid>
            <date>2021-03-24 12:14:38 -0700</date>
            <delta_ts>2021-03-24 17:44:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223701-20210324121438.patch</filename>
            <type>text/plain</type>
            <size>2238</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNmVmYWRjMDBlMGM3YThl
YTRkM2FhNzYxNDZlMTVmNjY0NDg3MTFkZi4uNWIzNzlhMmRlYzkwMWU0MWE3Y2UyYzQ2NGQ1MWQz
ZGE3MjdmZjU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTAzLTI0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUG9ydCBGb250RGVzY3JpcHRp
b25LZXk6OmNvbXB1dGVIYXNoKCkgZnJvbSBsZWdhY3kgSW50ZWdlckhhc2hlciB0byBIYXNoZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzcwMQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFBvcnQgRm9u
dERlc2NyaXB0aW9uS2V5Ojpjb21wdXRlSGFzaCgpIGZyb20gbGVnYWN5IEludGVnZXJIYXNoZXIg
dG8gSGFzaGVyLiBIYXNoZXIKKyAgICAgICAgaGFzIHRoZSBiZW5lZml0IG9mIGhhdmluZyBhZGQo
KSBvdmVybG9hZHMgdGhhdCB0YWtlIGluIHNpZ25lZCBpbnRlZ2VyIHR5cGVzLgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250
RGVzY3JpcHRpb25LZXk6OmNvbXB1dGVIYXNoIGNvbnN0KToKKwogMjAyMS0wMy0yNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVXBkYXRlIENTUyBDb2xvciA1IGNv
bG9yLW1peCgpIGltcGxlbWVudGF0aW9uIHRvIG1hdGNoIHRoZSBsYXRlc3QgZHJhZnQgc3BlYwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCBkZWNk
NjdlZGFkNjhjNzcxZjA4MmQ4ZmNiNTc4YzMxMjNkNTdmZjJlLi4xZjJiZmJlMWY0ODAzMTYyZGFi
NmJkODlmYzU4MmQ4MTQyYWI4NTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250Q2FjaGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaApAQCAtMTA4LDE2ICsxMDgsMTYgQEAgc3RydWN0IEZvbnREZXNjcmlw
dGlvbktleSB7CiAKICAgICBpbmxpbmUgdW5zaWduZWQgY29tcHV0ZUhhc2goKSBjb25zdAogICAg
IHsKLSAgICAgICAgSW50ZWdlckhhc2hlciBoYXNoZXI7Ci0gICAgICAgIGhhc2hlci5hZGQobV9z
aXplKTsKLSAgICAgICAgaGFzaGVyLmFkZChtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0LndlaWdodCk7
Ci0gICAgICAgIGhhc2hlci5hZGQobV9mb250U2VsZWN0aW9uUmVxdWVzdC53aWR0aCk7Ci0gICAg
ICAgIGhhc2hlci5hZGQobV9mb250U2VsZWN0aW9uUmVxdWVzdC5zbG9wZS52YWx1ZU9yKG5vcm1h
bEl0YWxpY1ZhbHVlKCkpKTsKLSAgICAgICAgaGFzaGVyLmFkZChtX2xvY2FsZS5leGlzdGluZ0hh
c2goKSk7CisgICAgICAgIEhhc2hlciBoYXNoZXI7CisgICAgICAgIGFkZChoYXNoZXIsIG1fc2l6
ZSk7CisgICAgICAgIGFkZChoYXNoZXIsIG1fZm9udFNlbGVjdGlvblJlcXVlc3Qud2VpZ2h0KTsK
KyAgICAgICAgYWRkKGhhc2hlciwgbV9mb250U2VsZWN0aW9uUmVxdWVzdC53aWR0aCk7CisgICAg
ICAgIGFkZChoYXNoZXIsIG1fZm9udFNlbGVjdGlvblJlcXVlc3Quc2xvcGUudmFsdWVPcihub3Jt
YWxJdGFsaWNWYWx1ZSgpKSk7CisgICAgICAgIGFkZChoYXNoZXIsIG1fbG9jYWxlLmV4aXN0aW5n
SGFzaCgpKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBmbGFnSXRlbSA6IG1fZmxhZ3MpCi0gICAg
ICAgICAgICBoYXNoZXIuYWRkKGZsYWdJdGVtKTsKLSAgICAgICAgaGFzaGVyLmFkZChtX2ZlYXR1
cmVTZXR0aW5ncy5oYXNoKCkpOwotICAgICAgICBoYXNoZXIuYWRkKG1fdmFyaWF0aW9uU2V0dGlu
Z3MuaGFzaCgpKTsKKyAgICAgICAgICAgIGFkZChoYXNoZXIsIGZsYWdJdGVtKTsKKyAgICAgICAg
YWRkKGhhc2hlciwgbV9mZWF0dXJlU2V0dGluZ3MuaGFzaCgpKTsKKyAgICAgICAgYWRkKGhhc2hl
ciwgbV92YXJpYXRpb25TZXR0aW5ncy5oYXNoKCkpOwogICAgICAgICByZXR1cm4gaGFzaGVyLmhh
c2goKTsKICAgICB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>424209</attachid>
            <date>2021-03-24 17:44:34 -0700</date>
            <delta_ts>2021-03-24 18:28:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-223701-20210324174433.patch</filename>
            <type>text/plain</type>
            <size>2057</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc0OTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzQ1MmI5OTdlMDAyNjNh
ZGI5MGY3MDQ3MmNkZTdlZTU0NDc2ZDVmOC4uODZlNjlkZTAwYWY4ZTY0NmMxNmYzODg1MDIwYzI0
ZGE2MTMyMmNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDIxLTAzLTI0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgUG9ydCBGb250RGVzY3JpcHRp
b25LZXk6OmNvbXB1dGVIYXNoKCkgZnJvbSBsZWdhY3kgSW50ZWdlckhhc2hlciB0byBIYXNoZXIK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMzcwMQor
CisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFBvcnQgRm9udERl
c2NyaXB0aW9uS2V5Ojpjb21wdXRlSGFzaCgpIGZyb20gbGVnYWN5IEludGVnZXJIYXNoZXIgdG8g
SGFzaGVyLiBIYXNoZXIKKyAgICAgICAgaGFzIHRoZSBiZW5lZml0IG9mIGhhdmluZyBhZGQoKSBv
dmVybG9hZHMgdGhhdCB0YWtlIGluIHNpZ25lZCBpbnRlZ2VyIHR5cGVzLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250RGVz
Y3JpcHRpb25LZXk6OmNvbXB1dGVIYXNoIGNvbnN0KToKKwogMjAyMS0wMy0yNCAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQgYnVpbGQgZml4IGFm
dGVyIHIyNzQ5ODMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNo
ZS5oCmluZGV4IGRlY2Q2N2VkYWQ2OGM3NzFmMDgyZDhmY2I1NzhjMzEyM2Q1N2ZmMmUuLmQxOThm
MTBhZjlhYTVkMjczNDZmODU0ZTlmYzkxZjQ2NzNlMDg0Y2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0xMDgsMTYgKzEwOCwxMyBAQCBzdHJ1
Y3QgRm9udERlc2NyaXB0aW9uS2V5IHsKIAogICAgIGlubGluZSB1bnNpZ25lZCBjb21wdXRlSGFz
aCgpIGNvbnN0CiAgICAgewotICAgICAgICBJbnRlZ2VySGFzaGVyIGhhc2hlcjsKLSAgICAgICAg
aGFzaGVyLmFkZChtX3NpemUpOwotICAgICAgICBoYXNoZXIuYWRkKG1fZm9udFNlbGVjdGlvblJl
cXVlc3Qud2VpZ2h0KTsKLSAgICAgICAgaGFzaGVyLmFkZChtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0
LndpZHRoKTsKLSAgICAgICAgaGFzaGVyLmFkZChtX2ZvbnRTZWxlY3Rpb25SZXF1ZXN0LnNsb3Bl
LnZhbHVlT3Iobm9ybWFsSXRhbGljVmFsdWUoKSkpOwotICAgICAgICBoYXNoZXIuYWRkKG1fbG9j
YWxlLmV4aXN0aW5nSGFzaCgpKTsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBmbGFnSXRlbSA6IG1f
ZmxhZ3MpCi0gICAgICAgICAgICBoYXNoZXIuYWRkKGZsYWdJdGVtKTsKLSAgICAgICAgaGFzaGVy
LmFkZChtX2ZlYXR1cmVTZXR0aW5ncy5oYXNoKCkpOwotICAgICAgICBoYXNoZXIuYWRkKG1fdmFy
aWF0aW9uU2V0dGluZ3MuaGFzaCgpKTsKKyAgICAgICAgSGFzaGVyIGhhc2hlcjsKKyAgICAgICAg
YWRkKGhhc2hlciwgbV9zaXplKTsKKyAgICAgICAgYWRkKGhhc2hlciwgbV9mb250U2VsZWN0aW9u
UmVxdWVzdC50aWVkKCkpOworICAgICAgICBhZGQoaGFzaGVyLCBtX2xvY2FsZS5leGlzdGluZ0hh
c2goKSk7CisgICAgICAgIGFkZChoYXNoZXIsIG1fZmxhZ3MpOworICAgICAgICBhZGQoaGFzaGVy
LCBtX2ZlYXR1cmVTZXR0aW5ncy5oYXNoKCkpOworICAgICAgICBhZGQoaGFzaGVyLCBtX3Zhcmlh
dGlvblNldHRpbmdzLmhhc2goKSk7CiAgICAgICAgIHJldHVybiBoYXNoZXIuaGFzaCgpOwogICAg
IH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>