<?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>226963</bug_id>
          
          <creation_ts>2021-06-14 03:23:29 -0700</creation_ts>
          <short_desc>DisplayList::ImageBuffer calls virtual function erroneously in destructor</short_desc>
          <delta_ts>2022-02-19 08:16:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>226917</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>dino</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1769344</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-06-14 03:23:29 -0700</bug_when>
    <thetext>ConcreteImageBuffer calls virtual function erroneously in destructor

Calls flushDrawingContext().

Virtual function call ends up calling the currently destructed class version of the function, not the final overridden function.

In case of all ConcreteImageBuffer inheritance chains, this is semi-surprising behavioral difference in case of RemoteImageBufferProxy which overrides flush.
The code that is produced is incorrect as per logic.
As it stands today, the code doesn&apos;t crash as the ~RemoteImageBufferProxy flushes and that causes early-out in ConcreteImageBuffer::flushDrawingContext().

However, if ~RemoteImageBufferProxy does not cause the early out, it appears that the ConcreteImageBuffer::flushDrawingContext() seems to crash in a non-trivial convoluted way.

As this is surprising and typically incorrect pattern, it should be mostly not done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769345</commentid>
    <comment_count>1</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-06-14 03:28:00 -0700</bug_when>
    <thetext>Correction: DisplayList::ImageBuffer, not ConcreteImageBuffer, calls the virtual function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769350</commentid>
    <comment_count>2</comment_count>
      <attachid>431309</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-06-14 04:37:31 -0700</bug_when>
    <thetext>Created attachment 431309
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771248</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-21 03:24:31 -0700</bug_when>
    <thetext>&lt;rdar://problem/79554863&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771466</commentid>
    <comment_count>4</comment_count>
      <attachid>431309</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-06-21 14:46:04 -0700</bug_when>
    <thetext>Comment on attachment 431309
Patch

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

&gt; Source/WebCore/ChangeLog:27
&gt; +        Make the destructor public because it&apos;d be surprising that the instances
&gt; +        are intended to be holdable via `ImageBuffer` reference and via the final class
&gt; +        references but not via the intermediate class references.

I do not understand what this statement means. Also I think this destructor of DisplayList::ImageBuffer can be protected now.

&gt; Source/WebCore/platform/graphics/PlatformImageBuffer.h:87
&gt; +class DisplayListUnacceleratedImageBuffer final : public DisplayList::ImageBuffer&lt;UnacceleratedImageBufferBackend&gt; {
&gt; +    using Base = DisplayList::ImageBuffer&lt;UnacceleratedImageBufferBackend&gt;;
&gt; +    using Base::Base;
&gt; +public:
&gt; +    static auto create(const WebCore::FloatSize&amp; size, float resolutionScale, const WebCore::DestinationColorSpace&amp; colorSpace, WebCore::PixelFormat pixelFormat, const HostWindow* hostWindow = nullptr)
&gt; +    {
&gt; +        return Base::create&lt;DisplayListUnacceleratedImageBuffer&gt;(size, resolutionScale, colorSpace, pixelFormat, hostWindow);
&gt; +    }
&gt; +    ~DisplayListUnacceleratedImageBuffer() final
&gt; +    {
&gt; +        flushDrawingContext();
&gt; +    }
&gt; +};
&gt; +
&gt; +class DisplayListAcceleratedImageBuffer final : public DisplayList::ImageBuffer&lt;AcceleratedImageBufferBackend&gt; {
&gt; +    using Base = DisplayList::ImageBuffer&lt;AcceleratedImageBufferBackend&gt;;
&gt; +    using Base::Base;
&gt; +public:
&gt; +    static auto create(const WebCore::FloatSize&amp; size, float resolutionScale, const WebCore::DestinationColorSpace&amp; colorSpace, WebCore::PixelFormat pixelFormat, const HostWindow* hostWindow = nullptr)
&gt; +    {
&gt; +        return Base::create&lt;DisplayListAcceleratedImageBuffer&gt;(size, resolutionScale, colorSpace, pixelFormat, hostWindow);
&gt; +    }
&gt; +    ~DisplayListAcceleratedImageBuffer() final
&gt; +    {
&gt; +        flushDrawingContext();
&gt; +    }
&gt; +};

This repeated code can be simplified by using templates:

