<?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>106813</bug_id>
          
          <creation_ts>2013-01-14 12:05:47 -0800</creation_ts>
          <short_desc>[V8] V8PerContextData objects&apos; lifetimes should match their V8Context objects</short_desc>
          <delta_ts>2013-05-02 11:51:39 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</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>
          
          <blocked>105495</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Matthew Dempsky">mdempsky</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>806502</commentid>
    <comment_count>0</comment_count>
    <who name="Matthew Dempsky">mdempsky</who>
    <bug_when>2013-01-14 12:05:47 -0800</bug_when>
    <thetext>V8DOMWindowShell creates V8Context and V8PerContextData objects, but while V8Context objects may outlive the window (e.g., by being referenced by an object passed to another window), V8PerContextData objects are destroyed as soon as the V8DOMWindowShell is destroyed.  This causes V8PerContextData::from() to return nullptr, and in turn causes code npCreateV8ScriptObject() to create multiple NPObject* values for the same V8 object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806506</commentid>
    <comment_count>1</comment_count>
      <attachid>182608</attachid>
    <who name="Matthew Dempsky">mdempsky</who>
    <bug_when>2013-01-14 12:12:37 -0800</bug_when>
    <thetext>Created attachment 182608
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806511</commentid>
    <comment_count>2</comment_count>
      <attachid>182608</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-14 12:18:23 -0800</bug_when>
    <thetext>Comment on attachment 182608
Patch

Looks great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806552</commentid>
    <comment_count>3</comment_count>
    <who name="Matthew Dempsky">mdempsky</who>
    <bug_when>2013-01-14 13:24:02 -0800</bug_when>
    <thetext>Hm, perhaps it&apos;s not this simple.  E.g., fast/workers/worker-document-leak.html seems to fail consistently with my patch applied, saying that all 6 of the iframe documents it creates are still alive.

I suspect the other fields in V8PerContextData are transitively keeping the v8::Context alive.

They could perhaps all be made weak, but that seems ugly and fragile.  I don&apos;t really grok V8&apos;s GC scheme well enough to suggest better solutions though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806561</commentid>
    <comment_count>4</comment_count>
      <attachid>182608</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-14 13:31:12 -0800</bug_when>
    <thetext>Comment on attachment 182608
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807679</commentid>
    <comment_count>5</comment_count>
    <who name="Matthew Dempsky">mdempsky</who>
    <bug_when>2013-01-15 14:16:52 -0800</bug_when>
    <thetext>I think the cycles can be eliminated by removing the v8::Persistent handles from V8PerContextData.  Instead, it will need to store its handles inside a v8::Object that in turn is stored in the v8::Context with SetEmbedderData.

A single HashMap&lt;WrapperTypeInfo*,unsigned&gt; can be used for converting WrapperTypeInfo* values into ordinal values, and then used to index into the v8::Object backing store.  m_errorPrototype is at index 0, m_objectPrototype is at index 1, and wrapper objects and constructors are indexes i*2 and i*2+1 respectively.

The V8NPObjectMap can be left as is because although it contains v8::Persistent handles too (in the V8NPObjects), those values already have their lifetimes bound to their NPObject wrappers instead.  Once the NPObjects are released, the V8NPObject will be removed automatically.

Then I think the weak v8::Context handle will actually work as intended.

I&apos;m going to work on implementing this to see if it works.  If anyone objects to the idea or can suggest something better, I&apos;m interested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807704</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-15 14:37:52 -0800</bug_when>
    <thetext>Another thing we need to be careful about is that if the lifetime of V8PerContextData is controlled by the garbage collector, then we need to be prepared for the V8PerContextData object to be destroyed any time garbage collection can run.  Perhaps we need a way for folks who use V8PerContextData keep it alive?  Perhaps if they always have a local handle to the v8::Context that will be enough...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807709</commentid>
    <comment_count>7</comment_count>
    <who name="Matthew Dempsky">mdempsky</who>
    <bug_when>2013-01-15 14:45:41 -0800</bug_when>
    <thetext>Good point.  Since the only way you can get a V8PerContextData is through V8PerContextData::from(v8::Handle&lt;v8::Context&gt;), perhaps we can just document that the caller is responsible for keeping the context alive as long as they&apos;re using the V8PerContextData?  I think that&apos;s already true for all existing users of V8PerContextData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807712</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-01-15 14:47:17 -0800</bug_when>
    <thetext>That seems reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883870</commentid>
    <comment_count>9</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-02 11:51:39 -0700</bug_when>
    <thetext>V8 is gone from WebKit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182608</attachid>
            <date>2013-01-14 12:12:37 -0800</date>
            <delta_ts>2013-01-14 13:31:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106813-20130114120937.patch</filename>
            <type>text/plain</type>
            <size>8640</size>
            <attacher name="Matthew Dempsky">mdempsky</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NjI0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjdmOWJiYzQ1MDIxMmMy
