<?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>28667</bug_id>
          
          <creation_ts>2009-08-23 01:27:26 -0700</creation_ts>
          <short_desc>Make XSSAuditor go fast</short_desc>
          <delta_ts>2009-08-28 01:08:12 -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>XSSAuditor</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>dbates</cc>
    
    <cc>fishd</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>142202</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-23 01:27:26 -0700</bug_when>
    <thetext>Enabling the XSSAuditor slows down the intl1 page cycler slightly slower.  We should make the auditor go faster.  Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142203</commentid>
    <comment_count>1</comment_count>
      <attachid>38449</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-23 01:31:36 -0700</bug_when>
    <thetext>Created attachment 38449
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142204</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-23 01:37:57 -0700</bug_when>
    <thetext>Here are the perf numbers from my laptop (two runs for each condition, 15 cycles per run, warm disk cache):

XSSAuditor disabled: 187.91, 188.07
XSSAuditor enabled (old): 191.60, 192.17
XSSAuditor enabled (new): 189.14, 189.85

By my calculations, the old auditor slowed down intl1 by 2% whereas the new auditor only slows it down by 0.8%.  It&apos;s possible there is more room for optimization, but this change seems worth doing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142211</commentid>
    <comment_count>3</comment_count>
      <attachid>38449</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-08-23 01:48:22 -0700</bug_when>
    <thetext>Comment on attachment 38449
Patch v1

Rather than dropping the &quot;const&quot; from all of these functions that are conceptually cons I think it make more sense to mark m_memoizer as mutable instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142234</commentid>
    <comment_count>4</comment_count>
      <attachid>38449</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-23 10:05:24 -0700</bug_when>
    <thetext>Comment on attachment 38449
Patch v1

Actually, I screwed up the memoization too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>142235</commentid>
    <comment_count>5</comment_count>
      <attachid>38454</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-23 10:51:18 -0700</bug_when>
    <thetext>Created attachment 38454
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143310</commentid>
    <comment_count>6</comment_count>
      <attachid>38454</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-27 23:28:29 -0700</bug_when>
    <thetext>Comment on attachment 38454
Patch v1

LGTM.

I&apos;ve got 2 nits though:

1. You mentioned that this is not technically &quot;memoization&quot; but rather caching.  If so, let&apos;s call it CachingURLCanonicalizer and m_cachedURL (and maybe m_inputURL?)

2.  seems strange to change some decodeHTMLentities to decodeEntities and others to decodeHTMLEntities.  Pick one. :)  I suggest &quot;decodeEntities&quot;.

I don&apos;t need to see this again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>143325</commentid>
    <comment_count>7</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-08-28 01:08:12 -0700</bug_when>
    <thetext>Committed r47858: &lt;http://trac.webkit.org/changeset/47858&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38449</attachid>
            <date>2009-08-23 01:31:36 -0700</date>
            <delta_ts>2009-08-23 10:50:44 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-28667-20090823013135.patch</filename>
            <type>text/plain</type>
            <size>11914</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzY4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDktMDgtMjMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IFhTU0F1ZGl0b3IgZ28gZmFzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mjg2NjcKKworICAgICAgICBNYWtlIHRoZSBYU1NBdWRpdG9yIGdvIGZhc3Rl