// maybe in a new file or in DisplayListImageBuffer.h
namespace WebCore {
namespace DisplayList {

template&lt;typename BackendType&gt;
class ConcreteImageBuffer final : public ImageBuffer&lt;BackendType&gt; {
    using Base = ImageBuffer&lt;BackendType&gt;;
    using Base::Base;
public:
    static auto create(const WebCore::FloatSize&amp; size, float resolutionScale, const WebCore::DestinationColorSpace&amp; colorSpace, WebCore::PixelFormat pixelFormat, const HostWindow* hostWindow = nullptr)
    {
        return Base::template create&lt;ConcreteImageBuffer&gt;(size, resolutionScale, colorSpace, pixelFormat, hostWindow);
    }
    
    ~ConcreteImageBuffer() final
    {
        Base::flushDrawingContext();
    }
};

} // DisplayList
} // namespace WebCore

// And in this file:
using DisplayListUnacceleratedImageBuffer = DisplayList::ConcreteImageBuffer&lt;UnacceleratedImageBufferBackend&gt;;
using DisplayListAcceleratedImageBuffer = DisplayList::ConcreteImageBuffer&lt;AcceleratedImageBufferBackend&gt;;

&gt; Source/WebCore/platform/graphics/displaylists/DisplayListImageBuffer.h:63
&gt; -    ~ImageBuffer()
&gt; +    ~ImageBuffer() override

What &apos;override&apos; adds here? I am not sure what is the webkit coding style for overriding virtual destructor. I found most of the classes add virtual before the overridden destructor, e.g. BitmapImage, RenderLayerModelObject, RenderImage, CachedImage. So following this pattern this code should be:

    virtual ~ImageBuffer() { ... }

I also think this destructor can be protected now.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteImageBufferProxy.h:66
&gt; -    ~RemoteImageBufferProxy()
&gt; +    ~RemoteImageBufferProxy() override

I think this should be 

virtual ~RemoteImageBufferProxy() { ... }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843846</commentid>
    <comment_count>5</comment_count>
      <attachid>431309</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2022-02-19 08:16:05 -0800</bug_when>
    <thetext>Comment on attachment 431309
Patch

Clearing old review flag. Please rebase and mark for review if necessary.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431309</attachid>
            <date>2021-06-14 04:37:31 -0700</date>
            <delta_ts>2022-02-19 08:16:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226963-20210614143730.patch</filename>
            <type>text/plain</type>
            <size>8980</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4ODIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDU0Mjk5NTRhMWQxOGNi
