<?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>221766</bug_id>
          
          <creation_ts>2021-02-11 11:46:29 -0800</creation_ts>
          <short_desc>Reduce string copies when converting from NSString/CFStringRef to WTF::String</short_desc>
          <delta_ts>2021-02-12 14:09:23 -0800</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>RESOLVED</bug_status>
          <resolution>FIXED</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1728202</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-11 11:46:29 -0800</bug_when>
    <thetext>Reduce string copies when converting from NSString/CFStringRef to WTF::String</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728206</commentid>
    <comment_count>1</comment_count>
      <attachid>420020</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-11 11:52:58 -0800</bug_when>
    <thetext>Created attachment 420020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728224</commentid>
    <comment_count>2</comment_count>
      <attachid>420020</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-02-11 12:12:40 -0800</bug_when>
    <thetext>Comment on attachment 420020
Patch

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

r=me -- but please revert the buffer casting behavior before landing (or post a new patch)

&gt; Source/WTF/wtf/text/cf/StringCF.cpp:52
&gt; +    buffer.resize(size * sizeof(UChar) / sizeof(LChar));
&gt; +
&gt; +    StringBuffer&lt;UChar&gt;&amp; ucharBuffer = *reinterpret_cast&lt;StringBuffer&lt;UChar&gt;*&gt;(&amp;buffer);

I don&apos;t think we should do this part. It&apos;s not type-safe or strict-aliasing-safe. Also, in order for the resize() to be an optimization, malloc would need to over-allocate the original buffer by 2X. In bmalloc, that will never happen.

So, I recommend just using a new StringBuffer. Or, if I&apos;ve missed something and there&apos;s a reason to believe that resize() will be faster, then I recommend adding a releaseRaw() that gives you the malloc buffer, along with an adopting constructor. That&apos;s type-safe and strict-aliasing-safe.