ciBieSBpbXBsZW1lbnRpbmcgdHdvIG9wdGltaXphdGlvbnM6CisKKyAgICAgICAgMSkgV2UgYXZv
aWQgY2Fub25pY2FsaXppbmcgc2NyaXB0cyB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgcGFnZSdz
IFVSTC4KKyAgICAgICAgICAgVGhpcyBzYXZlcyBhIGJ1bmNoIG9mIHRpbWUgZm9yIGxhcmdlIGlu
bGluZSBzY3JpcHRzLgorCisgICAgICAgIDIpIFdlIG1lbW9pemUgY2Fub25pY2FsaXppbmcgdGhl
IHBhZ2UncyBVUkwgYmVjYXVzZSBpdCdzIHNpbGx5IHRvCisgICAgICAgICAgIGNhbm9uaWNhbGl6
ZSByZXBlYXRlZCBmb3IgZWFjaCBpbmxpbmUgZXZlbnQgbGlzdGVuZXIuCisKKyAgICAgICAgVGhl
c2Ugb3B0aW1pemF0aW9ucyBoYXZlIGEgbWVhc3VyYWJsZSBhZmZlY3Qgb24gdGhlIGludGwxIHBh
Z2UgY3ljbGVyLgorCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBh
Z2UvWFNTQXVkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpNZW1vaXpp
bmdVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxpemVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
WFNTQXVkaXRvcjo6Y2FuRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6
Y2FuRXZhbHVhdGVKYXZhU2NyaXB0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6
OmNhbkNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6Y2FuTG9hZEV4dGVybmFsU2NyaXB0RnJvbVNyYyk6CisgICAgICAgIChXZWJDb3JlOjpY
U1NBdWRpdG9yOjpjYW5Mb2FkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6
OmNhblNldEJhc2VFbGVtZW50VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRl
Y29kZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaW5kSW5SZXF1ZXN0KToK
KyAgICAgICAgKiBwYWdlL1hTU0F1ZGl0b3IuaDoKKwogMjAwOS0wOC0yMiAgTWFydGluIFJvYmlu
c29uICA8bWFydGluLmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBYYW4gTG9wZXouCkluZGV4OiBXZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL1hTU0F1ZGl0b3IuY3BwCShyZXZpc2lvbiA0NzUzOSkKKysr
IFdlYkNvcmUvcGFnZS9YU1NBdWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYs
MTUgQEAgc3RhdGljIGJvb2wgaXNOb25DYW5vbmljYWxDaGFyYWN0ZXIoVUNoYQogICAgIHJldHVy
biAoYyA9PSAnXFwnIHx8IGMgPT0gJzAnIHx8IGMgPCAnICcgfHwgYyA9PSAxMjcpOwogfQogCitT
dHJpbmcgWFNTQXVkaXRvcjo6TWVtb2l6aW5nVVJMQ2Fub25pY2FsaXplcjo6Y2Fub25pY2FsaXpl
VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBib29s
IGRlY29kZUhUTUxFbnRpdGllcykKK3sKKyAgICBpZiAoZGVjb2RlSFRNTEVudGl0aWVzID09IG1f
ZGVjb2RlSFRNTEVudGl0aWVzICYmIGVuY29kaW5nID09IG1fZW5jb2RpbmcgJiYgdXJsID09IG1f
dXJsKQorICAgICAgICByZXR1cm4gbV9tZW1vaXplZFJlc3VsdDsKKworICAgIG1fbWVtb2l6ZWRS
ZXN1bHQgPSBjYW5vbmljYWxpemUoZGVjb2RlVVJMKHVybCwgZW5jb2RpbmcsIGRlY29kZUhUTUxF
bnRpdGllcykpOworICAgIHJldHVybiBtX21lbW9pemVkUmVzdWx0OworfQorCiBYU1NBdWRpdG9y
OjpYU1NBdWRpdG9yKEZyYW1lKiBmcmFtZSkKICAgICA6IG1fZnJhbWUoZnJhbWUpCiB7CkBAIC03
MSw3ICs4MCw3IEBAIGJvb2wgWFNTQXVkaXRvcjo6aXNFbmFibGVkKCkgY29uc3QKICAgICByZXR1
cm4gKHNldHRpbmdzICYmIHNldHRpbmdzLT54c3NBdWRpdG9yRW5hYmxlZCgpKTsKIH0KIAotYm9v
bCBYU1NBdWRpdG9yOjpjYW5FdmFsdWF0ZShjb25zdCBTdHJpbmcmIGNvZGUpIGNvbnN0Citib29s
IFhTU0F1ZGl0b3I6OmNhbkV2YWx1YXRlKGNvbnN0IFN0cmluZyYgY29kZSkKIHsKICAgICBpZiAo
IWlzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTg0LDcgKzkzLDcgQEAgYm9v
bCBYU1NBdWRpdG9yOjpjYW5FdmFsdWF0ZShjb25zdCBTdHJpbgogICAgIHJldHVybiB0cnVlOwog
fQogCi1ib29sIFhTU0F1ZGl0b3I6OmNhbkV2YWx1YXRlSmF2YVNjcmlwdFVSTChjb25zdCBTdHJp
bmcmIGNvZGUpIGNvbnN0Citib29sIFhTU0F1ZGl0b3I6OmNhbkV2YWx1YXRlSmF2YVNjcmlwdFVS
TChjb25zdCBTdHJpbmcmIGNvZGUpCiB7CiAgICAgaWYgKCFpc0VuYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC05Nyw3ICsxMDYsNyBAQCBib29sIFhTU0F1ZGl0b3I6OmNhbkV2YWx1
YXRlSmF2YVNjcmlwdFVSCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6
Y2FuQ3JlYXRlSW5saW5lRXZlbnRMaXN0ZW5lcihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcm
IGNvZGUpIGNvbnN0Citib29sIFhTU0F1ZGl0b3I6OmNhbkNyZWF0ZUlubGluZUV2ZW50TGlzdGVu
ZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJiBjb2RlKQogewogICAgIGlmICghaXNFbmFi
bGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTEwLDcgKzExOSw3IEBAIGJvb2wgWFNT
QXVkaXRvcjo6Y2FuQ3JlYXRlSW5saW5lRXZlbnRMaXMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
Ym9vbCBYU1NBdWRpdG9yOjpjYW5Mb2FkRXh0ZXJuYWxTY3JpcHRGcm9tU3JjKGNvbnN0IFN0cmlu
ZyYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Citib29sIFhTU0F1ZGl0b3I6OmNh
bkxvYWRFeHRlcm5hbFNjcmlwdEZyb21TcmMoY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBT
dHJpbmcmIHVybCkKIHsKICAgICBpZiAoIWlzRW5hYmxlZCgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKQEAgLTEyMyw3ICsxMzIsNyBAQCBib29sIFhTU0F1ZGl0b3I6OmNhbkxvYWRFeHRlcm5hbFNj
cmlwdEZyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6Y2FuTG9hZE9i
amVjdChjb25zdCBTdHJpbmcmIHVybCkgY29uc3QKK2Jvb2wgWFNTQXVkaXRvcjo6Y2FuTG9hZE9i
amVjdChjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICBpZiAoIWlzRW5hYmxlZCgpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKQEAgLTEzNiw3ICsxNDUsNyBAQCBib29sIFhTU0F1ZGl0b3I6OmNhbkxv
YWRPYmplY3QoY29uc3QgU3RyCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgWFNTQXVkaXRv
cjo6Y2FuU2V0QmFzZUVsZW1lbnRVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0Citib29sIFhT
U0F1ZGl0b3I6OmNhblNldEJhc2VFbGVtZW50VVJMKGNvbnN0IFN0cmluZyYgdXJsKQogewogICAg
IGlmICghaXNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTU2LDcgKzE2NSw3
IEBAIFN0cmluZyBYU1NBdWRpdG9yOjpjYW5vbmljYWxpemUoY29uc3QgU3QKICAgICByZXR1cm4g
cmVzdWx0LnJlbW92ZUNoYXJhY3RlcnMoJmlzTm9uQ2Fub25pY2FsQ2hhcmFjdGVyKTsKIH0KIAot
U3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZVVSTChjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3Qg
VGV4dEVuY29kaW5nJiBlbmNvZGluZywgYm9vbCBkZWNvZGVIVE1MZW50aXRpZXMpCitTdHJpbmcg
WFNTQXVkaXRvcjo6ZGVjb2RlVVJMKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBUZXh0RW5j
b2RpbmcmIGVuY29kaW5nLCBib29sIGRlY29kZUVudGl0aWVzKQogewogICAgIFN0cmluZyByZXN1
bHQ7CiAgICAgU3RyaW5nIHVybCA9IHN0cmluZzsKQEAgLTE2Niw3ICsxNzUsNyBAQCBTdHJpbmcg
WFNTQXVkaXRvcjo6ZGVjb2RlVVJMKGNvbnN0IFN0cmluCiAgICAgU3RyaW5nIGRlY29kZWRSZXN1
bHQgPSBlbmNvZGluZy5kZWNvZGUocmVzdWx0LnV0ZjgoKS5kYXRhKCksIHJlc3VsdC5sZW5ndGgo
KSk7CiAgICAgaWYgKCFkZWNvZGVkUmVzdWx0LmlzRW1wdHkoKSkKICAgICAgICAgcmVzdWx0ID0g
ZGVjb2RlZFJlc3VsdDsKLSAgICBpZiAoZGVjb2RlSFRNTGVudGl0aWVzKQorICAgIGlmIChkZWNv
ZGVFbnRpdGllcykKICAgICAgICAgcmVzdWx0ID0gZGVjb2RlSFRNTEVudGl0aWVzKHJlc3VsdCk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIwOCwzMSArMjE3LDQ4IEBAIFN0cmluZyBYU1NB
dWRpdG9yOjpkZWNvZGVIVE1MRW50aXRpZXMoY28KICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChy
ZXN1bHQpOwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmZpbmRJblJlcXVlc3QoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGJvb2wgZGVjb2RlSFRNTGVudGl0aWVzKSBjb25zdAorYm9vbCBYU1NBdWRpdG9y
OjpmaW5kSW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGRlY29kZUhUTUxFbnRp
dGllcykKIHsKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIEZyYW1lKiBwYXJlbnRGcmFt
ZSA9IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgaWYgKHBhcmVudEZyYW1lICYmIG1f
ZnJhbWUtPmRvY3VtZW50KCktPnVybCgpID09IGJsYW5rVVJMKCkpCi0gICAgICAgIHJlc3VsdCA9
IGZpbmRJblJlcXVlc3QocGFyZW50RnJhbWUsIHN0cmluZywgZGVjb2RlSFRNTGVudGl0aWVzKTsK
KyAgICAgICAgcmVzdWx0ID0gZmluZEluUmVxdWVzdChwYXJlbnRGcmFtZSwgc3RyaW5nLCBkZWNv
ZGVIVE1MRW50aXRpZXMpOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXN1bHQgPSBmaW5k
SW5SZXF1ZXN0KG1fZnJhbWUsIHN0cmluZywgZGVjb2RlSFRNTGVudGl0aWVzKTsKKyAgICAgICAg
cmVzdWx0ID0gZmluZEluUmVxdWVzdChtX2ZyYW1lLCBzdHJpbmcsIGRlY29kZUhUTUxFbnRpdGll
cyk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaW5kSW5SZXF1
ZXN0KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgZGVjb2RlSFRNTGVu
dGl0aWVzKSBjb25zdAorYm9vbCBYU1NBdWRpdG9yOjpmaW5kSW5SZXF1ZXN0KEZyYW1lKiBmcmFt
ZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgZGVjb2RlSFRNTEVudGl0aWVzKQogewogICAg
IEFTU0VSVChmcmFtZS0+ZG9jdW1lbnQoKSk7Ci0gICAgU3RyaW5nIHBhZ2VVUkwgPSBmcmFtZS0+
ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAKICAgICBpZiAoIWZyYW1lLT5kb2N1bWVudCgp
LT5kZWNvZGVyKCkpIHsKICAgICAgICAgLy8gTm90ZSwgSmF2YVNjcmlwdCBVUkxzIGRvIG5vdCBo
YXZlIGEgY2hhcnNldC4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChw
cm90b2NvbElzKHBhZ2VVUkwsICJkYXRhIikpCisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQorICAgIEZv
cm1EYXRhKiBmb3JtRGF0YU9iaiA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+
b3JpZ2luYWxSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKyAgICBTdHJpbmcgcGFnZVVSTCA9IGZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKKworICAgIGlmICghZm9ybURhdGFPYmogJiYg
c3RyaW5nLmxlbmd0aCgpID49IDIgKiBwYWdlVVJMLmxlbmd0aCgpKSB7CisgICAgICAgIC8vIFE6
IFdoeSBkbyB3ZSBib3RoZXIgdG8gZG8gdGhpcyBjaGVjayBhdCBhbGw/CisgICAgICAgIC8vIEE6
IENhbm9uaWNhbGl6aW5nIGxhcmdlIGlubGluZSBzY3JpcHRzIGNhbiBiZSBleHBlbnNpdmUuICBX
ZSB3YW50IHRvCisgICAgICAgIC8vICAgIGJhaWwgb3V0IGJlZm9yZSB0aGUgY2FsbCB0byBjYW5v
bmljYWxpemUgYmVsb3csIHdoaWNoIGNvdWxkCisgICAgICAgIC8vICAgIHJlc3VsdCBpbiBhbiB1
bm5lZWRlZCBhbGxvY2F0aW9uIGFuZCBtZW1jcHkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFE6
IFdoeSBkbyB3ZSBtdWx0aXBseSBieSB0d28gaGVyZT8KKyAgICAgICAgLy8gQTogV2UgYXR0ZW1w
dCB0byBkZXRlY3QgcmVmbGVjdGVkIFhTUyBldmVuIHdoZW4gdGhlIHNlcnZlcgorICAgICAgICAv
LyAgICB0cmFuc2Zvcm1zIHRoZSBhdHRhY2tlcidzIGlucHV0IHdpdGggYWRkU2xhc2hlcy4gIFRo
ZSBiZXN0IHRoZQorICAgICAgICAvLyAgICBhdHRhY2tlciBjYW4gZG8gZ2V0IHRoZSBzZXJ2ZXIg
dG8gaW5mbGF0ZSBoaXMvaGVyIGlucHV0IGJ5IGEKKyAgICAgICAgLy8gICAgZmFjdG9yIG9mIHR3
byBieSBzZW5kaW5nICIgY2hhcmFjdGVycywgd2hpY2ggdGhlIHNlcnZlcgorICAgICAgICAvLyAg
ICB0cmFuc2Zvcm1zIHRvIFwiLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5wcm90b2NvbElzKCJkYXRhIikpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIFN0cmluZyBjYW5vbmljYWxpemVkU3RyaW5nID0gY2Fub25p
Y2FsaXplKHN0cmluZyk7CkBAIC0yNDEsMTIgKzI2NywxMSBAQCBib29sIFhTU0F1ZGl0b3I6OmZp
bmRJblJlcXVlc3QoRnJhbWUqIGZyCiAKICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIDwgcGFnZVVS
TC5sZW5ndGgoKSkgewogICAgICAgICAvLyBUaGUgc3RyaW5nIGNhbiBhY3R1YWxseSBmaXQgaW5z
aWRlIHRoZSBwYWdlVVJMLgotICAgICAgICBTdHJpbmcgZGVjb2RlZFBhZ2VVUkwgPSBjYW5vbmlj
YWxpemUoZGVjb2RlVVJMKHBhZ2VVUkwsIGZyYW1lLT5kb2N1bWVudCgpLT5kZWNvZGVyKCktPmVu
Y29kaW5nKCksIGRlY29kZUhUTUxlbnRpdGllcykpOworICAgICAgICBTdHJpbmcgZGVjb2RlZFBh
Z2VVUkwgPSBtX21lbW9pemVyLmNhbm9uaWNhbGl6ZVVSTChwYWdlVVJMLCBmcmFtZS0+ZG9jdW1l
bnQoKS0+ZGVjb2RlcigpLT5lbmNvZGluZygpLCBkZWNvZGVIVE1MRW50aXRpZXMpOwogICAgICAg
ICBpZiAoZGVjb2RlZFBhZ2VVUkwuZmluZChjYW5vbmljYWxpemVkU3RyaW5nLCAwLCBmYWxzZSkg
IT0gLTEpCiAgICAgICAgICAgIHJldHVybiB0cnVlOyAgLy8gV2UndmUgZm91bmQgdGhlIHNtb2tp
bmcgZ3VuLgogICAgIH0KIAotICAgIEZvcm1EYXRhKiBmb3JtRGF0YU9iaiA9IGZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+b3JpZ2luYWxSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKICAg
ICBpZiAoZm9ybURhdGFPYmogJiYgIWZvcm1EYXRhT2JqLT5pc0VtcHR5KCkpIHsKICAgICAgICAg
U3RyaW5nIGZvcm1EYXRhID0gZm9ybURhdGFPYmotPmZsYXR0ZW5Ub1N0cmluZygpOwogICAgICAg
ICBpZiAoc3RyaW5nLmxlbmd0aCgpIDwgZm9ybURhdGEubGVuZ3RoKCkpIHsKQEAgLTI1NCw3ICsy
NzksNyBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbmRJblJlcXVlc3QoRnJhbWUqIGZyCiAgICAgICAg
ICAgICAvLyB0aGUgdXJsLWVuY29kZWQgUE9TVCBkYXRhIGJlY2F1c2UgdGhlIGxlbmd0aCBvZiB0
aGUgdXJsLWRlY29kZWQKICAgICAgICAgICAgIC8vIGNvZGUgaXMgbGVzcyB0aGFuIG9yIGVxdWFs
IHRvIHRoZSBsZW5ndGggb2YgdGhlIHVybC1lbmNvZGVkCiAgICAgICAgICAgICAvLyBzdHJpbmcu
Ci0gICAgICAgICAgICBTdHJpbmcgZGVjb2RlZEZvcm1EYXRhID0gY2Fub25pY2FsaXplKGRlY29k
ZVVSTChmb3JtRGF0YSwgZnJhbWUtPmRvY3VtZW50KCktPmRlY29kZXIoKS0+ZW5jb2RpbmcoKSwg
ZGVjb2RlSFRNTGVudGl0aWVzKSk7CisgICAgICAgICAgICBTdHJpbmcgZGVjb2RlZEZvcm1EYXRh
ID0gbV9tZW1vaXplci5jYW5vbmljYWxpemVVUkwoZm9ybURhdGEsIGZyYW1lLT5kb2N1bWVudCgp
LT5kZWNvZGVyKCktPmVuY29kaW5nKCksIGRlY29kZUhUTUxFbnRpdGllcyk7CiAgICAgICAgICAg
ICBpZiAoZGVjb2RlZEZvcm1EYXRhLmZpbmQoY2Fub25pY2FsaXplZFN0cmluZywgMCwgZmFsc2Up
ICE9IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAgLy8gV2UgZm91bmQgdGhlIHN0
cmluZyBpbiB0aGUgUE9TVCBkYXRhLgogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvWFNT
QXVkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9YU1NBdWRpdG9yLmgJKHJldmlz
aW9uIDQ3NTM5KQorKysgV2ViQ29yZS9wYWdlL1hTU0F1ZGl0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNDUgKzcyLDYwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBEZXRl
cm1pbmVzIHdoZXRoZXIgdGhlIHNjcmlwdCBzaG91bGQgYmUgYWxsb3dlZCBvciBkZW5pZWQgZXhl
Y3V0aW9uCiAgICAgICAgIC8vIGJhc2VkIG9uIHRoZSBjb250ZW50IG9mIGFueSB1c2VyLXN1Ym1p
dHRlZCBkYXRhLgotICAgICAgICBib29sIGNhbkV2YWx1YXRlKGNvbnN0IFN0cmluZyYgY29kZSkg
Y29uc3Q7CisgICAgICAgIGJvb2wgY2FuRXZhbHVhdGUoY29uc3QgU3RyaW5nJiBjb2RlKTsKIAog
ICAgICAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIEphdmFTY3JpcHQgVVJMIHNob3VsZCBi
ZSBhbGxvd2VkIG9yIGRlbmllZCBleGVjdXRpb24KICAgICAgICAgLy8gYmFzZWQgb24gdGhlIGNv
bnRlbnQgb2YgYW55IHVzZXItc3VibWl0dGVkIGRhdGEuCi0gICAgICAgIGJvb2wgY2FuRXZhbHVh
dGVKYXZhU2NyaXB0VVJMKGNvbnN0IFN0cmluZyYgY29kZSkgY29uc3Q7CisgICAgICAgIGJvb2wg
Y2FuRXZhbHVhdGVKYXZhU2NyaXB0VVJMKGNvbnN0IFN0cmluZyYgY29kZSk7CiAKICAgICAgICAg
Ly8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBldmVudCBsaXN0ZW5lciBzaG91bGQgYmUgY3JlYXRl
ZCBiYXNlZCBvbiB0aGUKICAgICAgICAgLy8gY29udGVudCBvZiBhbnkgdXNlci1zdWJtaXR0ZWQg
ZGF0YS4KLSAgICAgICAgYm9vbCBjYW5DcmVhdGVJbmxpbmVFdmVudExpc3RlbmVyKGNvbnN0IFN0
cmluZyYgZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIGNvZGUpIGNvbnN0OworICAgICAgICBi
b29sIGNhbkNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIoY29uc3QgU3RyaW5nJiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFN0cmluZyYgY29kZSk7CiAKICAgICAgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVy
IHRoZSBleHRlcm5hbCBzY3JpcHQgc2hvdWxkIGJlIGxvYWRlZCBiYXNlZCBvbiB0aGUKICAgICAg
ICAgLy8gY29udGVudCBvZiBhbnkgdXNlci1zdWJtaXR0ZWQgZGF0YS4KLSAgICAgICAgYm9vbCBj
YW5Mb2FkRXh0ZXJuYWxTY3JpcHRGcm9tU3JjKGNvbnN0IFN0cmluZyYgY29udGV4dCwgY29uc3Qg
U3RyaW5nJiB1cmwpIGNvbnN0OworICAgICAgICBib29sIGNhbkxvYWRFeHRlcm5hbFNjcmlwdEZy
b21TcmMoY29uc3QgU3RyaW5nJiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHVybCk7CiAKICAgICAg
ICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIG9iamVjdCBzaG91bGQgYmUgbG9hZGVkIGJhc2VkIG9u
IHRoZSBjb250ZW50IG9mCiAgICAgICAgIC8vIGFueSB1c2VyLXN1Ym1pdHRlZCBkYXRhLgogICAg
ICAgICAvLwogICAgICAgICAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgRnJhbWVMb2FkZXI6
OnJlcXVlc3RPYmplY3QuCi0gICAgICAgIGJvb2wgY2FuTG9hZE9iamVjdChjb25zdCBTdHJpbmcm
IHVybCkgY29uc3Q7CisgICAgICAgIGJvb2wgY2FuTG9hZE9iamVjdChjb25zdCBTdHJpbmcmIHVy
bCk7CiAKICAgICAgICAgLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBiYXNlIFVSTCBzaG91bGQg
YmUgY2hhbmdlZCBiYXNlZCBvbiB0aGUgY29udGVudAogICAgICAgICAvLyBvZiBhbnkgdXNlci1z
dWJtaXR0ZWQgZGF0YS4KICAgICAgICAgLy8KICAgICAgICAgLy8gVGhpcyBtZXRob2QgaXMgY2Fs
bGVkIGJ5IEhUTUxCYXNlRWxlbWVudDo6cHJvY2Vzcy4KLSAgICAgICAgYm9vbCBjYW5TZXRCYXNl
RWxlbWVudFVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CisgICAgICAgIGJvb2wgY2FuU2V0
QmFzZUVsZW1lbnRVUkwoY29uc3QgU3RyaW5nJiB1cmwpOwogCiAgICAgcHJpdmF0ZToKKyAgICAg
ICAgY2xhc3MgTWVtb2l6aW5nVVJMQ2Fub25pY2FsaXplcgorICAgICAgICB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIFN0cmluZyBjYW5vbmljYWxpemVVUkwoY29uc3QgU3RyaW5nJiB1
cmwsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGJvb2wgZGVjb2RlSFRNTEVudGl0aWVz
KTsKKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgLy8gVGhlIHBhcmFtZXRlcnMgd2Ug
d2VyZSBjYWxsZWQgd2l0aCBsYXN0LgorICAgICAgICAgICAgU3RyaW5nIG1fdXJsOworICAgICAg
ICAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CisgICAgICAgICAgICBib29sIG1fZGVjb2Rl
SFRNTEVudGl0aWVzOworCisgICAgICAgICAgICAvLyBUaGUgcHJldmlvdXMgcmVzdWx0LgorICAg
ICAgICAgICAgU3RyaW5nIG1fbWVtb2l6ZWRSZXN1bHQ7CisgICAgICAgIH07CisKICAgICAgICAg
c3RhdGljIFN0cmluZyBjYW5vbmljYWxpemUoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIAotICAg
ICAgICBzdGF0aWMgU3RyaW5nIGRlY29kZVVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVGV4
dEVuY29kaW5nJiBlbmNvZGluZyA9IFVURjhFbmNvZGluZygpLCBib29sIGRlY29kZUhUTUxlbnRp
dGllcyA9IHRydWUpOwotICAgICAgICAKKyAgICAgICAgc3RhdGljIFN0cmluZyBkZWNvZGVVUkwo
Y29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2RpbmcsIGJvb2wgZGVj
b2RlSFRNTEVudGl0aWVzKTsKICAgICAgICAgc3RhdGljIFN0cmluZyBkZWNvZGVIVE1MRW50aXRp
ZXMoY29uc3QgU3RyaW5nJiwgYm9vbCBsZWF2ZVVuZGVjb2RhYmxlSFRNTEVudGl0aWVzVW50b3Vj
aGVkID0gdHJ1ZSk7CiAKLSAgICAgICAgYm9vbCBmaW5kSW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYs
IGJvb2wgZGVjb2RlSFRNTGVudGl0aWVzID0gdHJ1ZSkgY29uc3Q7Ci0KLSAgICAgICAgYm9vbCBm
aW5kSW5SZXF1ZXN0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiwgYm9vbCBkZWNvZGVIVE1MZW50aXRp
ZXMgPSB0cnVlKSBjb25zdDsKKyAgICAgICAgYm9vbCBmaW5kSW5SZXF1ZXN0KGNvbnN0IFN0cmlu
ZyYsIGJvb2wgZGVjb2RlSFRNTEVudGl0aWVzID0gdHJ1ZSk7CisgICAgICAgIGJvb2wgZmluZElu
UmVxdWVzdChGcmFtZSosIGNvbnN0IFN0cmluZyYsIGJvb2wgZGVjb2RlSFRNTEVudGl0aWVzID0g
dHJ1ZSk7CiAKICAgICAgICAgLy8gVGhlIGZyYW1lIHRvIGF1ZGl0LgogICAgICAgICBGcmFtZSog
bV9mcmFtZTsKKworICAgICAgICAvLyBBIHN0YXRlIHN0b3JlIHRvIGhlbHAgdXMgYXZvaWQgY2Fu
b25pY2FsaXppbmcgdGhlIHNhbWUgVVJMIHJlcGVhdGVkLgorICAgICAgICBNZW1vaXppbmdVUkxD
YW5vbmljYWxpemVyIG1fbWVtb2l6ZXI7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQ==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>38454</attachid>
            <date>2009-08-23 10:51:18 -0700</date>
            <delta_ts>2009-08-27 23:28:29 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-28667-20090823105117.patch</filename>
            <type>text/plain</type>
            <size>8696</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA0NzY4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzQgQEAKKzIwMDktMDgtMjMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNYWtl
IFhTU0F1ZGl0b3IgZ28gZmFzdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9Mjg2NjcKKworICAgICAgICBNYWtlIHRoZSBYU1NBdWRpdG9yIGdvIGZhc3Rl
ciBieSBpbXBsZW1lbnRpbmcgdHdvIG9wdGltaXphdGlvbnM6CisKKyAgICAgICAgMSkgV2UgYXZv
aWQgY2Fub25pY2FsaXppbmcgc2NyaXB0cyB0aGF0IGFyZSBsYXJnZXIgdGhhbiB0aGUgcGFnZSdz
IFVSTC4KKyAgICAgICAgICAgVGhpcyBzYXZlcyBhIGJ1bmNoIG9mIHRpbWUgZm9yIGxhcmdlIGlu
bGluZSBzY3JpcHRzLgorCisgICAgICAgIDIpIFdlIG1lbW9pemUgY2Fub25pY2FsaXppbmcgdGhl
IHBhZ2UncyBVUkwgYmVjYXVzZSBpdCdzIHNpbGx5IHRvCisgICAgICAgICAgIGNhbm9uaWNhbGl6
ZSByZXBlYXRlZCBmb3IgZWFjaCBpbmxpbmUgZXZlbnQgbGlzdGVuZXIuCisKKyAgICAgICAgVGhl
c2Ugb3B0aW1pemF0aW9ucyBoYXZlIGEgbWVhc3VyYWJsZSBhZmZlY3Qgb24gdGhlIGludGwxIHBh
Z2UgY3ljbGVyLgorCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIHBh
Z2UvWFNTQXVkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpNZW1vaXpp
bmdVUkxDYW5vbmljYWxpemVyOjpjYW5vbmljYWxpemVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6
WFNTQXVkaXRvcjo6Y2FuRXZhbHVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6
Y2FuRXZhbHVhdGVKYXZhU2NyaXB0VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6
OmNhbkNyZWF0ZUlubGluZUV2ZW50TGlzdGVuZXIpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6Y2FuTG9hZEV4dGVybmFsU2NyaXB0RnJvbVNyYyk6CisgICAgICAgIChXZWJDb3JlOjpY
U1NBdWRpdG9yOjpjYW5Mb2FkT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6
OmNhblNldEJhc2VFbGVtZW50VVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRl
Y29kZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaW5kSW5SZXF1ZXN0KToK
KyAgICAgICAgKiBwYWdlL1hTU0F1ZGl0b3IuaDoKKwogMjAwOS0wOC0yMiAgTWFydGluIFJvYmlu
c29uICA8bWFydGluLmphbWVzLnJvYmluc29uQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBYYW4gTG9wZXouCkluZGV4OiBXZWJDb3JlL3BhZ2UvWFNTQXVkaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wYWdlL1hTU0F1ZGl0b3IuY3BwCShyZXZpc2lvbiA0NzUzOSkKKysr
IFdlYkNvcmUvcGFnZS9YU1NBdWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYs
MTggQEAgc3RhdGljIGJvb2wgaXNOb25DYW5vbmljYWxDaGFyYWN0ZXIoVUNoYQogICAgIHJldHVy
biAoYyA9PSAnXFwnIHx8IGMgPT0gJzAnIHx8IGMgPCAnICcgfHwgYyA9PSAxMjcpOwogfQogCitT
dHJpbmcgWFNTQXVkaXRvcjo6TWVtb2l6aW5nVVJMQ2Fub25pY2FsaXplcjo6Y2Fub25pY2FsaXpl
VVJMKGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nLCBib29s
IGRlY29kZUhUTUxFbnRpdGllcykKK3sKKyAgICBpZiAoZGVjb2RlSFRNTEVudGl0aWVzID09IG1f
ZGVjb2RlSFRNTEVudGl0aWVzICYmIGVuY29kaW5nID09IG1fZW5jb2RpbmcgJiYgdXJsID09IG1f
dXJsKQorICAgICAgICByZXR1cm4gbV9tZW1vaXplZFJlc3VsdDsKKworICAgIG1fbWVtb2l6ZWRS
ZXN1bHQgPSBjYW5vbmljYWxpemUoZGVjb2RlVVJMKHVybCwgZW5jb2RpbmcsIGRlY29kZUhUTUxF
bnRpdGllcykpOworICAgIG1fdXJsID0gdXJsOworICAgIG1fZW5jb2RpbmcgPSBlbmNvZGluZzsK
KyAgICBtX2RlY29kZUhUTUxFbnRpdGllcyA9IGRlY29kZUhUTUxFbnRpdGllczsKKyAgICByZXR1
cm4gbV9tZW1vaXplZFJlc3VsdDsKK30KKwogWFNTQXVkaXRvcjo6WFNTQXVkaXRvcihGcmFtZSog
ZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogewpAQCAtMTU2LDcgKzE2OCw3IEBAIFN0cmlu
ZyBYU1NBdWRpdG9yOjpjYW5vbmljYWxpemUoY29uc3QgU3QKICAgICByZXR1cm4gcmVzdWx0LnJl
bW92ZUNoYXJhY3RlcnMoJmlzTm9uQ2Fub25pY2FsQ2hhcmFjdGVyKTsKIH0KIAotU3RyaW5nIFhT
U0F1ZGl0b3I6OmRlY29kZVVSTChjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZywgYm9vbCBkZWNvZGVIVE1MZW50aXRpZXMpCitTdHJpbmcgWFNTQXVkaXRv
cjo6ZGVjb2RlVVJMKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVu
Y29kaW5nLCBib29sIGRlY29kZUVudGl0aWVzKQogewogICAgIFN0cmluZyByZXN1bHQ7CiAgICAg
U3RyaW5nIHVybCA9IHN0cmluZzsKQEAgLTE2Niw3ICsxNzgsNyBAQCBTdHJpbmcgWFNTQXVkaXRv
cjo6ZGVjb2RlVVJMKGNvbnN0IFN0cmluCiAgICAgU3RyaW5nIGRlY29kZWRSZXN1bHQgPSBlbmNv
ZGluZy5kZWNvZGUocmVzdWx0LnV0ZjgoKS5kYXRhKCksIHJlc3VsdC5sZW5ndGgoKSk7CiAgICAg
aWYgKCFkZWNvZGVkUmVzdWx0LmlzRW1wdHkoKSkKICAgICAgICAgcmVzdWx0ID0gZGVjb2RlZFJl
c3VsdDsKLSAgICBpZiAoZGVjb2RlSFRNTGVudGl0aWVzKQorICAgIGlmIChkZWNvZGVFbnRpdGll
cykKICAgICAgICAgcmVzdWx0ID0gZGVjb2RlSFRNTEVudGl0aWVzKHJlc3VsdCk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTIwOCwzMSArMjIwLDQ4IEBAIFN0cmluZyBYU1NBdWRpdG9yOjpk
ZWNvZGVIVE1MRW50aXRpZXMoY28KICAgICByZXR1cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwog
fQogCi1ib29sIFhTU0F1ZGl0b3I6OmZpbmRJblJlcXVlc3QoY29uc3QgU3RyaW5nJiBzdHJpbmcs
IGJvb2wgZGVjb2RlSFRNTGVudGl0aWVzKSBjb25zdAorYm9vbCBYU1NBdWRpdG9yOjpmaW5kSW5S
ZXF1ZXN0KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBib29sIGRlY29kZUhUTUxFbnRpdGllcykgY29u
c3QKIHsKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIEZyYW1lKiBwYXJlbnRGcmFtZSA9
IG1fZnJhbWUtPnRyZWUoKS0+cGFyZW50KCk7CiAgICAgaWYgKHBhcmVudEZyYW1lICYmIG1fZnJh
bWUtPmRvY3VtZW50KCktPnVybCgpID09IGJsYW5rVVJMKCkpCi0gICAgICAgIHJlc3VsdCA9IGZp
bmRJblJlcXVlc3QocGFyZW50RnJhbWUsIHN0cmluZywgZGVjb2RlSFRNTGVudGl0aWVzKTsKKyAg
ICAgICAgcmVzdWx0ID0gZmluZEluUmVxdWVzdChwYXJlbnRGcmFtZSwgc3RyaW5nLCBkZWNvZGVI
VE1MRW50aXRpZXMpOwogICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXN1bHQgPSBmaW5kSW5S
ZXF1ZXN0KG1fZnJhbWUsIHN0cmluZywgZGVjb2RlSFRNTGVudGl0aWVzKTsKKyAgICAgICAgcmVz
dWx0ID0gZmluZEluUmVxdWVzdChtX2ZyYW1lLCBzdHJpbmcsIGRlY29kZUhUTUxFbnRpdGllcyk7
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaW5kSW5SZXF1ZXN0
KEZyYW1lKiBmcmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgZGVjb2RlSFRNTGVudGl0
aWVzKSBjb25zdAorYm9vbCBYU1NBdWRpdG9yOjpmaW5kSW5SZXF1ZXN0KEZyYW1lKiBmcmFtZSwg
Y29uc3QgU3RyaW5nJiBzdHJpbmcsIGJvb2wgZGVjb2RlSFRNTEVudGl0aWVzKSBjb25zdAogewog
ICAgIEFTU0VSVChmcmFtZS0+ZG9jdW1lbnQoKSk7Ci0gICAgU3RyaW5nIHBhZ2VVUkwgPSBmcmFt
ZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCk7CiAKICAgICBpZiAoIWZyYW1lLT5kb2N1bWVu
dCgpLT5kZWNvZGVyKCkpIHsKICAgICAgICAgLy8gTm90ZSwgSmF2YVNjcmlwdCBVUkxzIGRvIG5v
dCBoYXZlIGEgY2hhcnNldC4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlm
IChwcm90b2NvbElzKHBhZ2VVUkwsICJkYXRhIikpCisgICAgaWYgKHN0cmluZy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQorICAg
IEZvcm1EYXRhKiBmb3JtRGF0YU9iaiA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIo
KS0+b3JpZ2luYWxSZXF1ZXN0KCkuaHR0cEJvZHkoKTsKKyAgICBTdHJpbmcgcGFnZVVSTCA9IGZy
YW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKTsKKworICAgIGlmICghZm9ybURhdGFPYmog
JiYgc3RyaW5nLmxlbmd0aCgpID49IDIgKiBwYWdlVVJMLmxlbmd0aCgpKSB7CisgICAgICAgIC8v
IFE6IFdoeSBkbyB3ZSBib3RoZXIgdG8gZG8gdGhpcyBjaGVjayBhdCBhbGw/CisgICAgICAgIC8v
IEE6IENhbm9uaWNhbGl6aW5nIGxhcmdlIGlubGluZSBzY3JpcHRzIGNhbiBiZSBleHBlbnNpdmUu
ICBXZSB3YW50IHRvCisgICAgICAgIC8vICAgIGJhaWwgb3V0IGJlZm9yZSB0aGUgY2FsbCB0byBj
YW5vbmljYWxpemUgYmVsb3csIHdoaWNoIGNvdWxkCisgICAgICAgIC8vICAgIHJlc3VsdCBpbiBh
biB1bm5lZWRlZCBhbGxvY2F0aW9uIGFuZCBtZW1jcHkuCisgICAgICAgIC8vCisgICAgICAgIC8v
IFE6IFdoeSBkbyB3ZSBtdWx0aXBseSBieSB0d28gaGVyZT8KKyAgICAgICAgLy8gQTogV2UgYXR0
ZW1wdCB0byBkZXRlY3QgcmVmbGVjdGVkIFhTUyBldmVuIHdoZW4gdGhlIHNlcnZlcgorICAgICAg
ICAvLyAgICB0cmFuc2Zvcm1zIHRoZSBhdHRhY2tlcidzIGlucHV0IHdpdGggYWRkU2xhc2hlcy4g
IFRoZSBiZXN0IHRoZQorICAgICAgICAvLyAgICBhdHRhY2tlciBjYW4gZG8gZ2V0IHRoZSBzZXJ2
ZXIgdG8gaW5mbGF0ZSBoaXMvaGVyIGlucHV0IGJ5IGEKKyAgICAgICAgLy8gICAgZmFjdG9yIG9m
IHR3byBieSBzZW5kaW5nICIgY2hhcmFjdGVycywgd2hpY2ggdGhlIHNlcnZlcgorICAgICAgICAv
LyAgICB0cmFuc2Zvcm1zIHRvIFwiLgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5wcm90b2NvbElzKCJkYXRhIikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIFN0cmluZyBjYW5vbmljYWxpemVkU3RyaW5nID0gY2Fu
b25pY2FsaXplKHN0cmluZyk7CkBAIC0yNDEsMTIgKzI3MCwxMSBAQCBib29sIFhTU0F1ZGl0b3I6
OmZpbmRJblJlcXVlc3QoRnJhbWUqIGZyCiAKICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIDwgcGFn
ZVVSTC5sZW5ndGgoKSkgewogICAgICAgICAvLyBUaGUgc3RyaW5nIGNhbiBhY3R1YWxseSBmaXQg
aW5zaWRlIHRoZSBwYWdlVVJMLgotICAgICAgICBTdHJpbmcgZGVjb2RlZFBhZ2VVUkwgPSBjYW5v
bmljYWxpemUoZGVjb2RlVVJMKHBhZ2VVUkwsIGZyYW1lLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkt
PmVuY29kaW5nKCksIGRlY29kZUhUTUxlbnRpdGllcykpOworICAgICAgICBTdHJpbmcgZGVjb2Rl
ZFBhZ2VVUkwgPSBtX21lbW9pemVyLmNhbm9uaWNhbGl6ZVVSTChwYWdlVVJMLCBmcmFtZS0+ZG9j
dW1lbnQoKS0+ZGVjb2RlcigpLT5lbmNvZGluZygpLCBkZWNvZGVIVE1MRW50aXRpZXMpOwogICAg
ICAgICBpZiAoZGVjb2RlZFBhZ2VVUkwuZmluZChjYW5vbmljYWxpemVkU3RyaW5nLCAwLCBmYWxz
ZSkgIT0gLTEpCiAgICAgICAgICAgIHJldHVybiB0cnVlOyAgLy8gV2UndmUgZm91bmQgdGhlIHNt
b2tpbmcgZ3VuLgogICAgIH0KIAotICAgIEZvcm1EYXRhKiBmb3JtRGF0YU9iaiA9IGZyYW1lLT5s
b2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+b3JpZ2luYWxSZXF1ZXN0KCkuaHR0cEJvZHkoKTsK
ICAgICBpZiAoZm9ybURhdGFPYmogJiYgIWZvcm1EYXRhT2JqLT5pc0VtcHR5KCkpIHsKICAgICAg
ICAgU3RyaW5nIGZvcm1EYXRhID0gZm9ybURhdGFPYmotPmZsYXR0ZW5Ub1N0cmluZygpOwogICAg
ICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpIDwgZm9ybURhdGEubGVuZ3RoKCkpIHsKQEAgLTI1NCw3
ICsyODIsNyBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbmRJblJlcXVlc3QoRnJhbWUqIGZyCiAgICAg
ICAgICAgICAvLyB0aGUgdXJsLWVuY29kZWQgUE9TVCBkYXRhIGJlY2F1c2UgdGhlIGxlbmd0aCBv
ZiB0aGUgdXJsLWRlY29kZWQKICAgICAgICAgICAgIC8vIGNvZGUgaXMgbGVzcyB0aGFuIG9yIGVx
dWFsIHRvIHRoZSBsZW5ndGggb2YgdGhlIHVybC1lbmNvZGVkCiAgICAgICAgICAgICAvLyBzdHJp
bmcuCi0gICAgICAgICAgICBTdHJpbmcgZGVjb2RlZEZvcm1EYXRhID0gY2Fub25pY2FsaXplKGRl
Y29kZVVSTChmb3JtRGF0YSwgZnJhbWUtPmRvY3VtZW50KCktPmRlY29kZXIoKS0+ZW5jb2Rpbmco
KSwgZGVjb2RlSFRNTGVudGl0aWVzKSk7CisgICAgICAgICAgICBTdHJpbmcgZGVjb2RlZEZvcm1E
YXRhID0gbV9tZW1vaXplci5jYW5vbmljYWxpemVVUkwoZm9ybURhdGEsIGZyYW1lLT5kb2N1bWVu
dCgpLT5kZWNvZGVyKCktPmVuY29kaW5nKCksIGRlY29kZUhUTUxFbnRpdGllcyk7CiAgICAgICAg
ICAgICBpZiAoZGVjb2RlZEZvcm1EYXRhLmZpbmQoY2Fub25pY2FsaXplZFN0cmluZywgMCwgZmFs
c2UpICE9IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAgLy8gV2UgZm91bmQgdGhl
IHN0cmluZyBpbiB0aGUgUE9TVCBkYXRhLgogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL3BhZ2Uv
WFNTQXVkaXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9YU1NBdWRpdG9yLmgJKHJl
dmlzaW9uIDQ3NTM5KQorKysgV2ViQ29yZS9wYWdlL1hTU0F1ZGl0b3IuaAkod29ya2luZyBjb3B5
KQpAQCAtOTksMTggKzk5LDMzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBj
YW5TZXRCYXNlRWxlbWVudFVSTChjb25zdCBTdHJpbmcmIHVybCkgY29uc3Q7CiAKICAgICBwcml2
YXRlOgorICAgICAgICBjbGFzcyBNZW1vaXppbmdVUkxDYW5vbmljYWxpemVyCisgICAgICAgIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgU3RyaW5nIGNhbm9uaWNhbGl6ZVVSTChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZywgYm9vbCBkZWNvZGVI
VE1MRW50aXRpZXMpOworCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICAvLyBUaGUgcGFy
YW1ldGVycyB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGxhc3QuCisgICAgICAgICAgICBTdHJpbmcgbV91
cmw7CisgICAgICAgICAgICBUZXh0RW5jb2RpbmcgbV9lbmNvZGluZzsKKyAgICAgICAgICAgIGJv
b2wgbV9kZWNvZGVIVE1MRW50aXRpZXM7CisKKyAgICAgICAgICAgIC8vIFRoZSBwcmV2aW91cyBy
ZXN1bHQuCisgICAgICAgICAgICBTdHJpbmcgbV9tZW1vaXplZFJlc3VsdDsKKyAgICAgICAgfTsK
KwogICAgICAgICBzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZShjb25zdCBTdHJpbmcmKTsKLSAg
ICAgICAgCi0gICAgICAgIHN0YXRpYyBTdHJpbmcgZGVjb2RlVVJMKGNvbnN0IFN0cmluZyYgdXJs
LCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nID0gVVRGOEVuY29kaW5nKCksIGJvb2wgZGVj
b2RlSFRNTGVudGl0aWVzID0gdHJ1ZSk7Ci0gICAgICAgIAorICAgICAgICBzdGF0aWMgU3RyaW5n
IGRlY29kZVVSTChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGlu
ZywgYm9vbCBkZWNvZGVIVE1MRW50aXRpZXMpOwogICAgICAgICBzdGF0aWMgU3RyaW5nIGRlY29k
ZUhUTUxFbnRpdGllcyhjb25zdCBTdHJpbmcmLCBib29sIGxlYXZlVW5kZWNvZGFibGVIVE1MRW50
aXRpZXNVbnRvdWNoZWQgPSB0cnVlKTsKIAotICAgICAgICBib29sIGZpbmRJblJlcXVlc3QoY29u
c3QgU3RyaW5nJiwgYm9vbCBkZWNvZGVIVE1MZW50aXRpZXMgPSB0cnVlKSBjb25zdDsKLQotICAg
ICAgICBib29sIGZpbmRJblJlcXVlc3QoRnJhbWUqLCBjb25zdCBTdHJpbmcmLCBib29sIGRlY29k
ZUhUTUxlbnRpdGllcyA9IHRydWUpIGNvbnN0OworICAgICAgICBib29sIGZpbmRJblJlcXVlc3Qo
Y29uc3QgU3RyaW5nJiwgYm9vbCBkZWNvZGVIVE1MRW50aXRpZXMgPSB0cnVlKSBjb25zdDsKKyAg
ICAgICAgYm9vbCBmaW5kSW5SZXF1ZXN0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiwgYm9vbCBkZWNv
ZGVIVE1MRW50aXRpZXMgPSB0cnVlKSBjb25zdDsKIAogICAgICAgICAvLyBUaGUgZnJhbWUgdG8g
YXVkaXQuCiAgICAgICAgIEZyYW1lKiBtX2ZyYW1lOworCisgICAgICAgIC8vIEEgc3RhdGUgc3Rv
cmUgdG8gaGVscCB1cyBhdm9pZCBjYW5vbmljYWxpemluZyB0aGUgc2FtZSBVUkwgcmVwZWF0ZWQu
CisgICAgICAgIG11dGFibGUgTWVtb2l6aW5nVVJMQ2Fub25pY2FsaXplciBtX21lbW9pemVyOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmU=
</data>
<flag name="review"
          id="19467"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="19713"
          type_id="3"
          status="-"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>