YjQ5ZWQ4NzhmOTI4NmFmODQ2NTRhN2QxZC4uZjFkMzk4YTljNGQ1ODUzZjljZDBkY2VhYTM3MzFl
MjA4ZGI2YWFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEzLTAxLTE0ICBNYXR0
aGV3IERlbXBza3kgIDxtZGVtcHNreUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gVjhQZXJD
b250ZXh0RGF0YSBvYmplY3RzJyBsaWZldGltZXMgc2hvdWxkIG1hdGNoIHRoZWlyIFY4Q29udGV4
dCBvYmplY3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDY4MTMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZXN0OiBwbHVnaW5zL25wcnVudGltZS9lbWJlZC1wcm9wZXJ0eS1yZW1vdmVkLWlmcmFtZS1l
cXVhbGl0eS5odG1sCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmRpc3Bvc2VDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxpemVJZk5lZWRlZCk6
CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oOgorICAgICAgICAoVjhE
T01XaW5kb3dTaGVsbCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVWOFBlckNvbnRleHREYXRhKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhQZXJDb250ZXh0RGF0YTo6aW5pdCk6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5oOgorICAgICAgICAoV2ViQ29y
ZTo6VjhQZXJDb250ZXh0RGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3Jr
ZXJTY3JpcHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlwdENv
bnRyb2xsZXI6OmRpc3Bvc2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlclNjcmlw
dENvbnRyb2xsZXI6OmluaXRpYWxpemVDb250ZXh0SWZOZWVkZWQpOgorCiAyMDEzLTAxLTE0ICBL
ZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbVjhdIE1ha2Ug
YW4gSXNvbGF0ZSBwYXJhbWV0ZXIgbWFuZGF0b3J5IGluIGFzc29jaWF0ZU9iamVjdFdpdGhXcmFw
cGVyKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93
U2hlbGwuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5j
cHAKaW5kZXggMzI3ODYyZGZiMjVlN2JmN2VmYzM0YmM2OGVmNzdiMDg4YTNjOGE4OS4uMGVmMWFi
N2NhYTQwYjRjMWVjMjI3OWZlMzZjMGY4NmM0ZDM0OTZiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKQEAgLTEwOCw4ICsxMDgsNiBAQCB2
b2lkIFY4RE9NV2luZG93U2hlbGw6OmRlc3Ryb3lJc29sYXRlZFNoZWxsKCkKIAogdm9pZCBWOERP
TVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dCgpCiB7Ci0gICAgbV9wZXJDb250ZXh0RGF0YS5j
bGVhcigpOwotCiAgICAgaWYgKG1fY29udGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjI5LDggKzIyNyw4IEBAIGJvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6ZUlm
TmVlZGVkKCkKICAgICAgICAgICAgIHNldEluamVjdGVkU2NyaXB0Q29udGV4dERlYnVnSWQobV9j
b250ZXh0LmdldCgpLCBtX2ZyYW1lLT5zY3JpcHQoKS0+Y29udGV4dERlYnVnSWQobWFpbldpbmRv
dy0+Y29udGV4dCgpKSk7CiAgICAgfQogCi0gICAgbV9wZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29u
dGV4dERhdGE6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwotICAgIGlmICghbV9wZXJDb250ZXh0
RGF0YS0+aW5pdCgpKSB7CisgICAgVjhQZXJDb250ZXh0RGF0YSogcGVyQ29udGV4dERhdGEgPSBW
OFBlckNvbnRleHREYXRhOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAoIXBlckNv
bnRleHREYXRhLT5pbml0KCkpIHsKICAgICAgICAgZGlzcG9zZUNvbnRleHQoKTsKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1Y4RE9NV2luZG93U2hlbGwuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V2luZG93U2hlbGwuaAppbmRleCA3ZDViYWU0MDQ3OTcwYjk1NThlZDhjNDAzODczNzcxOTk3N2Zi
YzRlLi5lNTVjMzNkYmEzM2FiZTAzZmRhNzJmN2NhZTQ2N2Y5MjM5MzFiODRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCkBAIC0xMDMsOCArMTAz
LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RE9NV3JhcHBlcldvcmxkPiBtX3dvcmxkOwogICAg
IHY4OjpJc29sYXRlKiBtX2lzb2xhdGU7CiAKLSAgICBPd25QdHI8VjhQZXJDb250ZXh0RGF0YT4g
bV9wZXJDb250ZXh0RGF0YTsKLQogICAgIFNjb3BlZFBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IG1f
Y29udGV4dDsKICAgICBTY29wZWRQZXJzaXN0ZW50PHY4OjpPYmplY3Q+IG1fZ2xvYmFsOwogICAg
IFNjb3BlZFBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gbV9kb2N1bWVudDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250ZXh0RGF0YS5jcHAKaW5kZXggNGM1OGZjMDQwYTJk
MTBjMmI5MDkxZjAxOTI1ZTI5NjUzZjQ4ZDhmMC4uZGEwMTIzM2NlMzcyMjU0NjU1MjU1MDQ0Nzc1
MzdmY2YwZjI3ZDVlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQ
ZXJDb250ZXh0RGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJD
b250ZXh0RGF0YS5jcHAKQEAgLTc3LDkgKzc3LDE2IEBAIHZvaWQgVjhQZXJDb250ZXh0RGF0YTo6
ZGlzcG9zZSgpCiAgICAgbV8jI25hbWUjI1Byb3RvdHlwZS5zZXQocHJvdG90eXBlVmFsdWUpOyBc
CiB9CiAKK3N0YXRpYyB2b2lkIGRlbGV0ZVY4UGVyQ29udGV4dERhdGEodjg6OlBlcnNpc3RlbnQ8
djg6OlZhbHVlPiB2YWx1ZSwgdm9pZCogY29udGV4dCkKK3sKKyAgICBWOFBlckNvbnRleHREYXRh
KiBwZXJDb250ZXh0RGF0YSA9IHN0YXRpY19jYXN0PFY4UGVyQ29udGV4dERhdGEqPihjb250ZXh0
KTsKKyAgICBkZWxldGUgcGVyQ29udGV4dERhdGE7Cit9CisKIGJvb2wgVjhQZXJDb250ZXh0RGF0
YTo6aW5pdCgpCiB7CiAgICAgbV9jb250ZXh0LT5TZXRBbGlnbmVkUG9pbnRlckluRW1iZWRkZXJE
YXRhKHY4Q29udGV4dFBlckNvbnRleHREYXRhSW5kZXgsIHRoaXMpOworICAgIG1fY29udGV4dC5N
YWtlV2Vhayh0aGlzLCBkZWxldGVWOFBlckNvbnRleHREYXRhKTsKIAogICAgIHY4OjpIYW5kbGU8
djg6OlN0cmluZz4gcHJvdG90eXBlU3RyaW5nID0gdjg6OlN0cmluZzo6TmV3U3ltYm9sKCJwcm90
b3R5cGUiKTsKICAgICBpZiAocHJvdG90eXBlU3RyaW5nLklzRW1wdHkoKSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UGVyQ29udGV4dERhdGEuaAppbmRleCA4ZmFlYjYyNmU3MDU3
ZjAwYWE3YTZkZDUxMDEzNGNmMzNhNzMxMjFiLi4wYWU5NTVhNTA4NDQ0MjBkN2IwNTU4ZDYyM2Nl
YjNkNDBlNWVlZDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFBl
ckNvbnRleHREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQZXJDb250
ZXh0RGF0YS5oCkBAIC01NCw5ICs1NCw5IEBAIGVudW0gVjhDb250ZXh0RW1iZWRkZXJEYXRhRmll
bGQgewogCiBjbGFzcyBWOFBlckNvbnRleHREYXRhIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c093blB0cjxWOFBlckNvbnRleHREYXRhPiBjcmVhdGUodjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRl
eHQ+IGNvbnRleHQpCisgICAgc3RhdGljIFY4UGVyQ29udGV4dERhdGEqIGNyZWF0ZSh2ODo6UGVy
c2lzdGVudDx2ODo6Q29udGV4dD4gY29udGV4dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgVjhQZXJDb250ZXh0RGF0YShjb250ZXh0KSk7CisgICAgICAgIHJldHVybiBuZXcg
VjhQZXJDb250ZXh0RGF0YShjb250ZXh0KTsKICAgICB9CiAKICAgICB+VjhQZXJDb250ZXh0RGF0
YSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJTY3JpcHRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENv
bnRyb2xsZXIuY3BwCmluZGV4IDJhN2UxNjM0NjVjYWNjZWUwNjYyZDU1NDA5ZTQ1NDg4ZjcyOWNk
YzUuLjgyMjM4MWVkYTJiZDIzY2E3NzFmYzU1OWJjNGQ0NzA5MWRkMmE3ODkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlclNjcmlwdENvbnRyb2xsZXIuY3Bw
CkBAIC04Niw3ICs4Niw2IEBAIFdvcmtlclNjcmlwdENvbnRyb2xsZXI6On5Xb3JrZXJTY3JpcHRD
b250cm9sbGVyKCkKIAogdm9pZCBXb3JrZXJTY3JpcHRDb250cm9sbGVyOjpkaXNwb3NlQ29udGV4
dCgpCiB7Ci0gICAgbV9wZXJDb250ZXh0RGF0YS5jbGVhcigpOwogICAgIG1fY29udGV4dC5jbGVh
cigpOwogfQogCkBAIC0xMDUsOCArMTA0LDggQEAgYm9vbCBXb3JrZXJTY3JpcHRDb250cm9sbGVy
Ojppbml0aWFsaXplQ29udGV4dElmTmVlZGVkKCkKIAogICAgIHY4OjpDb250ZXh0OjpTY29wZSBz
Y29wZShjb250ZXh0KTsKIAotICAgIG1fcGVyQ29udGV4dERhdGEgPSBWOFBlckNvbnRleHREYXRh
OjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAoIW1fcGVyQ29udGV4dERhdGEtPmlu
aXQoKSkgeworICAgIFY4UGVyQ29udGV4dERhdGEqIHBlckNvbnRleHREYXRhID0gVjhQZXJDb250
ZXh0RGF0YTo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFwZXJDb250ZXh0RGF0
YS0+aW5pdCgpKSB7CiAgICAgICAgIGRpc3Bvc2VDb250ZXh0KCk7CiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CkBAIC0xMjAsNyArMTE5LDcgQEAgYm9vbCBXb3JrZXJTY3JpcHRDb250cm9s
bGVyOjppbml0aWFsaXplQ29udGV4dElmTmVlZGVkKCkKICAgICBpZiAoIW1fd29ya2VyQ29udGV4
dC0+aXNEZWRpY2F0ZWRXb3JrZXJDb250ZXh0KCkpCiAgICAgICAgIGNvbnRleHRUeXBlID0gJlY4
U2hhcmVkV29ya2VyQ29udGV4dDo6aW5mbzsKICNlbmRpZgotICAgIHY4OjpIYW5kbGU8djg6OkZ1
bmN0aW9uPiB3b3JrZXJDb250ZXh0Q29uc3RydWN0b3IgPSBtX3BlckNvbnRleHREYXRhLT5jb25z
dHJ1Y3RvckZvclR5cGUoY29udGV4dFR5cGUpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9u
PiB3b3JrZXJDb250ZXh0Q29uc3RydWN0b3IgPSBwZXJDb250ZXh0RGF0YS0+Y29uc3RydWN0b3JG
b3JUeXBlKGNvbnRleHRUeXBlKTsKICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4ganNXb3JrZXJD
b250ZXh0ID0gVjhPYmplY3RDb25zdHJ1Y3Rvcjo6bmV3SW5zdGFuY2Uod29ya2VyQ29udGV4dENv
bnN0cnVjdG9yKTsKICAgICBpZiAoanNXb3JrZXJDb250ZXh0LklzRW1wdHkoKSkgewogICAgICAg
ICBkaXNwb3NlQ29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGZjYWVjYzA1MTMxODgxYWM2Y2NhMTEwYjVjZTU0
NmUyN2RhMDg5YjkuLjQ3OWEyMmFkODNjN2ExMzI0ZDYwNTIwZGI1OGViNTY1M2U4ZDg2MDMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMy0wMS0xNCAgTWF0dGhldyBEZW1wc2t5ICA8bWRlbXBz
a3lAZ29vZ2xlLmNvbT4KKworICAgICAgICBbVjhdIFY4UGVyQ29udGV4dERhdGEgb2JqZWN0cycg
bGlmZXRpbWVzIHNob3VsZCBtYXRjaCB0aGVpciBWOENvbnRleHQgb2JqZWN0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA2ODEzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbHVnaW5zL25wcnVudGlt
ZS9lbWJlZC1wcm9wZXJ0eS1yZW1vdmVkLWlmcmFtZS1lcXVhbGl0eS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHBsdWdpbnMvbnBydW50aW1lL2VtYmVkLXByb3BlcnR5LXJlbW92ZWQt
aWZyYW1lLWVxdWFsaXR5Lmh0bWw6IEFkZGVkLgorCiAyMDEzLTAxLTE0ICBMZXZpIFdlaW50cmF1
YiAgPGxldml3QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGdhcmRlbmluZy4g
TWFya2luZyBlZGl0aW5nL3NwZWxsaW5nL3NwZWxsY2hlY2stc2VxdWVuY2VudW0uaHRtbApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGx1Z2lucy9ucHJ1bnRpbWUvZW1iZWQtcHJvcGVydHktcmVt
b3ZlZC1pZnJhbWUtZXF1YWxpdHktZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGx1Z2lucy9u
cHJ1bnRpbWUvZW1iZWQtcHJvcGVydHktcmVtb3ZlZC1pZnJhbWUtZXF1YWxpdHktZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjY2MWVhN2JlNWQ3ZGIxYTQxN2FjZjBjZTljNzc4ZDY2ZWMzMjU2YTUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbHVnaW5zL25wcnVudGltZS9lbWJlZC1w
cm9wZXJ0eS1yZW1vdmVkLWlmcmFtZS1lcXVhbGl0eS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwz
IEBACisKK1NlbmQgdHdvIHJlZmVyZW5jZXMgb2YgYSBET00gb2JqZWN0IG9yaWdpbmF0aW5nIGZy
b20gYSByZW1vdmVkIGlmcmFtZSB0byB0aGUgcGx1Z2luIGZvciBpZGVudGl0eSBjb21wYXJpc29u
IGluIEMrKy4KK1BBU1MKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsdWdpbnMvbnBydW50aW1l
L2VtYmVkLXByb3BlcnR5LXJlbW92ZWQtaWZyYW1lLWVxdWFsaXR5Lmh0bWwgYi9MYXlvdXRUZXN0
cy9wbHVnaW5zL25wcnVudGltZS9lbWJlZC1wcm9wZXJ0eS1yZW1vdmVkLWlmcmFtZS1lcXVhbGl0
eS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmYxNjY1NDNhMjAxMDlhNTQ2NjlkM2ExMGJlYjcyYTc0NWQ4NDY0
MDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbHVnaW5zL25wcnVudGltZS9lbWJl
ZC1wcm9wZXJ0eS1yZW1vdmVkLWlmcmFtZS1lcXVhbGl0eS5odG1sCkBAIC0wLDAgKzEsMjMgQEAK
Kzxib2R5PgorPGVtYmVkIGlkPSJwbHVnaW4iIHR5cGU9ImFwcGxpY2F0aW9uL3gtd2Via2l0LXRl
c3QtbmV0c2NhcGUiPjxicj4KKzxpZnJhbWUgaWQ9ImZyYW1lIiBzcmNkb2M9IiZsdDtzY3JpcHQm
Z3Q7cGFyZW50LnBsdWdpbi5yZW1lbWJlcih3aW5kb3cpJmx0Oy9zY3JpcHQmZ3Q7Ij48L2lmcmFt
ZT4KKzxkaXY+U2VuZCB0d28gcmVmZXJlbmNlcyBvZiBhIERPTSBvYmplY3Qgb3JpZ2luYXRpbmcg
ZnJvbSBhIHJlbW92ZWQgaWZyYW1lIHRvIHRoZSBwbHVnaW4gZm9yIGlkZW50aXR5IGNvbXBhcmlz
b24gaW4gQysrLjwvZGl2PgorPGRpdiBpZD0icmVzdWx0Ij5VTktOT1dOPC9kaXY+Cis8c2NyaXB0
PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CisgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CisgICAgdGVzdFJ1bm5lci53YWl0VW50aWxEb25lKCk7Cit9CisKK3dpbmRvdy5vbmxvYWQgPSBm
dW5jdGlvbigpIHsKKyAgICB2YXIgcGx1Z2luID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Bs
dWdpbicpOworICAgIHZhciBvYmogPSBwbHVnaW4uZ2V0UmVtZW1iZXJlZE9iamVjdCgpOworICAg
IHZhciBmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmcmFtZScpOworICAgIGZyYW1l
LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZnJhbWUpOworICAgIHZhciBwYXNzID0gKG9iaiA9PT0g
b2JqKSA9PT0gcGx1Z2luLm9iamVjdHNBcmVTYW1lKG9iaiwgb2JqKTsKKyAgICBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgncmVzdWx0JykudGV4dENvbnRlbnQgPSBwYXNzID8gJ1BBU1MnIDogJ0ZB
SUwnOworICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgdGVzdFJ1bm5lci5ub3Rp
ZnlEb25lKCk7Cit9Cis8L3NjcmlwdD4KKzwvYm9keT4K
</data>
<flag name="review"
          id="200677"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>