(Side note: I think the argument to resize() should have been just &quot;size&quot;.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728227</commentid>
    <comment_count>3</comment_count>
      <attachid>420025</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-11 12:17:58 -0800</bug_when>
    <thetext>Created attachment 420025
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728229</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-02-11 12:19:41 -0800</bug_when>
    <thetext>&gt; Also, in order for the resize() to be an optimization,
&gt; malloc would need to over-allocate the original buffer by 2X. In bmalloc,
&gt; that will never happen.

Well, I guess it could be an optimization if the allocation were large and the adjacent memory were free? Anyway, in that case, you&apos;d only save the function call to malloc(); the data copy would still have to restart from scratch. So, I&apos;m not sure it would be a win.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728231</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2021-02-11 12:21:26 -0800</bug_when>
    <thetext>If resize doesn&apos;t find adjacent memory, wouldn&apos;t it need to copy the bytes that we are going to throw away?  I think two malloc calls is actually most efficient.
I added a scope to free the first before allocating the second</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728232</commentid>
    <comment_count>6</comment_count>
      <attachid>420025</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-02-11 12:23:03 -0800</bug_when>
    <thetext>Comment on attachment 420025
Patch

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

&gt; Source/WTF/wtf/text/cf/StringCF.cpp:47
&gt; +        StringBuffer&lt;LChar&gt; buffer(size);
&gt;          CFIndex usedBufLen;
&gt; -        CFIndex convertedsize = CFStringGetBytes(str, CFRangeMake(0, size), kCFStringEncodingISOLatin1, 0, false, lcharBuffer.data(), size, &amp;usedBufLen);
&gt; -        if ((convertedsize == size) &amp;&amp; (usedBufLen == size)) {
&gt; -            m_impl = StringImpl::create(lcharBuffer.data(), size);
&gt; +        CFIndex convertedSize = CFStringGetBytes(str, CFRangeMake(0, size), kCFStringEncodingISOLatin1, 0, false, buffer.characters(), size, &amp;usedBufLen);
&gt; +        if (convertedSize == size &amp;&amp; usedBufLen == size) {

If we ever regret this behavior, I suppose we can preflight it with a CFStringGetFastestEncoding() check?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728234</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-02-11 12:23:47 -0800</bug_when>
    <thetext>(In reply to Alex Christensen from comment #5)
&gt; If resize doesn&apos;t find adjacent memory, wouldn&apos;t it need to copy the bytes
&gt; that we are going to throw away?

Yes, good point.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728260</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-11 13:30:31 -0800</bug_when>
    <thetext>commit-queue failed to commit attachment 420025 to WebKit repository. To retry, please set cq+ flag again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728301</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-11 14:24:05 -0800</bug_when>
    <thetext>Committed r272752: &lt;https://commits.webkit.org/r272752&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 420025.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728304</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-11 14:25:27 -0800</bug_when>
    <thetext>&lt;rdar://problem/74250930&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728749</commentid>
    <comment_count>11</comment_count>
      <attachid>420025</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-02-12 13:30:24 -0800</bug_when>
    <thetext>Comment on attachment 420025
Patch

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

&gt; Source/WTF/wtf/text/cf/StringCF.cpp:48
&gt; +            m_impl = StringImpl::adopt(WTFMove(buffer));

This makes a 2-block StringImpl (BufferOwned), but the old code made a 1-block StringImpl (BufferInternal). Doesn’t that mean we are using more memory now?

&gt; Source/WTF/wtf/text/cf/StringCF.cpp:55
&gt; +    m_impl = StringImpl::adopt(WTFMove(ucharBuffer));

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728788</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-02-12 14:09:23 -0800</bug_when>
    <thetext>&gt; This makes a 2-block StringImpl (BufferOwned), but the old code made a
&gt; 1-block StringImpl (BufferInternal). Doesn’t that mean we are using more
&gt; memory now?

bmalloc small allocations are precise, so I don&apos;t think BufferOwned intrinsically uses more memory. But maybe having two objects instead of one increases risk of fragmentation.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420020</attachid>
            <date>2021-02-11 11:52:58 -0800</date>
            <delta_ts>2021-02-11 12:17:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221766-20210211115257.patch</filename>
            <type>text/plain</type>
            <size>6089</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNjM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDNlNjQ2ZjA5NDM1ZDUxNjJmNGJkMTAw
M2VlMjJhYjVhMWM4NjgyODguLjNlYTEyMmZkODk2ZjNiNjRkNTI0ODU1YTFjNzQ5MTA0NGNhNGFh
YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMjEtMDItMTEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZWR1Y2Ugc3RyaW5nIGNvcGllcyB3
aGVuIGNvbnZlcnRpbmcgZnJvbSBOU1N0cmluZy9DRlN0cmluZ1JlZiB0byBXVEY6OlN0cmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxNzY2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByZWR1
Y2VzIHRoZSBzdHJpbmcgY29waWVzIGZyb20gdHdvIHRvIG9uZSB3aGljaCBzaG91bGQgc3BlZWQg
dXAgbWFueSB0aGluZ3MuCisgICAgICAgIFRoZSBjb3N0IGlzIHRoYXQgZm9yIG5vbi1MYXRpbjEt
ZW5jb2RhYmxlIHN0cmluZ3Mgb2YgbGVuZ3RoIGxlc3MgdGhhbiAxMDI0LCB3ZSBub3cgZG8gYW4g
YWxsb2NhdGlvbgorICAgICAgICBhbmQgYSByZWFsbG9jYXRpb24sIHdoZXJlYXMgYmVmb3JlIHdl
IHdlcmUgZG9pbmcganVzdCBvbmUgYWxsb2NhdGlvbi4gIEkgdGhpbmsgZXZlbiBpbiB0aGlzIGNh
c2UsIHRob3VnaCwKKyAgICAgICAgdGhlIGNvc3Qgb2YgYSByZWFsbG9jYXRpb24gc2hvdWxkIGJl
IGNvbXBhcmFibGUgdG8gdGhlIGNvc3Qgb2YgZG9pbmcgYSBkb3VibGUgc3RyaW5nIGNvcHksCisg
ICAgICAgIGFuZCB0aGUgYmVuZWZpdCBvZiByZWR1Y2luZyBhIHN0cmluZyBjb3B5IGV2ZXJ5d2hl
cmUgaXMgY29tcGVsbGluZy4KKworICAgICAgICBJIGFsc28gcmVkdWNlZCBkdXBsaWNhdGUgY29k
ZSBieSBjb21iaW5pbmcgdGhlIENGIGFuZCBOUyBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAg
KiB3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nQnVmZmVyOjpy
ZXNpemUpOgorICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmluZy5oOgorICAgICAgICAqIHd0Zi90
ZXh0L2NmL1N0cmluZ0NGLmNwcDoKKyAgICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmcpOgorICAg
ICAgICAqIHd0Zi90ZXh0L2NvY29hL1N0cmluZ0NvY29hLm1tOgorICAgICAgICAoV1RGOjpTdHJp
bmc6OlN0cmluZyk6IERlbGV0ZWQuCisKIDIwMjEtMDItMDkgIERldmluIFJvdXNzbyAgPGRyb3Vz
c29AYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIEFkZCBzdXBwb3J0IGZvciB0aGUgbGFuZ3Vh
Z2Uvc3VidGl0bGUgdHJhY2tzIGJ1dHRvbiB1c2luZyBgVUlNZW51YApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWZmZXIuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvU3Ry
aW5nQnVmZmVyLmgKaW5kZXggZmNmMzkyNDQxYmZhZjI1OTE0OTNjNGE5NzU3YzI2YTZmOGRhNjVm
ZC4uMzRkOWQyYmFhZmQ1YzlmN2ZiZGExZjllZDg5MmU2MWE3MjVjYjA2YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdCdWZmZXIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L1N0cmluZ0J1ZmZlci5oCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICAgICAgaWYg
KG5ld0xlbmd0aCA+IG1fbGVuZ3RoKSB7CiAgICAgICAgICAgICBpZiAobmV3TGVuZ3RoID4gc3Rk
OjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gc2l6ZW9mKFVDaGFyKSkKICAgICAg
ICAgICAgICAgICBDUkFTSCgpOwotICAgICAgICAgICAgbV9kYXRhID0gc3RhdGljX2Nhc3Q8VUNo
YXIqPihTdHJpbmdCdWZmZXJNYWxsb2M6OnJlYWxsb2MobV9kYXRhLCBuZXdMZW5ndGggKiBzaXpl
b2YoVUNoYXIpKSk7CisgICAgICAgICAgICBtX2RhdGEgPSBzdGF0aWNfY2FzdDxDaGFyVHlwZSo+
KFN0cmluZ0J1ZmZlck1hbGxvYzo6cmVhbGxvYyhtX2RhdGEsIG5ld0xlbmd0aCAqIHNpemVvZihV
Q2hhcikpKTsKICAgICAgICAgfQogICAgICAgICBtX2xlbmd0aCA9IG5ld0xlbmd0aDsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIvU291cmNlL1dU
Ri93dGYvdGV4dC9XVEZTdHJpbmcuaAppbmRleCAwNTQxMDIyYmU2YTU1NTJlZmVmMWFhMWE1Y2I0
YmRiNzk1YWI4MmZmLi5iOGRlMTkwNDk5ZjcwM2VhYWM4NmNkZDA0ODI1ZTE2MTYzOGNjMjQyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dURlN0cmluZy5oCisrKyBiL1NvdXJjZS9X
VEYvd3RmL3RleHQvV1RGU3RyaW5nLmgKQEAgLTMxOSw3ICszMTksOCBAQCBwdWJsaWM6CiAjZW5k
aWYKIAogI2lmZGVmIF9fT0JKQ19fCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIFN0cmluZyhOU1N0
cmluZyAqKTsKKyAgICBTdHJpbmcoTlNTdHJpbmcgKnN0cmluZykKKyAgICAgICAgOiBTdHJpbmco
KF9fYnJpZGdlIENGU3RyaW5nUmVmKXN0cmluZykgeyB9CiAKICAgICAvLyBUaGlzIGNvbnZlcnNp
b24gY29udmVydHMgdGhlIG51bGwgc3RyaW5nIHRvIGFuIGVtcHR5IE5TU3RyaW5nIHJhdGhlciB0
aGFuIHRvIG5pbC4KICAgICAvLyBHaXZlbiBDb2NvYSBpZGlvbXMsIHRoaXMgaXMgYSBtb3JlIHVz
ZWZ1bCBkZWZhdWx0LiBDbGllbnRzIHRoYXQgbmVlZCB0byBwcmVzZXJ2ZSB0aGUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ0YuY3BwIGIvU291cmNlL1dURi93dGYv
dGV4dC9jZi9TdHJpbmdDRi5jcHAKaW5kZXggMTBlYmMwYzY1NzM1YTk1OTY5ODU5NjMyMGIwZGFl
NzIwZGQ0ZDQ1YS4uNzBlZTA1YThiYTUxZjlkZWE2ZTNmZTQ1YTVlMWQ0YzBjNWY5YmYyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9jZi9TdHJpbmdDRi5jcHAKKysrIGIvU291cmNl
L1dURi93dGYvdGV4dC9jZi9TdHJpbmdDRi5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1
ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1ZmZlci5oPgogCiBuYW1lc3BhY2Ug
V1RGIHsKIApAQCAtMzQsMjEgKzM1LDIzIEBAIFN0cmluZzo6U3RyaW5nKENGU3RyaW5nUmVmIHN0
cikKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0ZJbmRleCBzaXplID0gQ0ZTdHJpbmdHZXRMZW5n
dGgoc3RyKTsKLSAgICBpZiAoc2l6ZSA9PSAwKQorICAgIGlmICghc2l6ZSkgewogICAgICAgICBt
X2ltcGwgPSBTdHJpbmdJbXBsOjplbXB0eSgpOwotICAgIGVsc2UgewotICAgICAgICBWZWN0b3I8
TENoYXIsIDEwMjQ+IGxjaGFyQnVmZmVyKHNpemUpOwotICAgICAgICBDRkluZGV4IHVzZWRCdWZM
ZW47Ci0gICAgICAgIENGSW5kZXggY29udmVydGVkc2l6ZSA9IENGU3RyaW5nR2V0Qnl0ZXMoc3Ry
LCBDRlJhbmdlTWFrZSgwLCBzaXplKSwga0NGU3RyaW5nRW5jb2RpbmdJU09MYXRpbjEsIDAsIGZh
bHNlLCBsY2hhckJ1ZmZlci5kYXRhKCksIHNpemUsICZ1c2VkQnVmTGVuKTsKLSAgICAgICAgaWYg
KChjb252ZXJ0ZWRzaXplID09IHNpemUpICYmICh1c2VkQnVmTGVuID09IHNpemUpKSB7Ci0gICAg
ICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUobGNoYXJCdWZmZXIuZGF0YSgpLCBz
aXplKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICByZXR1cm47Cisg
ICAgfQogCi0gICAgICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gYnVmZmVyKHNpemUpOwotICAgICAg
ICBDRlN0cmluZ0dldENoYXJhY3RlcnMoc3RyLCBDRlJhbmdlTWFrZSgwLCBzaXplKSwgKFVuaUNo
YXIqKWJ1ZmZlci5kYXRhKCkpOwotICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUo
YnVmZmVyLmRhdGEoKSwgc2l6ZSk7CisgICAgU3RyaW5nQnVmZmVyPExDaGFyPiBidWZmZXIoc2l6
ZSk7CisgICAgQ0ZJbmRleCB1c2VkQnVmTGVuOworICAgIENGSW5kZXggY29udmVydGVkU2l6ZSA9
IENGU3RyaW5nR2V0Qnl0ZXMoc3RyLCBDRlJhbmdlTWFrZSgwLCBzaXplKSwga0NGU3RyaW5nRW5j
b2RpbmdJU09MYXRpbjEsIDAsIGZhbHNlLCBidWZmZXIuY2hhcmFjdGVycygpLCBzaXplLCAmdXNl
ZEJ1Zkxlbik7CisgICAgaWYgKGNvbnZlcnRlZFNpemUgPT0gc2l6ZSAmJiB1c2VkQnVmTGVuID09
IHNpemUpIHsKKyAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6YWRvcHQoV1RGTW92ZShidWZm
ZXIpKTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBidWZmZXIucmVzaXplKHNpemUgKiBz
aXplb2YoVUNoYXIpIC8gc2l6ZW9mKExDaGFyKSk7CisKKyAgICBTdHJpbmdCdWZmZXI8VUNoYXI+
JiB1Y2hhckJ1ZmZlciA9ICpyZWludGVycHJldF9jYXN0PFN0cmluZ0J1ZmZlcjxVQ2hhcj4qPigm
YnVmZmVyKTsKKyAgICBDRlN0cmluZ0dldENoYXJhY3RlcnMoc3RyLCBDRlJhbmdlTWFrZSgwLCBz
aXplKSwgcmVpbnRlcnByZXRfY2FzdDxVbmlDaGFyICo+KHVjaGFyQnVmZmVyLmNoYXJhY3RlcnMo
KSkpOworICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUodWNoYXJCdWZmZXIp
KTsKIH0KIAogUmV0YWluUHRyPENGU3RyaW5nUmVmPiBTdHJpbmc6OmNyZWF0ZUNGU3RyaW5nKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvU3RyaW5nQ29jb2Eu
bW0gYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L2NvY29hL1N0cmluZ0NvY29hLm1tCmluZGV4IDdmZTIy
OGIzMjdkZDVmOWI5YzA4NmRmZGU2NTZjN2ZkYTVjOTYwMjMuLjgzNWEyMGM0YzUzZDI1ODg5YTU5
OTc2NTI5ZWY2OTI0NjA1YWFjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29j
b2EvU3RyaW5nQ29jb2EubW0KKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9TdHJpbmdD
b2NvYS5tbQpAQCAtMjUsMjkgKzI1LDYgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLVN0cmluZzo6
U3RyaW5nKE5TU3RyaW5nICpzdHIpCi17Ci0gICAgaWYgKCFzdHIpCi0gICAgICAgIHJldHVybjsK
LQotICAgIENGSW5kZXggc2l6ZSA9IENGU3RyaW5nR2V0TGVuZ3RoKChfX2JyaWRnZSBDRlN0cmlu
Z1JlZilzdHIpOwotICAgIGlmICghc2l6ZSkKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6
ZW1wdHkoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgVmVjdG9yPExDaGFyLCAxMDI0PiBsY2hhckJ1
ZmZlcihzaXplKTsKLSAgICAgICAgQ0ZJbmRleCB1c2VkQnVmTGVuOwotICAgICAgICBDRkluZGV4
IGNvbnZlcnRlZHNpemUgPSBDRlN0cmluZ0dldEJ5dGVzKChfX2JyaWRnZSBDRlN0cmluZ1JlZilz
dHIsIENGUmFuZ2VNYWtlKDAsIHNpemUpLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwgMCwg
ZmFsc2UsIGxjaGFyQnVmZmVyLmRhdGEoKSwgc2l6ZSwgJnVzZWRCdWZMZW4pOwotICAgICAgICBp
ZiAoKGNvbnZlcnRlZHNpemUgPT0gc2l6ZSkgJiYgKHVzZWRCdWZMZW4gPT0gc2l6ZSkpIHsKLSAg
ICAgICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShsY2hhckJ1ZmZlci5kYXRhKCks
IHNpemUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgVmVjdG9y
PFVDaGFyLCAxMDI0PiB1Y2hhckJ1ZmZlcihzaXplKTsKLSAgICAgICAgQ0ZTdHJpbmdHZXRDaGFy
YWN0ZXJzKChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHIsIENGUmFuZ2VNYWtlKDAsIHNpemUpLCBy
ZWludGVycHJldF9jYXN0PFVuaUNoYXIqPih1Y2hhckJ1ZmZlci5kYXRhKCkpKTsKLSAgICAgICAg
bV9pbXBsID0gU3RyaW5nSW1wbDo6Y3JlYXRlKHVjaGFyQnVmZmVyLmRhdGEoKSwgc2l6ZSk7Ci0g
ICAgfQotfQotCiBSZXRhaW5QdHI8aWQ+IG1ha2VOU0FycmF5RWxlbWVudChjb25zdCBTdHJpbmcm
IHZlY3RvckVsZW1lbnQpCiB7CiAgICAgcmV0dXJuIGFkb3B0TlMoKF9fYnJpZGdlX3RyYW5zZmVy
IGlkKXZlY3RvckVsZW1lbnQuY3JlYXRlQ0ZTdHJpbmcoKS5sZWFrUmVmKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>420025</attachid>
            <date>2021-02-11 12:17:58 -0800</date>
            <delta_ts>2021-02-11 14:24:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221766-20210211121758.patch</filename>
            <type>text/plain</type>
            <size>5213</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNzAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDE3NWJmMGM1NGNlMWU1NGZiNTRmMzBm
YWIyNjQ4ZmIzMTQ2OWQ1OTYuLmIyN2Q0NzRhZGVmNzZmMjJhZTk5NzEwN2JmOWIyZTA5NGJiZTFl
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjEtMDItMTEgIEFsZXggQ2hyaXN0ZW5zZW4gIDxh
Y2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZWR1Y2Ugc3RyaW5nIGNvcGllcyB3
aGVuIGNvbnZlcnRpbmcgZnJvbSBOU1N0cmluZy9DRlN0cmluZ1JlZiB0byBXVEY6OlN0cmluZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxNzY2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCisKKyAgICAgICAgVGhpcyByZWR1Y2Vz
IHRoZSBzdHJpbmcgY29waWVzIGZyb20gdHdvIHRvIG9uZSB3aGljaCBzaG91bGQgc3BlZWQgdXAg
bWFueSB0aGluZ3MuCisgICAgICAgIFRoZSBjb3N0IGlzIHRoYXQgZm9yIG5vbi1MYXRpbjEtZW5j
b2RhYmxlIHN0cmluZ3Mgb2YgbGVuZ3RoIGxlc3MgdGhhbiAxMDI0LCB3ZSBub3cgZG8gYW4gYWxs
b2NhdGlvbgorICAgICAgICBhbmQgYSByZWFsbG9jYXRpb24sIHdoZXJlYXMgYmVmb3JlIHdlIHdl
cmUgZG9pbmcganVzdCBvbmUgYWxsb2NhdGlvbi4gIEkgdGhpbmsgZXZlbiBpbiB0aGlzIGNhc2Us
IHRob3VnaCwKKyAgICAgICAgdGhlIGNvc3Qgb2YgYSByZWFsbG9jYXRpb24gc2hvdWxkIGJlIGNv
bXBhcmFibGUgdG8gdGhlIGNvc3Qgb2YgZG9pbmcgYSBkb3VibGUgc3RyaW5nIGNvcHksCisgICAg
ICAgIGFuZCB0aGUgYmVuZWZpdCBvZiByZWR1Y2luZyBhIHN0cmluZyBjb3B5IGV2ZXJ5d2hlcmUg
aXMgY29tcGVsbGluZy4KKworICAgICAgICBJIGFsc28gcmVkdWNlZCBkdXBsaWNhdGUgY29kZSBi
eSBjb21iaW5pbmcgdGhlIENGIGFuZCBOUyBpbXBsZW1lbnRhdGlvbnMuCisKKyAgICAgICAgKiB3
dGYvdGV4dC9XVEZTdHJpbmcuaDoKKyAgICAgICAgKiB3dGYvdGV4dC9jZi9TdHJpbmdDRi5jcHA6
CisgICAgICAgIChXVEY6OlN0cmluZzo6U3RyaW5nKToKKyAgICAgICAgKiB3dGYvdGV4dC9jb2Nv
YS9TdHJpbmdDb2NvYS5tbToKKyAgICAgICAgKFdURjo6U3RyaW5nOjpTdHJpbmcpOiBEZWxldGVk
LgorCiAyMDIxLTAyLTEwICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgog
CiAgICAgICAgIFVzZSBIQVZFKFBFUFBFUl9VSV9DT1JFKSBpbnN0ZWFkIG9mIFBMQVRGT1JNKFdB
VENIT1MpIHRvIGd1YXJkIGNvZGUgdGhhdCB1c2VzIFBlcHBlclVJQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvV1RG
U3RyaW5nLmgKaW5kZXggMDU0MTAyMmJlNmE1NTUyZWZlZjFhYTFhNWNiNGJkYjc5NWFiODJmZi4u
YjhkZTE5MDQ5OWY3MDNlYWFjODZjZGQwNDgyNWUxNjE2MzhjYzI0MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvdGV4dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L1dU
RlN0cmluZy5oCkBAIC0zMTksNyArMzE5LDggQEAgcHVibGljOgogI2VuZGlmCiAKICNpZmRlZiBf
X09CSkNfXwotICAgIFdURl9FWFBPUlRfUFJJVkFURSBTdHJpbmcoTlNTdHJpbmcgKik7CisgICAg
U3RyaW5nKE5TU3RyaW5nICpzdHJpbmcpCisgICAgICAgIDogU3RyaW5nKChfX2JyaWRnZSBDRlN0
cmluZ1JlZilzdHJpbmcpIHsgfQogCiAgICAgLy8gVGhpcyBjb252ZXJzaW9uIGNvbnZlcnRzIHRo
ZSBudWxsIHN0cmluZyB0byBhbiBlbXB0eSBOU1N0cmluZyByYXRoZXIgdGhhbiB0byBuaWwuCiAg
ICAgLy8gR2l2ZW4gQ29jb2EgaWRpb21zLCB0aGlzIGlzIGEgbW9yZSB1c2VmdWwgZGVmYXVsdC4g
Q2xpZW50cyB0aGF0IG5lZWQgdG8gcHJlc2VydmUgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L2NmL1N0cmluZ0NGLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5n
Q0YuY3BwCmluZGV4IDEwZWJjMGM2NTczNWE5NTk2OTg1OTYzMjBiMGRhZTcyMGRkNGQ0NWEuLmUw
NjZhMzk0MTkxYzRhYjA2MTE0NmFhZDk5Yzk3YjFlNTFkNTljMjUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvY2YvU3RyaW5nQ0YuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL3RleHQv
Y2YvU3RyaW5nQ0YuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlIDxDb3JlRm91bmRh
dGlvbi9Db3JlRm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWZmZXIuaD4KIAogbmFtZXNwYWNlIFdURiB7CiAKQEAgLTM0
LDIxICszNSwyNCBAQCBTdHJpbmc6OlN0cmluZyhDRlN0cmluZ1JlZiBzdHIpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIENGSW5kZXggc2l6ZSA9IENGU3RyaW5nR2V0TGVuZ3RoKHN0cik7Ci0gICAg
aWYgKHNpemUgPT0gMCkKKyAgICBpZiAoIXNpemUpIHsKICAgICAgICAgbV9pbXBsID0gU3RyaW5n
SW1wbDo6ZW1wdHkoKTsKLSAgICBlbHNlIHsKLSAgICAgICAgVmVjdG9yPExDaGFyLCAxMDI0PiBs
Y2hhckJ1ZmZlcihzaXplKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHsKKyAgICAg
ICAgU3RyaW5nQnVmZmVyPExDaGFyPiBidWZmZXIoc2l6ZSk7CiAgICAgICAgIENGSW5kZXggdXNl
ZEJ1ZkxlbjsKLSAgICAgICAgQ0ZJbmRleCBjb252ZXJ0ZWRzaXplID0gQ0ZTdHJpbmdHZXRCeXRl
cyhzdHIsIENGUmFuZ2VNYWtlKDAsIHNpemUpLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwg
MCwgZmFsc2UsIGxjaGFyQnVmZmVyLmRhdGEoKSwgc2l6ZSwgJnVzZWRCdWZMZW4pOwotICAgICAg
ICBpZiAoKGNvbnZlcnRlZHNpemUgPT0gc2l6ZSkgJiYgKHVzZWRCdWZMZW4gPT0gc2l6ZSkpIHsK
LSAgICAgICAgICAgIG1faW1wbCA9IFN0cmluZ0ltcGw6OmNyZWF0ZShsY2hhckJ1ZmZlci5kYXRh
KCksIHNpemUpOworICAgICAgICBDRkluZGV4IGNvbnZlcnRlZFNpemUgPSBDRlN0cmluZ0dldEJ5
dGVzKHN0ciwgQ0ZSYW5nZU1ha2UoMCwgc2l6ZSksIGtDRlN0cmluZ0VuY29kaW5nSVNPTGF0aW4x
LCAwLCBmYWxzZSwgYnVmZmVyLmNoYXJhY3RlcnMoKSwgc2l6ZSwgJnVzZWRCdWZMZW4pOworICAg
ICAgICBpZiAoY29udmVydGVkU2l6ZSA9PSBzaXplICYmIHVzZWRCdWZMZW4gPT0gc2l6ZSkgewor
ICAgICAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6YWRvcHQoV1RGTW92ZShidWZmZXIpKTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotCi0gICAgICAgIFZlY3RvcjxVQ2hhciwg
MTAyND4gYnVmZmVyKHNpemUpOwotICAgICAgICBDRlN0cmluZ0dldENoYXJhY3RlcnMoc3RyLCBD
RlJhbmdlTWFrZSgwLCBzaXplKSwgKFVuaUNoYXIqKWJ1ZmZlci5kYXRhKCkpOwotICAgICAgICBt
X2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVhdGUoYnVmZmVyLmRhdGEoKSwgc2l6ZSk7CiAgICAgfQor
CisgICAgU3RyaW5nQnVmZmVyPFVDaGFyPiB1Y2hhckJ1ZmZlcihzaXplKTsKKyAgICBDRlN0cmlu
Z0dldENoYXJhY3RlcnMoc3RyLCBDRlJhbmdlTWFrZSgwLCBzaXplKSwgcmVpbnRlcnByZXRfY2Fz
dDxVbmlDaGFyICo+KHVjaGFyQnVmZmVyLmNoYXJhY3RlcnMoKSkpOworICAgIG1faW1wbCA9IFN0
cmluZ0ltcGw6OmFkb3B0KFdURk1vdmUodWNoYXJCdWZmZXIpKTsKIH0KIAogUmV0YWluUHRyPENG
U3RyaW5nUmVmPiBTdHJpbmc6OmNyZWF0ZUNGU3RyaW5nKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvd3RmL3RleHQvY29jb2EvU3RyaW5nQ29jb2EubW0gYi9Tb3VyY2UvV1RGL3d0Zi90
ZXh0L2NvY29hL1N0cmluZ0NvY29hLm1tCmluZGV4IDdmZTIyOGIzMjdkZDVmOWI5YzA4NmRmZGU2
NTZjN2ZkYTVjOTYwMjMuLjgzNWEyMGM0YzUzZDI1ODg5YTU5OTc2NTI5ZWY2OTI0NjA1YWFjYzUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvY29jb2EvU3RyaW5nQ29jb2EubW0KKysr
IGIvU291cmNlL1dURi93dGYvdGV4dC9jb2NvYS9TdHJpbmdDb2NvYS5tbQpAQCAtMjUsMjkgKzI1
LDYgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLVN0cmluZzo6U3RyaW5nKE5TU3RyaW5nICpzdHIp
Ci17Ci0gICAgaWYgKCFzdHIpCi0gICAgICAgIHJldHVybjsKLQotICAgIENGSW5kZXggc2l6ZSA9
IENGU3RyaW5nR2V0TGVuZ3RoKChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHIpOwotICAgIGlmICgh
c2l6ZSkKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6ZW1wdHkoKTsKLSAgICBlbHNlIHsK
LSAgICAgICAgVmVjdG9yPExDaGFyLCAxMDI0PiBsY2hhckJ1ZmZlcihzaXplKTsKLSAgICAgICAg
Q0ZJbmRleCB1c2VkQnVmTGVuOwotICAgICAgICBDRkluZGV4IGNvbnZlcnRlZHNpemUgPSBDRlN0
cmluZ0dldEJ5dGVzKChfX2JyaWRnZSBDRlN0cmluZ1JlZilzdHIsIENGUmFuZ2VNYWtlKDAsIHNp
emUpLCBrQ0ZTdHJpbmdFbmNvZGluZ0lTT0xhdGluMSwgMCwgZmFsc2UsIGxjaGFyQnVmZmVyLmRh
dGEoKSwgc2l6ZSwgJnVzZWRCdWZMZW4pOwotICAgICAgICBpZiAoKGNvbnZlcnRlZHNpemUgPT0g
c2l6ZSkgJiYgKHVzZWRCdWZMZW4gPT0gc2l6ZSkpIHsKLSAgICAgICAgICAgIG1faW1wbCA9IFN0
cmluZ0ltcGw6OmNyZWF0ZShsY2hhckJ1ZmZlci5kYXRhKCksIHNpemUpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiB1Y2hhckJ1
ZmZlcihzaXplKTsKLSAgICAgICAgQ0ZTdHJpbmdHZXRDaGFyYWN0ZXJzKChfX2JyaWRnZSBDRlN0
cmluZ1JlZilzdHIsIENGUmFuZ2VNYWtlKDAsIHNpemUpLCByZWludGVycHJldF9jYXN0PFVuaUNo
YXIqPih1Y2hhckJ1ZmZlci5kYXRhKCkpKTsKLSAgICAgICAgbV9pbXBsID0gU3RyaW5nSW1wbDo6
Y3JlYXRlKHVjaGFyQnVmZmVyLmRhdGEoKSwgc2l6ZSk7Ci0gICAgfQotfQotCiBSZXRhaW5QdHI8
aWQ+IG1ha2VOU0FycmF5RWxlbWVudChjb25zdCBTdHJpbmcmIHZlY3RvckVsZW1lbnQpCiB7CiAg
ICAgcmV0dXJuIGFkb3B0TlMoKF9fYnJpZGdlX3RyYW5zZmVyIGlkKXZlY3RvckVsZW1lbnQuY3Jl
YXRlQ0ZTdHJpbmcoKS5sZWFrUmVmKCkpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>