ZTdiYThkODhkOGY1MjUyMDlmZDg2NDhiZS4uMzM1YzZhZWE2MmZkYzg5MTc2YmRiZWZmOWIyZDQz
MDdiNzQ5MjVlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIxLTA2LTE0ICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgRGlzcGxheUxpc3Q6
OkltYWdlQnVmZmVyIGNhbGxzIHZpcnR1YWwgZnVuY3Rpb24gZXJyb25lb3VzbHkgaW4gZGVzdHJ1
Y3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2
OTYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQg
aXMgc3VycHJpc2luZyB0byBjYWxsIGEgdmlydHVhbCBmdW5jdGlvbiBmcm9tIHRoZSBkZXN0cnVj
dG9yIG9mIG5vbi1maW5hbAorICAgICAgICBjbGFzcy4gSXQgYXBwZWFycyB0aGF0IHRoZSBpbnRl
bnRpb24gb2YgdGhlIGNhbGwgd2FzIHRvIGludm9rZSB0aGUgb3ZlcnJpZGRlbgorICAgICAgICBm
dW5jdGlvbmFsaXR5IGJ1dCB0aGlzIHdpbGwgbm90IGhhcHBlbi4KKworICAgICAgICBObyBuZXcg
dGVzdHMsIHJlZmFjdG9yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1J
bWFnZUJ1ZmZlci5oOgorICAgICAgICBDYWxsIHRoZSBmdW5jdGlvbiBvbmx5IGluIHRoZSBmaW5h
bCBjbGFzc2VzLgorICAgICAgICBNYXJrIHRoZSBjbGFzc2VzIGZpbmFsLgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaDoK
KyAgICAgICAgUmVtb3ZlIHRoZSBgZmx1c2hEcmF3aW5nQ29udGV4dCgpYCBjYWxsIGZyb20gdGhl
IG1pZGRsZSBvZiB0aGUKKyAgICAgICAgaW5oZXJpdGFuY2UgY2hhaW4uCisgICAgICAgIFJlbW92
ZSB0aGUgYERpc3BsYXlMaXN0SW1hZ2VCdWZmZXI6OmNyZWF0ZSgpYCBmdW5jdGlvbnMgYXMKKyAg
ICAgICAgdGhlIGNsYXNzIG5vdCBpbnRlbmRlZCB0byBiZSBjb25zdHJ1Y3RpYmxlIGFueW1vcmUu
CisgICAgICAgIE1ha2UgdGhlIGNvbnN0cnVjdG9ycyBwdWJsaWMgYmVjYXVzZSBvdGhlcndpc2Ug
cGF0dGVybiBvZgorICAgICAgICBgdXNpbmcgQmFzZTo6QmFzZTtgIHdvdWxkIGV4cG9zZSB0aGUg
Y29uc3RydWN0b3JzIGFzIHByb3RlY3RlZC4KKyAgICAgICAgTWFrZSB0aGUgZGVzdHJ1Y3RvciBw
dWJsaWMgYmVjYXVzZSBpdCdkIGJlIHN1cnByaXNpbmcgdGhhdCB0aGUgaW5zdGFuY2VzCisgICAg
ICAgIGFyZSBpbnRlbmRlZCB0byBiZSBob2xkYWJsZSB2aWEgYEltYWdlQnVmZmVyYCByZWZlcmVu
Y2UgYW5kIHZpYSB0aGUgZmluYWwgY2xhc3MKKyAgICAgICAgcmVmZXJlbmNlcyBidXQgbm90IHZp
YSB0aGUgaW50ZXJtZWRpYXRlIGNsYXNzIHJlZmVyZW5jZXMuCisKIDIwMjEtMDYtMTQgIEtpbW1v
IEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBGaWx0ZXJFZmZlY3RS
ZW5kZXJlckNvcmVJbWFnZSBjb3VsZCBiZSBzaW1wbGVyIGFuZCBtb3JlIG1lbW9yeSBlZmZpY2ll
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9D
aGFuZ2VMb2cKaW5kZXggN2RhYzE0NTE0NTcwYzczMWY5ZTNkZmQwODkzNWI4MTc4NTMwZDQ5OC4u
NGJiNTc2ZTU3MGExMTcwMTg4NTg5NzRlOTk1Y2QwZjlmYzFlOWJjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNSBAQAorMjAyMS0wNi0xNCAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUu
Y29tPgorCisgICAgICAgIERpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlciBjYWxscyB2aXJ0dWFsIGZ1
bmN0aW9uIGVycm9uZW91c2x5IGluIGRlc3RydWN0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjk2MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3Rl
SW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICBNYXJrIFJlbW90ZUltYWdlQnVmZmVyUHJveHkg
YXMgZmluYWwgaW4gb3JkZXIgdG8gaGlnaGxpZ2h0CisgICAgICAgIHRoYXQgdGhlIHZpcnR1YWwg
ZnVuY3Rpb24gY2FsbCBpcyBlYXNpbHkgdW5kZXJzdGFuZGFibGUKKyAgICAgICAgYW5kIGFzIGlu
dGVuZGVkLgorCiAyMDIxLTA2LTEzICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUu
Y29tPgogCiAgICAgICAgIFt3YXRjaE9TXSBRdWlja2JvYXJkIFVJIGZvciBmb2N1c2VkIHNlbGVj
dCBlbGVtZW50cyBzaG91bGQgbm90IGFsbG93IHRoZSB1c2VyIHRvIGNoYW5nZSB0aGUgaW5wdXQg
bGFuZ3VhZ2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtSW1hZ2VCdWZmZXIuaAppbmRleCAzZWZkNDMxYzU4YzFjYzU2MGM4YTEyZmU2MzMwMzQ5
Y2ZmYTE2Y2IxLi4wNjBlZDMyOGJmYzMxNzIzNDAwYTIwNDRmMWE2NTQ3Yzg2ZWU1MzQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlQnVm
ZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFn
ZUJ1ZmZlci5oCkBAIC01NywxMiArNTcsMzkgQEAgdXNpbmcgQWNjZWxlcmF0ZWRJbWFnZUJ1ZmZl
ckJhY2tlbmQgPSBVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kOwogI2VuZGlmCiAKIHVz
aW5nIFVuYWNjZWxlcmF0ZWRJbWFnZUJ1ZmZlciA9IENvbmNyZXRlSW1hZ2VCdWZmZXI8VW5hY2Nl
bGVyYXRlZEltYWdlQnVmZmVyQmFja2VuZD47Ci11c2luZyBEaXNwbGF5TGlzdFVuYWNjZWxlcmF0
ZWRJbWFnZUJ1ZmZlciA9IERpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxVbmFjY2VsZXJhdGVkSW1h
Z2VCdWZmZXJCYWNrZW5kPjsKLXVzaW5nIERpc3BsYXlMaXN0QWNjZWxlcmF0ZWRJbWFnZUJ1ZmZl
ciA9IERpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZEltYWdlQnVmZmVyQmFja2Vu
ZD47CisKK2NsYXNzIERpc3BsYXlMaXN0VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyIGZpbmFsIDog
cHVibGljIERpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxVbmFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJC
YWNrZW5kPiB7CisgICAgdXNpbmcgQmFzZSA9IERpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxVbmFj
Y2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPjsKKyAgICB1c2luZyBCYXNlOjpCYXNlOworcHVi
bGljOgorICAgIHN0YXRpYyBhdXRvIGNyZWF0ZShjb25zdCBXZWJDb3JlOjpGbG9hdFNpemUmIHNp
emUsIGZsb2F0IHJlc29sdXRpb25TY2FsZSwgY29uc3QgV2ViQ29yZTo6RGVzdGluYXRpb25Db2xv
clNwYWNlJiBjb2xvclNwYWNlLCBXZWJDb3JlOjpQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCwgY29u
c3QgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IG51bGxwdHIpCisgICAgeworICAgICAgICByZXR1
cm4gQmFzZTo6Y3JlYXRlPERpc3BsYXlMaXN0VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyPihzaXpl
LCByZXNvbHV0aW9uU2NhbGUsIGNvbG9yU3BhY2UsIHBpeGVsRm9ybWF0LCBob3N0V2luZG93KTsK
KyAgICB9CisgICAgfkRpc3BsYXlMaXN0VW5hY2NlbGVyYXRlZEltYWdlQnVmZmVyKCkgZmluYWwK
KyAgICB7CisgICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICB9Cit9OworCitjbGFz
cyBEaXNwbGF5TGlzdEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXIgZmluYWwgOiBwdWJsaWMgRGlzcGxh
eUxpc3Q6OkltYWdlQnVmZmVyPEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXJCYWNrZW5kPiB7CisgICAg
dXNpbmcgQmFzZSA9IERpc3BsYXlMaXN0OjpJbWFnZUJ1ZmZlcjxBY2NlbGVyYXRlZEltYWdlQnVm
ZmVyQmFja2VuZD47CisgICAgdXNpbmcgQmFzZTo6QmFzZTsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
YXV0byBjcmVhdGUoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0
aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFj
ZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEhvc3RXaW5kb3cqIGhv
c3RXaW5kb3cgPSBudWxscHRyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEJhc2U6OmNyZWF0ZTxE
aXNwbGF5TGlzdEFjY2VsZXJhdGVkSW1hZ2VCdWZmZXI+KHNpemUsIHJlc29sdXRpb25TY2FsZSwg
Y29sb3JTcGFjZSwgcGl4ZWxGb3JtYXQsIGhvc3RXaW5kb3cpOworICAgIH0KKyAgICB+RGlzcGxh
eUxpc3RBY2NlbGVyYXRlZEltYWdlQnVmZmVyKCkgZmluYWwKKyAgICB7CisgICAgICAgIGZsdXNo
RHJhd2luZ0NvbnRleHQoKTsKKyAgICB9Cit9OwogCiAjaWYgSEFWRShJT1NVUkZBQ0UpCiBjbGFz
cyBJT1N1cmZhY2VJbWFnZUJ1ZmZlciBmaW5hbCA6IHB1YmxpYyBDb25jcmV0ZUltYWdlQnVmZmVy
PEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD4gewogICAgIHVzaW5nIEJhc2UgPSBDb25jcmV0
ZUltYWdlQnVmZmVyPEltYWdlQnVmZmVySU9TdXJmYWNlQmFja2VuZD47CisgICAgdXNpbmcgQmFz
ZTo6QmFzZTsKIHB1YmxpYzoKICAgICBzdGF0aWMgYXV0byBjcmVhdGUoY29uc3QgV2ViQ29yZTo6
RmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUsIGNvbnN0IFdlYkNvcmU6OkRl
c3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgV2ViQ29yZTo6UGl4ZWxGb3JtYXQgcGl4
ZWxGb3JtYXQsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBudWxscHRyKQogICAgIHsK
QEAgLTcyLDcgKzk5LDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIEJhc2U6OmNy
ZWF0ZTxJT1N1cmZhY2VJbWFnZUJ1ZmZlcj4oc2l6ZSwgY29udGV4dCk7CiAgICAgfQotICAgIHVz
aW5nIEJhc2U6OkJhc2U7CiAKICAgICBJT1N1cmZhY2UmIHN1cmZhY2UoKSB7IHJldHVybiAqbV9i
YWNrZW5kLT5zdXJmYWNlKCk7IH0KIH07CkBAIC04MSw3ICsxMDcsNiBAQCB1c2luZyBBY2NlbGVy
YXRlZEltYWdlQnVmZmVyID0gSU9TdXJmYWNlSW1hZ2VCdWZmZXI7CiB1c2luZyBBY2NlbGVyYXRl
ZEltYWdlQnVmZmVyID0gQ29uY3JldGVJbWFnZUJ1ZmZlcjxVbmFjY2VsZXJhdGVkSW1hZ2VCdWZm
ZXJCYWNrZW5kPjsKICNlbmRpZgogCi0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2lmIEhB
VkUoSU9TVVJGQUNFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEltYWdlQnVmZmVyLmgK
aW5kZXggODFiOTI0NzRlMjRlY2QyMzZmMjIwNzc0ZWQxY2JjZjg0NjlmMzI3OC4uYjllMzhlNjQ3
N2JlYjg5MDk4NjUxODBiYzVjMzk4MGViZDI1MWE1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlMaXN0SW1hZ2VCdWZmZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlz
cGxheUxpc3RJbWFnZUJ1ZmZlci5oCkBAIC0zMiwyMyArMzIsMTQgQEAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIG5hbWVzcGFjZSBEaXNwbGF5TGlzdCB7CiAKKy8vIEJhc2UgY2xhc3MgZm9yIEltYWdl
QnVmZmVycyB0aGF0IGhhdmUgYSBiYWNraW5nIHN0b3JlIGltcGxlbWVudGVkIGJ5IHNwZWNpZmlj
IGJhY2tlbmQKKy8vIGFuZCB1c2UgZGlzcGxheSBsaXN0IGFzIGludGVybWVkaWF0ZSBiYWNraW5n
IHN0b3JlLgogdGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CiBjbGFzcyBJbWFnZUJ1ZmZl
ciA6IHB1YmxpYyBDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiB7CiAgICAgdXNpbmcg
QmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIgPSBDb25jcmV0ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBl
PjsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bG9naWNhbFNpemU7CiAgICAg
dXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmJhc2VUcmFuc2Zvcm07Ci0KIHB1YmxpYzoK
LSAgICBzdGF0aWMgYXV0byBjcmVhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCByZXNv
bHV0aW9uU2NhbGUsIGNvbnN0IERlc3RpbmF0aW9uQ29sb3JTcGFjZSYgY29sb3JTcGFjZSwgUGl4
ZWxGb3JtYXQgcGl4ZWxGb3JtYXQsIGNvbnN0IEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCi0gICAg
ewotICAgICAgICByZXR1cm4gQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnRlbXBsYXRlIGNyZWF0
ZTxJbWFnZUJ1ZmZlcj4oc2l6ZSwgcmVzb2x1dGlvblNjYWxlLCBjb2xvclNwYWNlLCBwaXhlbEZv
cm1hdCwgaG9zdFdpbmRvdyk7Ci0gICAgfQotCi0gICAgc3RhdGljIGF1dG8gY3JlYXRlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSwgY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQotICAgIHsK
LSAgICAgICAgcmV0dXJuIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjp0ZW1wbGF0ZSBjcmVhdGU8
SW1hZ2VCdWZmZXI+KHNpemUsIGNvbnRleHQpOwotICAgIH0KLQogICAgIEltYWdlQnVmZmVyKGNv
bnN0IEltYWdlQnVmZmVyQmFja2VuZDo6UGFyYW1ldGVycyYgcGFyYW1ldGVycywgc3RkOjp1bmlx
dWVfcHRyPEJhY2tlbmRUeXBlPiYmIGJhY2tlbmQpCiAgICAgICAgIDogQmFzZUNvbmNyZXRlSW1h
Z2VCdWZmZXIocGFyYW1ldGVycywgV1RGTW92ZShiYWNrZW5kKSkKICAgICAgICAgLCBtX2RyYXdp
bmdDb250ZXh0KGxvZ2ljYWxTaXplKCksIGJhc2VUcmFuc2Zvcm0oKSkKQEAgLTY5LDExICs2MCwx
MiBAQCBwdWJsaWM6CiAgICAgICAgIG1fZHJhd2luZ0NvbnRleHQuZGlzcGxheUxpc3QoKS5zZXRJ
dGVtQnVmZmVyUmVhZGluZ0NsaWVudChtX3JlYWRpbmdDbGllbnQuZ2V0KCkpOwogICAgIH0KIAot
ICAgIH5JbWFnZUJ1ZmZlcigpCisgICAgfkltYWdlQnVmZmVyKCkgb3ZlcnJpZGUKICAgICB7Ci0g
ICAgICAgIGZsdXNoRHJhd2luZ0NvbnRleHQoKTsKKyAgICAgICAgLy8gU3ViY2xhc3NlcyBhcmUg
ZXhwZWN0ZWQgdG8gZmx1c2ggb3IgZGlzY2FyZCB0aGUgZGlzcGxheSBsaXN0LgorICAgICAgICBB
U1NFUlQobV9kcmF3aW5nQ29udGV4dC5kaXNwbGF5TGlzdCgpLmlzRW1wdHkoKSk7CiAgICAgfQot
Citwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KCkgY29uc3Qgb3ZlcnJp
ZGUKICAgICB7CiAgICAgICAgIHJldHVybiBtX2RyYXdpbmdDb250ZXh0LmNvbnRleHQoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlSW1h
Z2VCdWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9S
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggNmRjZjFkNTJmMWE4YTE5ODE3ZjVhNTFjMGJk
MDM5NzM0OWM5MTQ3YS4uYjg3MzYyNzI0Mzg3ZWI1ZDE0MTJhY2EzNTBjZDRmZmYzMDIwYjE4NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFw
aGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgUmVt
b3RlUmVuZGVyaW5nQmFja2VuZDsKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPiBjbGFz
cyBUaHJlYWRTYWZlUmVtb3RlSW1hZ2VCdWZmZXJGbHVzaGVyOwogCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBCYWNrZW5kVHlwZT4KLWNsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgOiBwdWJsaWMgV2Vi
Q29yZTo6RGlzcGxheUxpc3Q6OkltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFdlYkNv
cmU6OkRpc3BsYXlMaXN0OjpSZWNvcmRlcjo6RGVsZWdhdGUsIHB1YmxpYyBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SXRlbUJ1ZmZlcldyaXRpbmdDbGllbnQgeworY2xhc3MgUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eSBmaW5hbCA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5TGlzdDo6SW1hZ2VCdWZmZXI8
QmFja2VuZFR5cGU+LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlY29yZGVyOjpEZWxl
Z2F0ZSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpJdGVtQnVmZmVyV3JpdGluZ0NsaWVu
dCB7CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpEaXNw
bGF5TGlzdDo6SW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OwogICAgIHVzaW5nIEJhc2VEaXNwbGF5
TGlzdEltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CiAgICAgdXNpbmcgQmFzZURpc3BsYXlMaXN0SW1h
Z2VCdWZmZXI6Om1fZHJhd2luZ0NvbnRleHQ7CkBAIC02Myw3ICs2Myw3IEBAIHB1YmxpYzoKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5KHBhcmFtZXRl
cnMsIHJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eSkpOwogICAgIH0KIAotICAgIH5SZW1vdGVJ
bWFnZUJ1ZmZlclByb3h5KCkKKyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpIG92ZXJyaWRl
CiAgICAgewogICAgICAgICBpZiAoIW1fcmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5KSB7CiAg
ICAgICAgICAgICBjbGVhckRpc3BsYXlMaXN0KCk7Cg==
</data>
<flag name="commit-queue"
          id="453150"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>