<?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>146832</bug_id>
          
          <creation_ts>2015-07-10 03:48:14 -0700</creation_ts>
          <short_desc>[Curl] Crash in CurlDownload::didReceiveHeader when downloading file.</short_desc>
          <delta_ts>2015-07-27 11:54:26 -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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>peavo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>galpeter</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1108573</commentid>
    <comment_count>0</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-07-10 03:48:14 -0700</bug_when>
    <thetext>I just got a crash in CurlDownload::didReceiveHeader in the call to m_response.setMimeType.

We should only call ResourceResponse::setMimeType from the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108574</commentid>
    <comment_count>1</comment_count>
      <attachid>256575</attachid>
    <who name="">peavo</who>
    <bug_when>2015-07-10 03:52:13 -0700</bug_when>
    <thetext>Created attachment 256575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108636</commentid>
    <comment_count>2</comment_count>
      <attachid>256575</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-07-10 09:51:55 -0700</bug_when>
    <thetext>Comment on attachment 256575
Patch

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

&gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:402
&gt; +            callOnMainThread([this, strUrl] {

What guarantees the CurlDownload won’t be deleted between now and when the function is called on the main thread?

It’s not thread-safe to capture a string on one thread and use it on another. We need to use StringCapture instead to pass strings across threads.

&gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:412
&gt; +        callOnMainThread([this, header] {

What guarantees the CurlDownload won’t be deleted between now and when the function is called on the main thread?

It’s not thread-safe to capture a string on one thread and use it on another. We need to use StringCapture instead to pass strings across threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1108703</commentid>
    <comment_count>3</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-07-10 11:45:31 -0700</bug_when>
    <thetext>Thanks for reviewing :) I will update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112053</commentid>
    <comment_count>4</comment_count>
      <attachid>257466</attachid>
    <who name="">peavo</who>
    <bug_when>2015-07-24 12:07:09 -0700</bug_when>
    <thetext>Created attachment 257466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112349</commentid>
    <comment_count>5</comment_count>
      <attachid>257466</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-07-26 21:22:11 -0700</bug_when>
    <thetext>Comment on attachment 257466
Patch

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

&gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:309
&gt; +    ref(); // The download manager will call deref when the download has finished.

Might be better to say &quot;CurlDownloadManager::downloadThread&quot; will call deref when the download has finished.

&gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:407
&gt; +            ref();

You can capture a RefPtr to do this without an explicit ref/deref; RefPtr&lt;CurlDownload&gt; protectedDownload(this) or capturedDownload and then capture that. Doing that has a slight clarity advantage of running the deref if the lambda is ever deleted without being called, not an issue in these cases. Sometimes people capture both the RefPtr and &quot;this&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112418</commentid>
    <comment_count>6</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-07-27 08:11:07 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Comment on attachment 257466 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=257466&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:309
&gt; &gt; +    ref(); // The download manager will call deref when the download has finished.
&gt; 
&gt; Might be better to say &quot;CurlDownloadManager::downloadThread&quot; will call deref
&gt; when the download has finished.
&gt; 
&gt; &gt; Source/WebCore/platform/network/curl/CurlDownload.cpp:407
&gt; &gt; +            ref();
&gt; 
&gt; You can capture a RefPtr to do this without an explicit ref/deref;
&gt; RefPtr&lt;CurlDownload&gt; protectedDownload(this) or capturedDownload and then
&gt; capture that. Doing that has a slight clarity advantage of running the deref
&gt; if the lambda is ever deleted without being called, not an issue in these
&gt; cases. Sometimes people capture both the RefPtr and &quot;this&quot;.

Thanks for reviewing :) I will update the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1112456</commentid>
    <comment_count>7</comment_count>
    <who name="">peavo</who>
    <bug_when>2015-07-27 11:54:26 -0700</bug_when>
    <thetext>Committed r187436: &lt;http://trac.webkit.org/changeset/187436&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>256575</attachid>
            <date>2015-07-10 03:52:13 -0700</date>
            <delta_ts>2015-07-24 12:06:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146832-20150710125031.patch</filename>
            <type>text/plain</type>
            <size>2530</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NjY2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE1LTA3LTEwICBQZXIgQXJu
ZSBWb2xsYW4gIDxwZWF2b0BvdXRsb29rLmNvbT4KKworICAgICAgICBbQ3VybF0gQ3Jhc2ggaW4g
Q3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyIHdoZW4gZG93bmxvYWRpbmcgZmlsZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjgzMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9ubHkgY2FsbCBS
ZXNvdXJjZVJlc3BvbnNlOjpzZXRNaW1lVHlwZSBmcm9tIHRoZSBtYWluIHRocmVhZC4KKworICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyKToKKwogMjAxNS0wNy0wOSAg
WmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFBsdWdpbiBjcmVhdGUg
Y2FuIGVuZCB1cCBkZXN0cm95aW5nIGl0cyByZW5kZXJlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCShyZXZp
c2lvbiAxODY2NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3Vy
bERvd25sb2FkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk3LDE5ICszOTcsMjMgQEAgdm9pZCBD
dXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVIZWFkZXIoY29ucwogICAgICAgICBpZiAoaHR0cENvZGUg
Pj0gMjAwICYmIGh0dHBDb2RlIDwgMzAwKSB7CiAgICAgICAgICAgICBjb25zdCBjaGFyKiB1cmwg
PSAwOwogICAgICAgICAgICAgZXJyID0gY3VybF9lYXN5X2dldGluZm8obV9jdXJsSGFuZGxlLCBD
VVJMSU5GT19FRkZFQ1RJVkVfVVJMLCAmdXJsKTsKLSAgICAgICAgICAgIG1fcmVzcG9uc2Uuc2V0
VVJMKFVSTChQYXJzZWRVUkxTdHJpbmcsIHVybCkpOworICAgICAgICAgICAgU3RyaW5nIHN0clVy
bCh1cmwpOwogCi0gICAgICAgICAgICBtX3Jlc3BvbnNlLnNldE1pbWVUeXBlKGV4dHJhY3RNSU1F
VHlwZUZyb21NZWRpYVR5cGUobV9yZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5h
bWU6OkNvbnRlbnRUeXBlKSkpOwotICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRUZXh0RW5jb2Rp
bmdOYW1lKGV4dHJhY3RDaGFyc2V0RnJvbU1lZGlhVHlwZShtX3Jlc3BvbnNlLmh0dHBIZWFkZXJG
aWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKSk7CisgICAgICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFt0aGlzLCBzdHJVcmxdIHsKKyAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlLnNl
dFVSTChVUkwoUGFyc2VkVVJMU3RyaW5nLCBzdHJVcmwpKTsKKworICAgICAgICAgICAgICAgIG1f
cmVzcG9uc2Uuc2V0TWltZVR5cGUoZXh0cmFjdE1JTUVUeXBlRnJvbU1lZGlhVHlwZShtX3Jlc3Bv
bnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6Q29udGVudFR5cGUpKSk7CisgICAg
ICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRUZXh0RW5jb2RpbmdOYW1lKGV4dHJhY3RDaGFyc2V0
RnJvbU1lZGlhVHlwZShtX3Jlc3BvbnNlLmh0dHBIZWFkZXJGaWVsZChIVFRQSGVhZGVyTmFtZTo6
Q29udGVudFR5cGUpKSk7CiAKLSAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXNdIHsK
ICAgICAgICAgICAgICAgICBkaWRSZWNlaXZlUmVzcG9uc2UoKTsKICAgICAgICAgICAgIH0pOwog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaW50IHNwbGl0UG9zID0gaGVhZGVyLmZp
bmQoIjoiKTsKLSAgICAgICAgaWYgKHNwbGl0UG9zICE9IC0xKQotICAgICAgICAgICAgbV9yZXNw
b25zZS5zZXRIVFRQSGVhZGVyRmllbGQoaGVhZGVyLmxlZnQoc3BsaXRQb3MpLCBoZWFkZXIuc3Vi
c3RyaW5nKHNwbGl0UG9zKzEpLnN0cmlwV2hpdGVTcGFjZSgpKTsKKyAgICAgICAgY2FsbE9uTWFp
blRocmVhZChbdGhpcywgaGVhZGVyXSB7CisgICAgICAgICAgICBpbnQgc3BsaXRQb3MgPSBoZWFk
ZXIuZmluZCgiOiIpOworICAgICAgICAgICAgaWYgKHNwbGl0UG9zICE9IC0xKQorICAgICAgICAg
ICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRUUEhlYWRlckZpZWxkKGhlYWRlci5sZWZ0KHNwbGl0UG9z
KSwgaGVhZGVyLnN1YnN0cmluZyhzcGxpdFBvcyArIDEpLnN0cmlwV2hpdGVTcGFjZSgpKTsKKyAg
ICAgICAgfSk7CiAgICAgfQogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>257466</attachid>
            <date>2015-07-24 12:07:09 -0700</date>
            <delta_ts>2015-07-26 21:22:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-146832-20150724210455.patch</filename>
            <type>text/plain</type>
            <size>10735</size>
            <attacher>peavo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4NzM0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1IEBACisyMDE1LTA3LTI0ICBQZXIgQXJu
ZSBWb2xsYW4gIDxwZWF2b0BvdXRsb29rLmNvbT4KKworICAgICAgICBbQ3VybF0gQ3Jhc2ggaW4g
Q3VybERvd25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyIHdoZW4gZG93bmxvYWRpbmcgZmlsZS4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NjgzMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE9ubHkgY2FsbCBS
ZXNvdXJjZVJlc3BvbnNlOjpzZXRNaW1lVHlwZSBmcm9tIHRoZSBtYWluIHRocmVhZC4KKyAgICAg
ICAgQWxzbywgQ3VybERvd25sb2FkIHNob3VsZCBiZSByZWZlcmVuY2UgY291bnRlZCB0byBtYWtl
IHN1cmUgaXQKKyAgICAgICAgc3RpbGwgbGl2ZXMgd2hlbiBhIGZ1bmN0aW9uIGNhbGwgaXMgaW52
b2tlZCBvbiB0aGUgbWFpbiB0aHJlYWQKKyAgICAgICAgZnJvbSB0aGUgZG93bmxvYWQgdGhyZWFk
LgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZFRocmVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OkN1cmxEb3dubG9hZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXJsRG93bmxvYWQ6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1cmxEb3du
bG9hZDo6ZGlkUmVjZWl2ZUhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6
OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERv
d25sb2FkLmg6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWRMaXN0ZW5lcjo6ZGlkRmFp
bCk6CisgICAgICAgIChXZWJDb3JlOjpDdXJsRG93bmxvYWQ6OnNldExpc3RlbmVyKToKKwogMjAx
NS0wNy0yNCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0dTdHJlYW1lcl0gQ3Jhc2hlcyBkdXJpbmcgcGx1Z2luIGluc3RhbGxhdGlvbgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxEb3dubG9hZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL0N1cmxE
b3dubG9hZC5jcHAJKHJldmlzaW9uIDE4NzM0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDksMTcg
KzIwOSwxOSBAQCB2b2lkIEN1cmxEb3dubG9hZE1hbmFnZXI6OmRvd25sb2FkVGhyZWFkCiAgICAg
ICAgIENVUkxjb2RlIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKG1zZy0+ZWFzeV9oYW5kbGUsIENV
UkxJTkZPX1BSSVZBVEUsICZkb3dubG9hZCk7CiAKICAgICAgICAgaWYgKG1zZy0+bXNnID09IENV
UkxNU0dfRE9ORSkgewotICAgICAgICAgICAgaWYgKG1zZy0+ZGF0YS5yZXN1bHQgPT0gQ1VSTEVf
T0spCi0gICAgICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZG93bmxvYWRdIHsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGRvd25sb2FkKQorICAgICAgICAgICAgaWYgKGRvd25sb2FkKSB7
CisgICAgICAgICAgICAgICAgaWYgKG1zZy0+ZGF0YS5yZXN1bHQgPT0gQ1VSTEVfT0spIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZG93bmxvYWRdIHsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvd25sb2FkLT5kaWRGaW5pc2goKTsKLSAgICAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtk
b3dubG9hZF0gewotICAgICAgICAgICAgICAgICAgICBpZiAoZG93bmxvYWQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBkb3dubG9hZC0+ZGVyZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSByZWYo
KSBpbiBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkuCisgICAgICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW2Rvd25sb2FkXSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZC0+ZGlkRmFp
bCgpOwotICAgICAgICAgICAgICAgIH0pOwotCisgICAgICAgICAgICAgICAgICAgICAgICBkb3du
bG9hZC0+ZGVyZWYoKTsgLy8gVGhpcyBtYXRjaGVzIHRoZSByZWYoKSBpbiBDdXJsRG93bmxvYWQ6
OnN0YXJ0KCkuCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGRvd25sb2FkTWFuYWdlci0+cmVtb3ZlRnJvbUN1cmwo
bXNnLT5lYXN5X2hhbmRsZSk7CiAgICAgICAgIH0KIApAQCAtMjMyLDEyICsyMzQsMTIgQEAgdm9p
ZCBDdXJsRG93bmxvYWRNYW5hZ2VyOjpkb3dubG9hZFRocmVhZAogQ3VybERvd25sb2FkTWFuYWdl
ciBDdXJsRG93bmxvYWQ6Om1fZG93bmxvYWRNYW5hZ2VyOwogCiBDdXJsRG93bmxvYWQ6OkN1cmxE
b3dubG9hZCgpCi06IG1fY3VybEhhbmRsZSgwKQotLCBtX2N1c3RvbUhlYWRlcnMoMCkKLSwgbV91
cmwoMCkKLSwgbV90ZW1wSGFuZGxlKGludmFsaWRQbGF0Zm9ybUZpbGVIYW5kbGUpCi0sIG1fZGVs
ZXRlc0ZpbGVVcG9uRmFpbHVyZShmYWxzZSkKLSwgbV9saXN0ZW5lcigwKQorICAgIDogbV9jdXJs
SGFuZGxlKG51bGxwdHIpCisgICAgLCBtX2N1c3RvbUhlYWRlcnMobnVsbHB0cikKKyAgICAsIG1f
dXJsKG51bGxwdHIpCisgICAgLCBtX3RlbXBIYW5kbGUoaW52YWxpZFBsYXRmb3JtRmlsZUhhbmRs
ZSkKKyAgICAsIG1fZGVsZXRlc0ZpbGVVcG9uRmFpbHVyZShmYWxzZSkKKyAgICAsIG1fbGlzdGVu
ZXIobnVsbHB0cikKIHsKIH0KIApAQCAtMzA0LDYgKzMwNiw3IEBAIHZvaWQgQ3VybERvd25sb2Fk
Ojppbml0KEN1cmxEb3dubG9hZExpc3QKIAogYm9vbCBDdXJsRG93bmxvYWQ6OnN0YXJ0KCkKIHsK
KyAgICByZWYoKTsgLy8gVGhlIGRvd25sb2FkIG1hbmFnZXIgd2lsbCBjYWxsIGRlcmVmIHdoZW4g
dGhlIGRvd25sb2FkIGhhcyBmaW5pc2hlZC4KICAgICByZXR1cm4gbV9kb3dubG9hZE1hbmFnZXIu
YWRkKG1fY3VybEhhbmRsZSk7CiB9CiAKQEAgLTM5NywxOSArNDAwLDMzIEBAIHZvaWQgQ3VybERv
d25sb2FkOjpkaWRSZWNlaXZlSGVhZGVyKGNvbnMKICAgICAgICAgaWYgKGh0dHBDb2RlID49IDIw
MCAmJiBodHRwQ29kZSA8IDMwMCkgewogICAgICAgICAgICAgY29uc3QgY2hhciogdXJsID0gMDsK
ICAgICAgICAgICAgIGVyciA9IGN1cmxfZWFzeV9nZXRpbmZvKG1fY3VybEhhbmRsZSwgQ1VSTElO
Rk9fRUZGRUNUSVZFX1VSTCwgJnVybCk7Ci0gICAgICAgICAgICBtX3Jlc3BvbnNlLnNldFVSTChV
UkwoUGFyc2VkVVJMU3RyaW5nLCB1cmwpKTsKIAotICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRN
aW1lVHlwZShleHRyYWN0TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0cEhlYWRl
ckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpKTsKLSAgICAgICAgICAgIG1fcmVz
cG9uc2Uuc2V0VGV4dEVuY29kaW5nTmFtZShleHRyYWN0Q2hhcnNldEZyb21NZWRpYVR5cGUobV9y
ZXNwb25zZS5odHRwSGVhZGVyRmllbGQoSFRUUEhlYWRlck5hbWU6OkNvbnRlbnRUeXBlKSkpOwor
ICAgICAgICAgICAgU3RyaW5nIHN0clVybCh1cmwpOworICAgICAgICAgICAgU3RyaW5nQ2FwdHVy
ZSBjYXB0dXJlZFVybChzdHJVcmwpOworCisgICAgICAgICAgICByZWYoKTsKKworICAgICAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbdGhpcywgY2FwdHVyZWRVcmxdIHsKKyAgICAgICAgICAgICAg
ICBtX3Jlc3BvbnNlLnNldFVSTChVUkwoUGFyc2VkVVJMU3RyaW5nLCBjYXB0dXJlZFVybC5zdHJp
bmcoKSkpOworCisgICAgICAgICAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1lVHlwZShleHRyYWN0
TUlNRVR5cGVGcm9tTWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0cEhlYWRlckZpZWxkKEhUVFBIZWFk
ZXJOYW1lOjpDb250ZW50VHlwZSkpKTsKKyAgICAgICAgICAgICAgICBtX3Jlc3BvbnNlLnNldFRl
eHRFbmNvZGluZ05hbWUoZXh0cmFjdENoYXJzZXRGcm9tTWVkaWFUeXBlKG1fcmVzcG9uc2UuaHR0
cEhlYWRlckZpZWxkKEhUVFBIZWFkZXJOYW1lOjpDb250ZW50VHlwZSkpKTsKIAotICAgICAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbdGhpc10gewogICAgICAgICAgICAgICAgIGRpZFJlY2VpdmVS
ZXNwb25zZSgpOworICAgICAgICAgICAgICAgIGRlcmVmKCk7CiAgICAgICAgICAgICB9KTsKICAg
ICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGludCBzcGxpdFBvcyA9IGhlYWRlci5maW5k
KCI6Iik7Ci0gICAgICAgIGlmIChzcGxpdFBvcyAhPSAtMSkKLSAgICAgICAgICAgIG1fcmVzcG9u
c2Uuc2V0SFRUUEhlYWRlckZpZWxkKGhlYWRlci5sZWZ0KHNwbGl0UG9zKSwgaGVhZGVyLnN1YnN0
cmluZyhzcGxpdFBvcysxKS5zdHJpcFdoaXRlU3BhY2UoKSk7CisgICAgICAgIFN0cmluZ0NhcHR1
cmUgY2FwdHVyZWRIZWFkZXIoaGVhZGVyKTsKKworICAgICAgICByZWYoKTsKKworICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFt0aGlzLCBjYXB0dXJlZEhlYWRlcl0geworICAgICAgICAgICAgaW50
IHNwbGl0UG9zID0gY2FwdHVyZWRIZWFkZXIuc3RyaW5nKCkuZmluZCgiOiIpOworICAgICAgICAg
ICAgaWYgKHNwbGl0UG9zICE9IC0xKQorICAgICAgICAgICAgICAgIG1fcmVzcG9uc2Uuc2V0SFRU
UEhlYWRlckZpZWxkKGNhcHR1cmVkSGVhZGVyLnN0cmluZygpLmxlZnQoc3BsaXRQb3MpLCBjYXB0
dXJlZEhlYWRlci5zdHJpbmcoKS5zdWJzdHJpbmcoc3BsaXRQb3MgKyAxKS5zdHJpcFdoaXRlU3Bh
Y2UoKSk7CisgICAgICAgICAgICBkZXJlZigpOworICAgICAgICB9KTsKICAgICB9CiB9CiAKQEAg
LTQxNyw4ICs0MzQsMTEgQEAgdm9pZCBDdXJsRG93bmxvYWQ6OmRpZFJlY2VpdmVEYXRhKHZvaWQq
CiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOwogCisgICAgcmVmKCk7CisKICAg
ICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCBzaXplXSB7CiAgICAgICAgIGRpZFJlY2VpdmVEYXRh
T2ZMZW5ndGgoc2l6ZSk7CisgICAgICAgIGRlcmVmKCk7CiAgICAgfSk7CiAKICAgICB3cml0ZURh
dGFUb0ZpbGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBzaXplKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9DdXJsRG93bmxvYWQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvQ3VybERvd25sb2Fk
LmgJKHJldmlzaW9uIDE4NzM0MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybC9DdXJsRG93bmxvYWQuaAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUsNyBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoKSB7IH0KIH07CiAKLWNsYXNzIEN1cmxEb3du
bG9hZCB7CitjbGFzcyBDdXJsRG93bmxvYWQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
Q3VybERvd25sb2FkPiB7CiBwdWJsaWM6CiAgICAgQ3VybERvd25sb2FkKCk7CiAgICAgfkN1cmxE
b3dubG9hZCgpOwpAQCAtOTMsNiArOTMsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbml0KEN1cmxE
b3dubG9hZExpc3RlbmVyKiwgY29uc3QgV2ViQ29yZTo6VVJMJik7CiAgICAgdm9pZCBpbml0KEN1
cmxEb3dubG9hZExpc3RlbmVyKiwgUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CiAKKyAgICB2b2lkIHNldExpc3RlbmVyKEN1
cmxEb3dubG9hZExpc3RlbmVyKiBsaXN0ZW5lcikgeyBtX2xpc3RlbmVyID0gbGlzdGVuZXI7IH0K
KwogICAgIGJvb2wgc3RhcnQoKTsKICAgICBib29sIGNhbmNlbCgpOwogCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L3dpbi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vQ2hh
bmdlTG9nCShyZXZpc2lvbiAxODczNDMpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBAQAorMjAxNS0wNy0yNCAgUGVyIEFybmUgVm9s
bGFuICA8cGVhdm9Ab3V0bG9vay5jb20+CisKKyAgICAgICAgW0N1cmxdIENyYXNoIGluIEN1cmxE
b3dubG9hZDo6ZGlkUmVjZWl2ZUhlYWRlciB3aGVuIGRvd25sb2FkaW5nIGZpbGUuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY4MzIKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJsRG93bmxvYWQgc2hv
dWxkIGJlIHJlZmVyZW5jZSBjb3VudGVkIHRvIG1ha2Ugc3VyZSBpdCBzdGlsbAorICAgICAgICBs
aXZlcyB3aGVuIGEgZnVuY3Rpb24gY2FsbCBpcyBpbnZva2VkIG9uIHRoZSBtYWluIHRocmVhZCBm
cm9tCisgICAgICAgIHRoZSBkb3dubG9hZCB0aHJlYWQuCisKKyAgICAgICAgKiBXZWJEb3dubG9h
ZC5oOgorICAgICAgICAqIFdlYkRvd25sb2FkQ3VybC5jcHA6CisgICAgICAgIChXZWJEb3dubG9h
ZDo6aW5pdCk6CisgICAgICAgIChXZWJEb3dubG9hZDo6c3RhcnQpOgorICAgICAgICAoV2ViRG93
bmxvYWQ6OmNhbmNlbCk6CisgICAgICAgIChXZWJEb3dubG9hZDo6ZGVsZXRlc0ZpbGVVcG9uRmFp
bHVyZSk6CisgICAgICAgIChXZWJEb3dubG9hZDo6c2V0RGVsZXRlc0ZpbGVVcG9uRmFpbHVyZSk6
CisgICAgICAgIChXZWJEb3dubG9hZDo6c2V0RGVzdGluYXRpb24pOgorICAgICAgICAoV2ViRG93
bmxvYWQ6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisKIDIwMTUtMDctMjMgIEFsZXggQ2hyaXN0ZW5z
ZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGJ1aWxk
IGZpeCBhZnRlciByMTg3MjQ1LgpJbmRleDogU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L3dpbi9XZWJEb3dubG9hZC5oCShyZXZpc2lv
biAxODczNDMpCisrKyBTb3VyY2UvV2ViS2l0L3dpbi9XZWJEb3dubG9hZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEsNyArMTQxLDcgQEAgcHJvdGVjdGVkOgogI2lmIFVTRShDRk5FVFdPUkspCiAg
ICAgUmV0YWluUHRyPENGVVJMRG93bmxvYWRSZWY+IG1fZG93bmxvYWQ7CiAjZWxpZiBVU0UoQ1VS
TCkKLSAgICBXZWJDb3JlOjpDdXJsRG93bmxvYWQgbV9kb3dubG9hZDsKKyAgICBSZWZQdHI8V2Vi
Q29yZTo6Q3VybERvd25sb2FkPiBtX2Rvd25sb2FkOwogI2VuZGlmCiAgICAgQ09NUHRyPElXZWJN
dXRhYmxlVVJMUmVxdWVzdD4gbV9yZXF1ZXN0OwogICAgIENPTVB0cjxJV2ViRG93bmxvYWREZWxl
Z2F0ZT4gbV9kZWxlZ2F0ZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvd2luL1dlYkRvd25sb2FkQ3Vy
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWRDdXJsLmNw
cAkocmV2aXNpb24gMTg3MzQzKQorKysgU291cmNlL1dlYktpdC93aW4vV2ViRG93bmxvYWRDdXJs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsOCBAQCB2b2lkIFdlYkRvd25sb2FkOjpp
bml0KFJlc291cmNlSGFuZGxlKiBoCiAKICAgICBtX2RlbGVnYXRlID0gZGVsZWdhdGU7CiAKLSAg
ICBtX2Rvd25sb2FkLmluaXQodGhpcywgaGFuZGxlLCByZXF1ZXN0LCByZXNwb25zZSk7CisgICAg
bV9kb3dubG9hZCA9IGFkb3B0UmVmKG5ldyBDdXJsRG93bmxvYWQoKSk7CisgICAgbV9kb3dubG9h
ZC0+aW5pdCh0aGlzLCBoYW5kbGUsIHJlcXVlc3QsIHJlc3BvbnNlKTsKIAogICAgIHN0YXJ0KCk7
CiB9CkBAIC03Miw3ICs3Myw4IEBAIHZvaWQgV2ViRG93bmxvYWQ6OmluaXQoY29uc3QgVVJMJiB1
cmwsIEkKIHsKICAgICBtX2RlbGVnYXRlID0gZGVsZWdhdGU7CiAKLSAgICBtX2Rvd25sb2FkLmlu
aXQodGhpcywgdXJsKTsKKyAgICBtX2Rvd25sb2FkID0gYWRvcHRSZWYobmV3IEN1cmxEb3dubG9h
ZCgpKTsKKyAgICBtX2Rvd25sb2FkLT5pbml0KHRoaXMsIHVybCk7CiB9CiAKIC8vIElXZWJEb3du
bG9hZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkBAIC0xMDEsNyArMTAzLDEwIEBAIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgV2ViRG93bmxvYWQ6OmkKIAogSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBXZWJEb3du
bG9hZDo6c3RhcnQoKQogewotICAgIGlmICghbV9kb3dubG9hZC5zdGFydCgpKQorICAgIGlmICgh
bV9kb3dubG9hZCkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGlmICghbV9kb3dubG9h
ZC0+c3RhcnQoKSkKICAgICAgICAgcmV0dXJuIEVfRkFJTDsKIAogICAgIGlmIChtX2RlbGVnYXRl
KQpAQCAtMTEyLDkgKzExNywxNSBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25s
b2FkOjpzCiAKIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgV2ViRG93bmxvYWQ6OmNhbmNlbCgp
CiB7Ci0gICAgaWYgKCFtX2Rvd25sb2FkLmNhbmNlbCgpKQorICAgIGlmICghbV9kb3dubG9hZCkK
KyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIGlmICghbV9kb3dubG9hZC0+Y2FuY2VsKCkp
CiAgICAgICAgIHJldHVybiBFX0ZBSUw7CiAKKyAgICBtX2Rvd25sb2FkLT5zZXRMaXN0ZW5lcihu
dWxscHRyKTsKKyAgICBtX2Rvd25sb2FkID0gbnVsbHB0cjsKKwogICAgIHJldHVybiBTX09LOwog
fQogCkBAIC0xMjcsMTQgKzEzOCwyMCBAQCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRv
d25sb2FkOjpjCiBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIFdlYkRvd25sb2FkOjpkZWxldGVz
RmlsZVVwb25GYWlsdXJlKAogICAgICAgICAvKiBbb3V0LCByZXR2YWxdICovIEJPT0wqIHJlc3Vs
dCkKIHsKLSAgICAqcmVzdWx0ID0gbV9kb3dubG9hZC5kZWxldGVzRmlsZVVwb25GYWlsdXJlKCkg
PyBUUlVFIDogRkFMU0U7CisgICAgaWYgKCFtX2Rvd25sb2FkKQorICAgICAgICByZXR1cm4gRV9G
QUlMOworCisgICAgKnJlc3VsdCA9IG1fZG93bmxvYWQtPmRlbGV0ZXNGaWxlVXBvbkZhaWx1cmUo
KSA/IFRSVUUgOiBGQUxTRTsKICAgICByZXR1cm4gU19PSzsKIH0KIAogSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBXZWJEb3dubG9hZDo6c2V0RGVsZXRlc0ZpbGVVcG9uRmFpbHVyZSgKICAgICAg
ICAgLyogW2luXSAqLyBCT09MIGRlbGV0ZXNGaWxlVXBvbkZhaWx1cmUpCiB7Ci0gICAgbV9kb3du
bG9hZC5zZXREZWxldGVzRmlsZVVwb25GYWlsdXJlKGRlbGV0ZXNGaWxlVXBvbkZhaWx1cmUpOwor
ICAgIGlmICghbV9kb3dubG9hZCkKKyAgICAgICAgcmV0dXJuIEVfRkFJTDsKKworICAgIG1fZG93
bmxvYWQtPnNldERlbGV0ZXNGaWxlVXBvbkZhaWx1cmUoZGVsZXRlc0ZpbGVVcG9uRmFpbHVyZSk7
CiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKQEAgLTE0Miw5ICsxNTksMTIgQEAgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBXZWJEb3dubG9hZDo6cwogICAgICAgICAvKiBbaW5dICovIEJTVFIgcGF0
aCwgCiAgICAgICAgIC8qIFtpbl0gKi8gQk9PTCBhbGxvd092ZXJ3cml0ZSkKIHsKKyAgICBpZiAo
IW1fZG93bmxvYWQpCisgICAgICAgIHJldHVybiBFX0ZBSUw7CisKICAgICBzaXplX3QgbGVuID0g
d2NzbGVuKHBhdGgpOwogICAgIG1fZGVzdGluYXRpb24gPSBTdHJpbmcocGF0aCwgbGVuKTsKLSAg
ICBtX2Rvd25sb2FkLnNldERlc3RpbmF0aW9uKG1fZGVzdGluYXRpb24pOworICAgIG1fZG93bmxv
YWQtPnNldERlc3RpbmF0aW9uKG1fZGVzdGluYXRpb24pOwogICAgIHJldHVybiBTX09LOwogfQog
CkBAIC0xNzcsNyArMTk3LDcgQEAgdm9pZCBXZWJEb3dubG9hZDo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KCkKICAgICBDT01QdHI8V2ViRG93bmxvYWQ+IHByb3RlY3QgPSB0aGlzOwogCiAgICAgaWYgKG1f
ZGVsZWdhdGUpIHsKLSAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSA9IG1fZG93bmxv
YWQuZ2V0UmVzcG9uc2UoKTsKKyAgICAgICAgUmVzb3VyY2VSZXNwb25zZSByZXNwb25zZSA9IG1f
ZG93bmxvYWQtPmdldFJlc3BvbnNlKCk7CiAgICAgICAgIENPTVB0cjxXZWJVUkxSZXNwb25zZT4g
d2ViUmVzcG9uc2UoQWRvcHRDT00sIFdlYlVSTFJlc3BvbnNlOjpjcmVhdGVJbnN0YW5jZShyZXNw
b25zZSkpOwogICAgICAgICBtX2RlbGVnYXRlLT5kaWRSZWNlaXZlUmVzcG9uc2UodGhpcywgd2Vi
UmVzcG9uc2UuZ2V0KCkpOwogCg==
</data>
<flag name="review"
          id="282631"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>