<?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>41539</bug_id>
          
          <creation_ts>2010-07-02 14:08:24 -0700</creation_ts>
          <short_desc>Move BOM handling out of the lexer and parser</short_desc>
          <delta_ts>2010-07-06 10:24:20 -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 JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>41549</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>246077</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-02 14:08:24 -0700</bug_when>
    <thetext>Move BOM handling out of the lexer and parser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246080</commentid>
    <comment_count>1</comment_count>
      <attachid>60402</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-02 14:14:40 -0700</bug_when>
    <thetext>Created attachment 60402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246115</commentid>
    <comment_count>2</comment_count>
      <attachid>60402</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-02 14:52:34 -0700</bug_when>
    <thetext>Comment on attachment 60402
Patch

&gt; +                bool scratch = false;
&gt; +                m_source = UString(m_source.rep()-&gt;copyStringWithoutBOMs(false, scratch));

It&apos;s a little awkward to have this on StringImpl and have to dig down to the rep(). Normally we call functions directly on UString or String.

&gt; +            // ECMA-262 calls for stripping all Cf characters, but we only strip BOM characters.
&gt; +            // See &lt;https://bugs.webkit.org/show_bug.cgi?id=4931&gt; for details.

This comment seems to belong somewhere else. Obviously in a function named copyStringWithoutBOMs we strip only BOMs. I think the comment should ideally go at some call site that is making the policy decision. Sadly, there are multiple places!

I think the interface, where you pass in a boolean to tell it whether to skip the check for BOMs, is really awkward. Can we just break this into multiple functions? I could see (a) one function that just answers the question of whether there is a BOM, (b) another that strips the BOMs, and (c) a third for the case where you want to strip in the unlikely case that a BOM exists. Then we wouldn&apos;t need boolean arguments out or in at all.

CachedScript would use the (a) and (b) functions and the other call sites would use the (c) function that combines (a) and (b).

The constant byteOrderMark ought to go into CharacterNames.h. I guess that would need to move to WTF if this code is in WTF, though.

&gt; +            const size_t len = m_length;

We normally don’t use const in cases like this.

I really don&apos;t like the booleans arguments in copyStringWithoutBOMs, so I&apos;m going to say review-, but you could convince me to change my mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246116</commentid>
    <comment_count>3</comment_count>
      <attachid>60402</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-07-02 14:54:55 -0700</bug_when>
    <thetext>Comment on attachment 60402
Patch

I think copyStringWithoutBOMs is unnecessarily inefficient in the case where it finds a BOM.

I&apos;d have the first loop remember the index of the BOM it found, and make that the starting point of the second loop. I&apos;d also remove the shrinkToFit call (since it does an extra copy).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246117</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-07-02 14:56:08 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 60402 [details])
&gt; I think copyStringWithoutBOMs is unnecessarily inefficient in the case where it finds a BOM.
&gt; 
&gt; I&apos;d have the first loop remember the index of the BOM it found, and make that the starting point of the second loop. I&apos;d also remove the shrinkToFit call (since it does an extra copy).

Well, ggaren overrode my review- with a review+.

I agree on removing the shrinkToFit call. But I’m not sure I agree on optimizing the case where a BOM is partway through the string. Is this case really important enough to optimize?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246126</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-07-02 15:31:55 -0700</bug_when>
    <thetext>Committed r62410: &lt;http://trac.webkit.org/changeset/62410&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246135</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-07-02 15:57:12 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62410 might have broken Qt Linux Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246139</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2010-07-02 16:11:50 -0700</bug_when>
    <thetext>Oops!

Didn&apos;t mean to stomp Darin&apos;s review. Not sure how that happened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246264</commentid>
    <comment_count>8</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-07-03 00:20:30 -0700</bug_when>
    <thetext>I am happy this code moved out of the lexer. Nice patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247113</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-06 10:15:46 -0700</bug_when>
    <thetext>Does this mean that clients using JSC API won&apos;t get this behavior any more? Is this a problem, and/or a spec violation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247116</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-07-06 10:24:20 -0700</bug_when>
    <thetext>Oliver explained to me in person that WebCore CachedScript BOM handling doesn&apos;t replace JSC one.

&gt;            // ECMA-262 calls for stripping all Cf characters, but we only strip BOM characters. 
&gt;            // See &lt;https://bugs.webkit.org/show_bug.cgi?id=4931&gt; for details. 

This is clearly out of place in StringImpl.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60402</attachid>
            <date>2010-07-02 14:14:40 -0700</date>
            <delta_ts>2010-07-02 14:54:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41539-20100702141439.patch</filename>
            <type>text/plain</type>
            <size>12474</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBkZmYxMTQ1NmUxNDc4NzM0NjRlMmUwOGQxMzVhYWZmZWMxNGE2YWRmLi4z
YWM0MzhjMzQ0NGM5YjBjYmVjM2Y4M2E2MzVlZWIzNzlhOTk2YzY1IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjcgQEAKKzIwMTAtMDctMDIgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIEJP
TSBoYW5kbGluZyBvdXQgb2YgdGhlIGxleGVyIGFuZCBwYXJzZXIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQxNTM5CisKKyAgICAgICAgRG9pbmcgdGhl
IEJPTSBzdHJpcHBpbmcgaW4gdGhlIGxleGVyIG1lYW50IHRoYXQgd2UgY291bGQKKyAgICAgICAg
ZW5kIHVwIGhhdmluZyB0byBzdHJpcCB0aGUgQk9NcyBmcm9tIGEgc291cmNlIG11bHRpcGxlIHRp
bWVzLgorICAgICAgICBUbyBkZWFsIHdpdGggdGhpcyB3ZSBub3cgcmVxdWlyZSBhbGwgc3RyaW5n
cyBwcm92aWRlZCBieQorICAgICAgICBhIFNvdXJjZVByb3ZpZGVyIHRvIGFscmVhZHkgaGF2ZSBo
YWQgdGhlIEJPTXMgc3RyaXBwZWQuCisgICAgICAgIFRoaXMgYWxzbyBzaW1wbGlmaWVzIHNvbWUg
b2YgdGhlIGxleGVyIGxvZ2ljLgorCisgICAgICAgICogcGFyc2VyL0xleGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6TGV4ZXI6OnNldENvZGUpOgorICAgICAgICAoSlNDOjpMZXhlcjo6c291cmNlQ29k
ZSk6CisgICAgICAgICogcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmg6CisgICAgICAgIChKU0M6OlNv
dXJjZVByb3ZpZGVyOjpTb3VyY2VQcm92aWRlcik6CisgICAgICAgIChKU0M6OlVTdHJpbmdTb3Vy
Y2VQcm92aWRlcjo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6VVN0cmluZ1NvdXJjZVByb3ZpZGVy
OjpnZXRSYW5nZSk6CisgICAgICAgIChKU0M6OlVTdHJpbmdTb3VyY2VQcm92aWRlcjo6VVN0cmlu
Z1NvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTdHJpbmdJbXBsOjpjb3B5U3RyaW5nV2l0aG91dEJPTXMpOgorCiAyMDEw
LTA3LTAyICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkLiBCdWlsZCBmaXggZm9yIEdUSysuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTGV4ZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcApp
bmRleCBiYjJhYTkyNDdkNDI5MDhkMzZhYjczNzBhMjM4Mjc5OWY2ZDQ1MTllLi42NjBiMWE0YzQ0
Y2UyYjkwZjVlODI4NWY0OTQ4ZDU1MmYzNWU4NWU4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvTGV4ZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5jcHAK
QEAgLTQ1LDcgKzQ1LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFVuaWNvZGU7CiAKIG5hbWVzcGFjZSBK
U0MgewogCi1zdGF0aWMgY29uc3QgVUNoYXIgYnl0ZU9yZGVyTWFyayA9IDB4RkVGRjsKIAogZW51
bSBDaGFyYWN0ZXJUeXBlcyB7CiAgICAgLy8gVHlwZXMgZm9yIHRoZSBtYWluIHN3aXRjaApAQCAt
MjU2LDE3ICsyNTUsNiBAQCB2b2lkIExleGVyOjpzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmIHNv
dXJjZSwgUGFyc2VyQXJlbmEmIGFyZW5hKQogICAgIG1fYnVmZmVyOC5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KGluaXRpYWxSZWFkQnVmZmVyQ2FwYWNpdHkpOwogICAgIG1fYnVmZmVyMTYucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eSgobV9jb2RlRW5kIC0gbV9jb2RlKSAvIDIpOwogCi0gICAgLy8gRUNN
QS0yNjIgY2FsbHMgZm9yIHN0cmlwcGluZyBhbGwgQ2YgY2hhcmFjdGVycywgYnV0IHdlIG9ubHkg
c3RyaXAgQk9NIGNoYXJhY3RlcnMuCi0gICAgLy8gU2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDkzMT4gZm9yIGRldGFpbHMuCi0gICAgaWYgKHNvdXJjZS5wcm92
aWRlcigpLT5oYXNCT01zKCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBVQ2hhciogcCA9IG1fY29k
ZVN0YXJ0OyBwIDwgbV9jb2RlRW5kOyArK3ApIHsKLSAgICAgICAgICAgIGlmIChVTkxJS0VMWSgq
cCA9PSBieXRlT3JkZXJNYXJrKSkgewotICAgICAgICAgICAgICAgIGNvcHlDb2RlV2l0aG91dEJP
TXMoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQogICAgIGlmIChMSUtFTFkobV9jb2RlIDwgbV9jb2RlRW5kKSkKICAgICAgICAgbV9j
dXJyZW50ID0gKm1fY29kZTsKICAgICBlbHNlCkBAIC0yNzQsMjUgKzI2Miw2IEBAIHZvaWQgTGV4
ZXI6OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJBcmVuYSYgYXJlbmEp
CiAgICAgQVNTRVJUKGN1cnJlbnRPZmZzZXQoKSA9PSBzb3VyY2Uuc3RhcnRPZmZzZXQoKSk7CiB9
CiAKLXZvaWQgTGV4ZXI6OmNvcHlDb2RlV2l0aG91dEJPTXMoKQotewotICAgIC8vIE5vdGU6IElu
IHRoaXMgY2FzZSwgdGhlIGNoYXJhY3RlciBvZmZzZXQgZGF0YSBmb3IgZGVidWdnaW5nIHdpbGwg
YmUgaW5jb3JyZWN0LgotICAgIC8vIElmIGl0J3MgaW1wb3J0YW50IHRvIGNvcnJlY3RseSBkZWJ1
ZyBjb2RlIHdpdGggZXh0cmFuZW91cyBCT01zLCB0aGVuIHRoZSBjYWxsZXIKLSAgICAvLyBzaG91
bGQgc3RyaXAgdGhlIEJPTXMgd2hlbiBjcmVhdGluZyB0aGUgU291cmNlUHJvdmlkZXIgb2JqZWN0
IGFuZCBkbyBpdHMgb3duCi0gICAgLy8gbWFwcGluZyBvZiBvZmZzZXRzIHdpdGhpbiB0aGUgc3Ry
aXBwZWQgdGV4dCB0byBvcmlnaW5hbCB0ZXh0IG9mZnNldC4KLQotICAgIG1fY29kZVdpdGhvdXRC
T01zLnJlc2VydmVDYXBhY2l0eShtX2NvZGVFbmQgLSBtX2NvZGUpOwotICAgIGZvciAoY29uc3Qg
VUNoYXIqIHAgPSBtX2NvZGU7IHAgPCBtX2NvZGVFbmQ7ICsrcCkgewotICAgICAgICBVQ2hhciBj
ID0gKnA7Ci0gICAgICAgIGlmIChjICE9IGJ5dGVPcmRlck1hcmspCi0gICAgICAgICAgICBtX2Nv
ZGVXaXRob3V0Qk9Ncy5hcHBlbmQoYyk7Ci0gICAgfQotICAgIHB0cmRpZmZfdCBzdGFydERlbHRh
ID0gbV9jb2RlU3RhcnQgLSBtX2NvZGU7Ci0gICAgbV9jb2RlID0gbV9jb2RlV2l0aG91dEJPTXMu
ZGF0YSgpOwotICAgIG1fY29kZVN0YXJ0ID0gbV9jb2RlICsgc3RhcnREZWx0YTsKLSAgICBtX2Nv
ZGVFbmQgPSBtX2NvZGVXaXRob3V0Qk9Ncy5kYXRhKCkgKyBtX2NvZGVXaXRob3V0Qk9Ncy5zaXpl
KCk7Ci19Ci0KIEFMV0FZU19JTkxJTkUgdm9pZCBMZXhlcjo6c2hpZnQoKQogewogICAgIC8vIEZh
c3RlciB0aGFuIGFuIGlmLWVsc2Ugc2VxdWVuY2UKQEAgLTExODAsMjYgKzExNDksNiBAQCB2b2lk
IExleGVyOjpjbGVhcigpCiAKIFNvdXJjZUNvZGUgTGV4ZXI6OnNvdXJjZUNvZGUoaW50IG9wZW5C
cmFjZSwgaW50IGNsb3NlQnJhY2UsIGludCBmaXJzdExpbmUpCiB7Ci0gICAgaWYgKG1fY29kZVdp
dGhvdXRCT01zLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIFNvdXJjZUNvZGUobV9zb3VyY2Ut
PnByb3ZpZGVyKCksIG9wZW5CcmFjZSwgY2xvc2VCcmFjZSArIDEsIGZpcnN0TGluZSk7Ci0KLSAg
ICBjb25zdCBVQ2hhciogZGF0YSA9IG1fc291cmNlLT5wcm92aWRlcigpLT5kYXRhKCk7Ci0gICAg
Ci0gICAgQVNTRVJUKG9wZW5CcmFjZSA8IGNsb3NlQnJhY2UpOwotICAgIGludCBpOwotICAgIGZv
ciAoaSA9IG1fc291cmNlLT5zdGFydE9mZnNldCgpOyBpIDwgb3BlbkJyYWNlOyArK2kpIHsKLSAg
ICAgICAgaWYgKGRhdGFbaV0gPT0gYnl0ZU9yZGVyTWFyaykgewotICAgICAgICAgICAgb3BlbkJy
YWNlKys7Ci0gICAgICAgICAgICBjbG9zZUJyYWNlKys7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
Zm9yICg7IGkgPCBjbG9zZUJyYWNlOyArK2kpIHsKLSAgICAgICAgaWYgKGRhdGFbaV0gPT0gYnl0
ZU9yZGVyTWFyaykKLSAgICAgICAgICAgIGNsb3NlQnJhY2UrKzsKLSAgICB9Ci0KLSAgICBBU1NF
UlQob3BlbkJyYWNlIDwgY2xvc2VCcmFjZSk7Ci0KICAgICByZXR1cm4gU291cmNlQ29kZShtX3Nv
dXJjZS0+cHJvdmlkZXIoKSwgb3BlbkJyYWNlLCBjbG9zZUJyYWNlICsgMSwgZmlyc3RMaW5lKTsK
IH0KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZVByb3ZpZGVyLmgg
Yi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaAppbmRleCAxYzU5ZWVkYTQw
NmIxMjIzYmU4MDU4OGE1ZGI2MzUwODVkN2NkNmY1Li44N2VhOTYwOGNjY2I0ZGM3NmZhNzBjZGI5
NDUxMzBiNzViODZiNzMzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNl
UHJvdmlkZXIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlUHJvdmlkZXIuaApA
QCAtMzQsMTMgKzM0LDEwIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi0gICAgZW51bSBTb3VyY2VC
T01QcmVzZW5jZSB7IFNvdXJjZUhhc05vQk9NcywgU291cmNlQ291bGRIYXZlQk9NcyB9OwotCiAg
ICAgY2xhc3MgU291cmNlUHJvdmlkZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxTb3VyY2VQcm92aWRl
cj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgU291cmNlUHJvdmlkZXIoY29uc3QgVVN0cmluZyYg
dXJsLCBTb3VyY2VCT01QcmVzZW5jZSBoYXNCT01zID0gU291cmNlQ291bGRIYXZlQk9NcykKKyAg
ICAgICAgU291cmNlUHJvdmlkZXIoY29uc3QgVVN0cmluZyYgdXJsKQogICAgICAgICAgICAgOiBt
X3VybCh1cmwpCi0gICAgICAgICAgICAsIG1faGFzQk9NcyhoYXNCT01zKQogICAgICAgICB7CiAg
ICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+U291cmNlUHJvdmlkZXIoKSB7IH0KQEAgLTUyLDI5
ICs0OSwzMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgY29uc3QgVVN0cmluZyYgdXJsKCkg
eyByZXR1cm4gbV91cmw7IH0KICAgICAgICAgaW50cHRyX3QgYXNJRCgpIHsgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRoaXMpOyB9CiAKLSAgICAgICAgU291cmNlQk9NUHJlc2Vu
Y2UgaGFzQk9NcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQk9NczsgfQotCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgVVN0cmluZyBtX3VybDsKLSAgICAgICAgU291cmNlQk9NUHJlc2VuY2UgbV9oYXNC
T01zOwogICAgIH07CiAKICAgICBjbGFzcyBVU3RyaW5nU291cmNlUHJvdmlkZXIgOiBwdWJsaWMg
U291cmNlUHJvdmlkZXIgewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
VVN0cmluZ1NvdXJjZVByb3ZpZGVyPiBjcmVhdGUoY29uc3QgVVN0cmluZyYgc291cmNlLCBjb25z
dCBVU3RyaW5nJiB1cmwpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFVTdHJpbmdTb3VyY2VQ
cm92aWRlcj4gY3JlYXRlKGNvbnN0IFVTdHJpbmcmIHNvdXJjZSwgY29uc3QgVVN0cmluZyYgdXJs
LCBib29sIGhhc0JPTXMgPSB0cnVlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFVTdHJpbmdTb3VyY2VQcm92aWRlcihzb3VyY2UsIHVybCkpOworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBVU3RyaW5nU291cmNlUHJvdmlkZXIoc291cmNlLCB1cmws
IGhhc0JPTXMpKTsKICAgICAgICAgfQogCi0gICAgICAgIFVTdHJpbmcgZ2V0UmFuZ2UoaW50IHN0
YXJ0LCBpbnQgZW5kKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS5zdWJzdHIoc3RhcnQsIGVuZCAt
IHN0YXJ0KTsgfQorICAgICAgICBVU3RyaW5nIGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc291cmNlLnN1YnN0cihzdGFy
dCwgZW5kIC0gc3RhcnQpOworICAgICAgICB9CiAgICAgICAgIGNvbnN0IFVDaGFyKiBkYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9zb3VyY2UuZGF0YSgpOyB9CiAgICAgICAgIGludCBsZW5ndGgoKSBj
b25zdCB7IHJldHVybiBtX3NvdXJjZS5zaXplKCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAg
IFVTdHJpbmdTb3VyY2VQcm92aWRlcihjb25zdCBVU3RyaW5nJiBzb3VyY2UsIGNvbnN0IFVTdHJp
bmcmIHVybCkKKyAgICAgICAgVVN0cmluZ1NvdXJjZVByb3ZpZGVyKGNvbnN0IFVTdHJpbmcmIHNv
dXJjZSwgY29uc3QgVVN0cmluZyYgdXJsLCBib29sIGhhc0JPTXMpCiAgICAgICAgICAgICA6IFNv
dXJjZVByb3ZpZGVyKHVybCkKICAgICAgICAgICAgICwgbV9zb3VyY2Uoc291cmNlKQogICAgICAg
ICB7CisgICAgICAgICAgICBpZiAoaGFzQk9NcyAmJiBtX3NvdXJjZS5zaXplKCkpIHsKKyAgICAg
ICAgICAgICAgICBib29sIHNjcmF0Y2ggPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBtX3NvdXJj
ZSA9IFVTdHJpbmcobV9zb3VyY2UucmVwKCktPmNvcHlTdHJpbmdXaXRob3V0Qk9NcyhmYWxzZSwg
c2NyYXRjaCkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgVVN0cmluZyBt
X3NvdXJjZTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
aCBiL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAppbmRleCAyNDQwMDlmNmRi
NWYwYTYyMzJjOTk5YWQxM2UzOTRlZGM3OTVmODM5Li42N2E0OTY0ZTYyZTI4ODE2MGM2NTZlNDRl
NTU4ZGU0ZjkwMGI3MDI4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJp
bmdJbXBsLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCkBAIC0y
NTcsNiArMjU3LDM2IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1lbWNweShkZXN0aW5hdGlvbiwg
c291cmNlLCBudW1DaGFyYWN0ZXJzICogc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCisgICAgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBjb3B5U3RyaW5nV2l0aG91dEJPTXMoYm9vbCBkZWZpbml0ZWx5
SGFzQk9NcywgYm9vbCYgaGFzQk9NcykKKyAgICB7CisgICAgICAgIHN0YXRpYyBjb25zdCBVQ2hh
ciBieXRlT3JkZXJNYXJrID0gMHhGRUZGOworICAgICAgICAKKyAgICAgICAgaWYgKCFkZWZpbml0
ZWx5SGFzQk9NcykgeworICAgICAgICAgICAgaGFzQk9NcyA9IGZhbHNlOworICAgICAgICAgICAg
Ly8gRUNNQS0yNjIgY2FsbHMgZm9yIHN0cmlwcGluZyBhbGwgQ2YgY2hhcmFjdGVycywgYnV0IHdl
IG9ubHkgc3RyaXAgQk9NIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAvLyBTZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTMxPiBmb3IgZGV0YWlscy4KKyAgICAg
ICAgICAgIGNvbnN0IHNpemVfdCBsZW4gPSBtX2xlbmd0aDsKKyAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBpZiAoVU5MSUtFTFko
bV9kYXRhW2ldID09IGJ5dGVPcmRlck1hcmspKSB7CisgICAgICAgICAgICAgICAgICAgIGhhc0JP
TXMgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIWhhc0JPTXMpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAgICAgY29uc3Qgc2l6ZV90IGxlbiA9IG1f
bGVuZ3RoOworICAgICAgICBWZWN0b3I8VUNoYXI+IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0LnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobGVuKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBsZW47IGkrKykgeworICAgICAgICAgICAgVUNoYXIgYyA9IG1fZGF0YVtpXTsKKyAgICAgICAg
ICAgIGlmIChjICE9IGJ5dGVPcmRlck1hcmspCisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChjKTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQuc2hyaW5rVG9GaXQoKTsKKyAgICAgICAg
cmV0dXJuIFN0cmluZ0ltcGw6OmFkb3B0KHJlc3VsdCk7CisgICAgfQorCiAgICAgLy8gUmV0dXJu
cyBhIFN0cmluZ0ltcGwgc3VpdGFibGUgZm9yIHVzZSBvbiBhbm90aGVyIHRocmVhZC4KICAgICBQ
YXNzUmVmUHRyPFN0cmluZ0ltcGw+IGNyb3NzVGhyZWFkU3RyaW5nKCk7CiAgICAgLy8gTWFrZXMg
YSBkZWVwIGNvcHkuIEhlbHBmdWwgb25seSBpZiB5b3UgbmVlZCB0byB1c2UgYSBTdHJpbmcgb24g
YW5vdGhlciB0aHJlYWQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggYzdhOTA3YjA4NzVhZTc0NDdkMjViZmY5YmRmYzQyYWJhZjQzOTBiNC4u
M2ExMmU2YWViMjgyNGRiMjFlZTM5MTBhNmQ3YWIzOWFlYTk0NGRkMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAor
MjAxMC0wNy0wMiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgQk9NIGhhbmRsaW5nIG91
dCBvZiB0aGUgbGV4ZXIgYW5kIHBhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDE1MzkKKworICAgICAgICBVcGRhdGUgV2ViQ29yZSB0byBlbnN1
cmUgdGhhdCBTb3VyY2VQcm92aWRlcnMgZG9uJ3QKKyAgICAgICAgcHJvZHVjZSBzdHJpbmdzIHdp
dGggQk9NcyBpbiB0aGVtLgorCisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0U291cmNlUHJv
dmlkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdFNvdXJjZVByb3ZpZGVyOjpTY3JpcHRT
b3VyY2VQcm92aWRlcik6CisgICAgICAgICogYmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlk
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ1NvdXJjZVByb3ZpZGVyOjpTdHJpbmdTb3Vy
Y2VQcm92aWRlcik6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRTY3JpcHQ6OkNhY2hlZFNjcmlwdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDYWNoZWRTY3JpcHQ6OnNjcmlwdCk6CisgICAgICAgICogbG9hZGVyL0NhY2hlZFNjcmlwdC5o
OgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkU2NyaXB0OjopOgorICAgICAgICAgIENhY2hlZFNj
cmlwdCBub3cgc3RvcmVzIGRlY29kZWQgZGF0YSB3aXRoIHRoZSBCT01zIHN0cmlwcGVkLAorICAg
ICAgICAgIGFuZCBjYWNoZXMgdGhlIHByZXNlbmNlIG9mIEJPTXMgYWNyb3NzIG1lbW9yeSBwdXJn
ZXMuCisKIDIwMTAtMDctMDIgIEFiaGlzaGVrIEFyeWEgIDxpbmZlcm5vQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL1NjcmlwdFNvdXJjZVByb3ZpZGVyLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdFNvdXJjZVByb3ZpZGVyLmgKaW5kZXggM2ZlMzU4NGUyNmJkZjIzZmQ4YTQ1MWY0MDY2
YmM4MzhiMjFjNmU0Mi4uMjE0NDE2OWQ4OTIzY2Y2MzYwMWQ0MmNjOTQ0YjY5MzBmZWFiZDI1NSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRTb3VyY2VQcm92aWRlci5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0U291cmNlUHJvdmlkZXIuaApAQCAtMzUsOCAr
MzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBTY3JpcHRTb3VyY2VQcm92
aWRlciA6IHB1YmxpYyBKU0M6OlNvdXJjZVByb3ZpZGVyIHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IFNjcmlwdFNvdXJjZVByb3ZpZGVyKGNvbnN0IEpTQzo6VVN0cmluZyYgdXJsLCBKU0M6OlNvdXJj
ZUJPTVByZXNlbmNlIGhhc0JPTXMgPSBKU0M6OlNvdXJjZUNvdWxkSGF2ZUJPTXMpCi0gICAgICAg
ICAgICA6IFNvdXJjZVByb3ZpZGVyKHVybCwgaGFzQk9NcykKKyAgICAgICAgU2NyaXB0U291cmNl
UHJvdmlkZXIoY29uc3QgSlNDOjpVU3RyaW5nJiB1cmwpCisgICAgICAgICAgICA6IFNvdXJjZVBy
b3ZpZGVyKHVybCkKICAgICAgICAgewogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvanMvU3RyaW5nU291cmNlUHJvdmlkZXIuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMv
U3RyaW5nU291cmNlUHJvdmlkZXIuaAppbmRleCA0NzhjMWQxOTFlZmNlZmZlOWQwZDgyMGNmNzEy
MTFiYWUyNGZjYzI3Li4yYTE4MDA2MmY3ZTgwMDIwODQ3NGM1NzJhY2Y4OWRiZWZjOTc5YjFmIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL1N0cmluZ1NvdXJjZVByb3ZpZGVyLmgKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9TdHJpbmdTb3VyY2VQcm92aWRlci5oCkBAIC00OSw2ICs0
OSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICA6IFNjcmlwdFNvdXJjZVBy
b3ZpZGVyKHN0cmluZ1RvVVN0cmluZyh1cmwpKQogICAgICAgICAgICAgLCBtX3NvdXJjZShzb3Vy
Y2UpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3NvdXJjZS5sZW5ndGgoKSkgeworICAg
ICAgICAgICAgICAgIGJvb2wgc2NyYXRjaCA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1fc291
cmNlID0gU3RyaW5nKHNvdXJjZS5pbXBsKCktPmNvcHlTdHJpbmdXaXRob3V0Qk9NcyhmYWxzZSwg
c2NyYXRjaCkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBT
dHJpbmcgbV9zb3VyY2U7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQu
Y3BwIGIvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmNwcAppbmRleCA0NjZhNWU5NjNlNGY1
NDJmN2I5NjdmYzIyMDRiZmE5NDlhNWQwNDVhLi4xZDNhNDNiNDEyYzliZTM2ZTI0MTZhNGZhZjM4
M2VmMGIzNjc3OGQxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9DYWNoZWRTY3JpcHQuY3Bw
CisrKyBiL1dlYkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5jcHAKQEAgLTM3LDYgKzM3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBDYWNoZWRTY3JpcHQ6OkNhY2hlZFNjcmlwdChjb25zdCBT
dHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0KQogICAgIDogQ2FjaGVkUmVzb3VyY2Uo
dXJsLCBTY3JpcHQpCisgICAgLCBtX3NjcmlwdEhhc0JPTXMoU291cmNlQ291bGRIYXZlQk9NcykK
ICAgICAsIG1fZGVjb2RlcihUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoImFwcGxpY2F0aW9u
L2phdmFzY3JpcHQiLCBjaGFyc2V0KSkKICAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVy
KHRoaXMsICZDYWNoZWRTY3JpcHQ6OmRlY29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKQogewpA
QCAtNzgsNiArNzksMTEgQEAgY29uc3QgU3RyaW5nJiBDYWNoZWRTY3JpcHQ6OnNjcmlwdCgpCiAg
ICAgaWYgKCFtX3NjcmlwdCAmJiBtX2RhdGEpIHsKICAgICAgICAgbV9zY3JpcHQgPSBtX2RlY29k
ZXItPmRlY29kZShtX2RhdGEtPmRhdGEoKSwgZW5jb2RlZFNpemUoKSk7CiAgICAgICAgIG1fc2Ny
aXB0ICs9IG1fZGVjb2Rlci0+Zmx1c2goKTsKKyAgICAgICAgaWYgKG1fc2NyaXB0SGFzQk9NcyAm
JiBtX3NjcmlwdC5sZW5ndGgoKSkgeworICAgICAgICAgICAgYm9vbCBoYXNCT01zID0gZmFsc2U7
CisgICAgICAgICAgICBtX3NjcmlwdCA9IFN0cmluZyhtX3NjcmlwdC5pbXBsKCktPmNvcHlTdHJp
bmdXaXRob3V0Qk9NcyhtX3NjcmlwdEhhc0JPTXMgPT0gU291cmNlSGFzQk9NcywgaGFzQk9Ncykp
OworICAgICAgICAgICAgbV9zY3JpcHRIYXNCT01zID0gaGFzQk9NcyA/IFNvdXJjZUhhc0JPTXMg
OiBTb3VyY2VIYXNOb0JPTXM7CisgICAgICAgIH0KICAgICAgICAgc2V0RGVjb2RlZFNpemUobV9z
Y3JpcHQubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvbG9hZGVyL0NhY2hlZFNjcmlwdC5oIGIvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0
LmgKaW5kZXggMTNhZmE4OTk1NzQxNGFlNjE0YTNhOTcxN2VmZjI3ZDNhOWE4Zjk4Ny4uMjM3NDQw
OTc1ODA0ZDYzMTA1YzdlODZjZWUwMmYyZWMxY2I5M2U5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9s
b2FkZXIvQ2FjaGVkU2NyaXB0LmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvQ2FjaGVkU2NyaXB0LmgK
QEAgLTU5LDYgKzU5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRlY29k
ZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKFRpbWVyPENhY2hlZFNjcmlwdD4qKTsKIAogICAgICAg
ICBTdHJpbmcgbV9zY3JpcHQ7CisgICAgICAgIGVudW0geyBTb3VyY2VIYXNOb0JPTXMsIFNvdXJj
ZUNvdWxkSGF2ZUJPTXMsIFNvdXJjZUhhc0JPTXMgfSBtX3NjcmlwdEhhc0JPTXM7CiAgICAgICAg
IFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBtX2RlY29kZXI7CiAgICAgICAgIFRpbWVyPENh
Y2hlZFNjcmlwdD4gbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXI7CiAgICAgfTsK
</data>
<flag name="review"
          id="47871"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>