<?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>234558</bug_id>
          
          <creation_ts>2021-12-21 04:24:07 -0800</creation_ts>
          <short_desc>Gradient encode/decode does not validate that the serialized stops were sorted</short_desc>
          <delta_ts>2021-12-25 18:46:33 -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>Platform</component>
          <version>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>changseok</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mitz</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1825967</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-21 04:24:07 -0800</bug_when>
    <thetext>The Gradient encoder/decoder currently encodes the stopsSorted bit and on decode assumes that bit can be trusted without verifying validating that in fact the stops are sorted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1825968</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-21 04:25:29 -0800</bug_when>
    <thetext>I don&apos;t believe there is any current issue with this, as it looks like the underlying graphics libraries do their own sort of the stops (which begs the question why are we sorting them), but leaving the object in this invalid state is non-the-less a bad idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826031</commentid>
    <comment_count>2</comment_count>
      <attachid>447728</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-21 09:59:56 -0800</bug_when>
    <thetext>Created attachment 447728
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826061</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-12-21 11:17:17 -0800</bug_when>
    <thetext>Committed r287324 (245474@main): &lt;https://commits.webkit.org/245474@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 447728.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826062</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-12-21 11:18:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/86777463&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826077</commentid>
    <comment_count>5</comment_count>
      <attachid>447728</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-12-21 11:52:33 -0800</bug_when>
    <thetext>Comment on attachment 447728
Patch

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

Sure does look nice

&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:234
&gt; +    Gradient::ColorStopVector result;
&gt; +    result.reserveInitialCapacity(stops.size());
&gt;      for (auto&amp; stop : stops)
&gt; -        gradient.addColorStop({ stop.offset, style.colorByApplyingColorFilter(stop.color) });
&gt; +        result.uncheckedAppend({ stop.offset, style.colorByApplyingColorFilter(stop.color) });
&gt; +    return result;

Seems like we could use Vector::map here and make this a bit more elegant

&gt; Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp:58
&gt; +        Gradient::LinearData { startPoint(m_attributes), endPoint(m_attributes) },
&gt; +        ColorInterpolationMethod { ColorInterpolationMethod::SRGB { }, AlphaPremultiplication::Unpremultiplied },

Can any of the type names be omitted? Maybe it would make the code more confusing, but I like the idea of making things a little more terse

&gt; Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp:69
&gt; +        Gradient::RadialData { focalPoint(m_attributes), centerPoint(m_attributes), focalRadius(m_attributes), radius(m_attributes), 1 },
&gt; +        ColorInterpolationMethod { ColorInterpolationMethod::SRGB { }, AlphaPremultiplication::Unpremultiplied },

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826172</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-21 17:39:18 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #5)
&gt; Comment on attachment 447728 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=447728&amp;action=review
&gt; 
&gt; Sure does look nice
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:234
&gt; &gt; +    Gradient::ColorStopVector result;
&gt; &gt; +    result.reserveInitialCapacity(stops.size());
&gt; &gt;      for (auto&amp; stop : stops)
&gt; &gt; -        gradient.addColorStop({ stop.offset, style.colorByApplyingColorFilter(stop.color) });
&gt; &gt; +        result.uncheckedAppend({ stop.offset, style.colorByApplyingColorFilter(stop.color) });
&gt; &gt; +    return result;
&gt; 
&gt; Seems like we could use Vector::map here and make this a bit more elegant

Alas, I couldn&apos;t figure out how to make Vector::map() work with ColorStopVector due to the inline capacity. ColorStopVector == Vector&lt;GradientColorStop, 2&gt;.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp:58
&gt; &gt; +        Gradient::LinearData { startPoint(m_attributes), endPoint(m_attributes) },
&gt; &gt; +        ColorInterpolationMethod { ColorInterpolationMethod::SRGB { }, AlphaPremultiplication::Unpremultiplied },
&gt; 
&gt; Can any of the type names be omitted? Maybe it would make the code more
&gt; confusing, but I like the idea of making things a little more terse
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp:69
&gt; &gt; +        Gradient::RadialData { focalPoint(m_attributes), centerPoint(m_attributes), focalRadius(m_attributes), radius(m_attributes), 1 },
&gt; &gt; +        ColorInterpolationMethod { ColorInterpolationMethod::SRGB { }, AlphaPremultiplication::Unpremultiplied },
&gt; 
&gt; Ditto.

Yeah, not sure why I added the extra ColorInterpolationMethod in there. Will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826178</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-21 17:54:53 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceLinearGradient.cpp:58
&gt; &gt; &gt; +        Gradient::LinearData { startPoint(m_attributes), endPoint(m_attributes) },
&gt; &gt; &gt; +        ColorInterpolationMethod { ColorInterpolationMethod::SRGB { }, AlphaPremultiplication::Unpremultiplied },
&gt; &gt; 
&gt; &gt; Can any of the type names be omitted? Maybe it would make the code more
&gt; &gt; confusing, but I like the idea of making things a little more terse
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/rendering/svg/RenderSVGResourceRadialGradient.cpp:69
&gt; &gt; &gt; +        Gradient::RadialData { focalPoint(m_attributes), centerPoint(m_attributes), focalRadius(m_attributes), radius(m_attributes), 1 },
&gt; &gt; &gt; +        ColorInterpolationMethod { ColorInterpolationMethod::SRGB { }, AlphaPremultiplication::Unpremultiplied },
&gt; &gt; 
&gt; &gt; Ditto.
&gt; 
&gt; Yeah, not sure why I added the extra ColorInterpolationMethod in there. Will
&gt; remove.

Will resolve these in https://bugs.webkit.org/show_bug.cgi?id=234583</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826728</commentid>
    <comment_count>8</comment_count>
      <attachid>447728</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-12-24 09:05:10 -0800</bug_when>
    <thetext>Comment on attachment 447728
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:234
&gt;&gt;&gt; +    return result;
&gt;&gt; 
&gt;&gt; Seems like we could use Vector::map here and make this a bit more elegant
&gt; 
&gt; Alas, I couldn&apos;t figure out how to make Vector::map() work with ColorStopVector due to the inline capacity. ColorStopVector == Vector&lt;GradientColorStop, 2&gt;.

We can enhance Vector::map to make it a template that takes a type for the destination vector that defaults to the type of the source vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1826838</commentid>
    <comment_count>9</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-12-25 18:46:33 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 447728 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=447728&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp:234
&gt; &gt;&gt;&gt; +    return result;
&gt; &gt;&gt; 
&gt; &gt;&gt; Seems like we could use Vector::map here and make this a bit more elegant
&gt; &gt; 
&gt; &gt; Alas, I couldn&apos;t figure out how to make Vector::map() work with ColorStopVector due to the inline capacity. ColorStopVector == Vector&lt;GradientColorStop, 2&gt;.
&gt; 
&gt; We can enhance Vector::map to make it a template that takes a type for the
&gt; destination vector that defaults to the type of the source vector.

https://bugs.webkit.org/show_bug.cgi?id=234683</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>447728</attachid>
            <date>2021-12-21 09:59:56 -0800</date>
            <delta_ts>2021-12-21 11:17:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-234558-20211221095956.patch</filename>
            <type>text/plain</type>
            <size>11506</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI4NzMxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDIxLTEyLTIxICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBHcmFkaWVudCBlbmNvZGUvZGVjb2Rl
IGRvZXMgbm90IHZhbGlkYXRlIHRoYXQgdGhlIHNlcmlhbGl6ZWQgc3RvcHMgd2VyZSBzb3J0ZWQK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNDU1OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN0b3AgZW5j
b2RpbmcgYW5kIGRlY29kaW5nIHRoZSBzdG9wc1NvcnRlZCBiaXQgb24gR3JhZGllbnQgZm9yIHNl
cmlhbGl6YXRpb24gYXMKKyAgICAgICAgd2Ugc3RpbGwgbmVlZCB0byB2YWxpZGF0ZSB0aGUgc3Rv
cHMgYXJlIHNvcnRlZCBvbiBkZXNlcmlhbGl6YXRpb24uCisKKyAgICAgICAgV2hpbGUgaGVyZSwg
b3B0aW1pemUgdGhpbmdzIGEgYml0IGJ5IGFsbG93aW5nIG9uZSB0byBwYXNzIGFsbCB0aGUgbmVj
ZXNzYXJ5CisgICAgICAgIHBhcmFtZXRlcnMgdG8gdGhlIEdyYWRpZW50IGNyZWF0ZSBmdW5jdGlv
biwgd2hpY2ggYWxsb3dzIHVzIHRvIGF2b2lkIHVubmVjZXNzYXJ5CisgICAgICAgIGV4dHJhIGlu
dmFsaWRhdGlvbi4gTm93IHRoYXQgdGhlIEdyYWRpZW50U3ByZWFkTWV0aG9kIGNhbiBiZSBzZXQg
b24gY29uc3RydWN0aW9uCisgICAgICAgIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGl0cyBzZXR0ZXIu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFkaWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpH
cmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6c29ydFN0b3BzIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzZXRTcHJlYWRNZXRob2QpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFkaWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpzdG9wcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6ZW5jb2RlIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYWRpZW50OjpkZWNvZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJT
VkdSZXNvdXJjZUdyYWRpZW50OjpzdG9wc0J5QXBwbHlpbmdDb2xvckZpbHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50OjphZGRTdG9wcyk6IERlbGV0ZWQu
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Lmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1Jlc291cmNlTGluZWFyR3JhZGllbnQ6OmJ1
aWxkR3JhZGllbnQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVz
b3VyY2VSYWRpYWxHcmFkaWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNv
dXJjZVJhZGlhbEdyYWRpZW50OjpidWlsZEdyYWRpZW50IGNvbnN0KToKKwogMjAyMS0xMi0yMSAg
QWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bSUZDXSBTdGFy
dCB1c2luZyBEaXNwbGF5OjpMaW5lIGdlb21ldHJ5IGluIElubGluZURpc3BsYXlDb250ZW50QnVp
bGRlcgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50
LmNwcAkocmV2aXNpb24gMjg3MzE4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNywyMSArMjcsMjIgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgogCi0jaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8
R3JhZGllbnQ+IEdyYWRpZW50OjpjcmVhdGUoRGF0YSYmIGRhdGEsIENvbG9ySW50ZXJwb2xhdGlv
bk1ldGhvZCBjb2xvckludGVycG9sYXRpb25NZXRob2QpCitSZWY8R3JhZGllbnQ+IEdyYWRpZW50
OjpjcmVhdGUoRGF0YSYmIGRhdGEsIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCBjb2xvckludGVy
cG9sYXRpb25NZXRob2QsIEdyYWRpZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZCwgQ29sb3JT
dG9wVmVjdG9yJiYgc3RvcHMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR3JhZGllbnQo
V1RGTW92ZShkYXRhKSwgY29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kKSk7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgR3JhZGllbnQoV1RGTW92ZShkYXRhKSwgY29sb3JJbnRlcnBvbGF0aW9uTWV0
aG9kLCBzcHJlYWRNZXRob2QsIFdURk1vdmUoc3RvcHMpKSk7CiB9CiAKLUdyYWRpZW50OjpHcmFk
aWVudChEYXRhJiYgZGF0YSwgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xh
dGlvbk1ldGhvZCkKK0dyYWRpZW50OjpHcmFkaWVudChEYXRhJiYgZGF0YSwgQ29sb3JJbnRlcnBv
bGF0aW9uTWV0aG9kIGNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwgR3JhZGllbnRTcHJlYWRNZXRo
b2Qgc3ByZWFkTWV0aG9kLCBDb2xvclN0b3BWZWN0b3ImJiBzdG9wcykKICAgICA6IG1fZGF0YSB7
IFdURk1vdmUoZGF0YSkgfQogICAgICwgbV9jb2xvckludGVycG9sYXRpb25NZXRob2QgeyBjb2xv
ckludGVycG9sYXRpb25NZXRob2QgfQorICAgICwgbV9zcHJlYWRNZXRob2QgeyBzcHJlYWRNZXRo
b2QgfQorICAgICwgbV9zdG9wcyB7IFdURk1vdmUoc3RvcHMpIH0KIHsKIH0KIApAQCAtMTE0LDE0
ICsxMTUsNiBAQCB2b2lkIEdyYWRpZW50Ojpzb3J0U3RvcHMoKSBjb25zdAogICAgIHN0ZDo6c3Rh
YmxlX3NvcnQobV9zdG9wcy5iZWdpbigpLCBtX3N0b3BzLmVuZCgpLCBbXSAoYXV0byYgYSwgYXV0
byYgYikgewogICAgICAgICByZXR1cm4gYS5vZmZzZXQgPCBiLm9mZnNldDsKICAgICB9KTsKLX0K
LQotdm9pZCBHcmFkaWVudDo6c2V0U3ByZWFkTWV0aG9kKEdyYWRpZW50U3ByZWFkTWV0aG9kIHNw
cmVhZE1ldGhvZCkKLXsKLSAgICBpZiAobV9zcHJlYWRNZXRob2QgPT0gc3ByZWFkTWV0aG9kKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9zcHJlYWRNZXRob2QgPSBzcHJlYWRNZXRob2Q7Ci0gICAg
bV9jYWNoZWRIYXNoID0gMDsKIH0KIAogLy8gRklYTUU6IEluc3RlYWQgb2YgdGhlc2UgYWRkKEhh
c2hlcikgZnVuY3Rpb25zLCBjb25zaWRlciB1c2luZyBlbmNvZGUgZnVuY3Rpb25zIHRvIGNvbXB1
dGUgdGhlIGhhc2guCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YWRpZW50LmgJKHJldmlzaW9uIDI4NzMxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAgY2xhc3Mg
R3JhZGllbnQgOiBwdWJsaWMgUmVmQ291bnRlZDxHcmFkaWVudD4geyAocHVibGljCiAKICAgICB1
c2luZyBEYXRhID0gc3RkOjp2YXJpYW50PExpbmVhckRhdGEsIFJhZGlhbERhdGEsIENvbmljRGF0
YT47CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPEdyYWRpZW50PiBjcmVhdGUoRGF0
YSYmLCBDb2xvckludGVycG9sYXRpb25NZXRob2QpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRp
YyBSZWY8R3JhZGllbnQ+IGNyZWF0ZShEYXRhJiYsIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwg
R3JhZGllbnRTcHJlYWRNZXRob2QgPSBHcmFkaWVudFNwcmVhZE1ldGhvZDo6UGFkLCBDb2xvclN0
b3BWZWN0b3ImJiA9IHsgfSk7CiAKICAgICBib29sIGlzWmVyb1NpemUoKSBjb25zdDsKIApAQCAt
MTA2LDggKzEwNiw2IEBAIGNsYXNzIEdyYWRpZW50IDogcHVibGljIFJlZkNvdW50ZWQ8R3JhZGll
bnQ+IHsgKHB1YmxpYwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2V0U29ydGVkQ29sb3JTdG9w
cyhDb2xvclN0b3BWZWN0b3ImJik7CiAKICAgICBjb25zdCBDb2xvclN0b3BWZWN0b3ImIHN0b3Bz
KCkgY29uc3QgeyByZXR1cm4gbV9zdG9wczsgfQotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBz
ZXRTcHJlYWRNZXRob2QoR3JhZGllbnRTcHJlYWRNZXRob2QpOwogICAgIEdyYWRpZW50U3ByZWFk
TWV0aG9kIHNwcmVhZE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ByZWFkTWV0aG9kOyB9CiAK
ICAgICB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0Jik7CkBAIC0x
MzIsMTYgKzEzMCwxNiBAQCBjbGFzcyBHcmFkaWVudCA6IHB1YmxpYyBSZWZDb3VudGVkPEdyYWRp
ZW50PiB7IChwdWJsaWMKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBEZWNvZGVyPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxSZWY8R3JhZGllbnQ+PiBkZWNvZGUoRGVjb2RlciYpOwogCiBwcml2YXRlOgot
ICAgIGV4cGxpY2l0IEdyYWRpZW50KERhdGEmJiwgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kKTsK
KyAgICBleHBsaWNpdCBHcmFkaWVudChEYXRhJiYsIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCwg
R3JhZGllbnRTcHJlYWRNZXRob2QsIENvbG9yU3RvcFZlY3RvciYmKTsKIAogICAgIHZvaWQgc29y
dFN0b3BzKCkgY29uc3Q7CiAgICAgdm9pZCBzdG9wc0NoYW5nZWQoKTsKIAogICAgIERhdGEgbV9k
YXRhOwogICAgIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCBtX2NvbG9ySW50ZXJwb2xhdGlvbk1l
dGhvZDsKKyAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZDsKICAgICBtdXRh
YmxlIENvbG9yU3RvcFZlY3RvciBtX3N0b3BzOwogICAgIG11dGFibGUgYm9vbCBtX3N0b3BzU29y
dGVkIHsgZmFsc2UgfTsKLSAgICBHcmFkaWVudFNwcmVhZE1ldGhvZCBtX3NwcmVhZE1ldGhvZCB7
IEdyYWRpZW50U3ByZWFkTWV0aG9kOjpQYWQgfTsKICAgICBtdXRhYmxlIHVuc2lnbmVkIG1fY2Fj
aGVkSGFzaCB7IDAgfTsKIAogI2lmIFVTRShDRykKQEAgLTIzOCw5ICsyMzYsOCBAQCB0ZW1wbGF0
ZTx0eXBlbmFtZSBFbmNvZGVyPiB2b2lkIEdyYWRpZW50OjplbmNvZGUoRW5jb2QKIHsKICAgICBl
bmNvZGVyIDw8IG1fZGF0YTsKICAgICBlbmNvZGVyIDw8IG1fY29sb3JJbnRlcnBvbGF0aW9uTWV0
aG9kOwotICAgIGVuY29kZXIgPDwgbV9zdG9wczsKLSAgICBlbmNvZGVyIDw8IG1fc3RvcHNTb3J0
ZWQ7CiAgICAgZW5jb2RlciA8PCBtX3NwcmVhZE1ldGhvZDsKKyAgICBlbmNvZGVyIDw8IG1fc3Rv
cHM7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIERlY29kZXI+IHN0ZDo6b3B0aW9uYWw8UmVmPEdy
YWRpZW50Pj4gR3JhZGllbnQ6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMjU1LDI5ICsy
NTIsMTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRGVjb2Rlcj4gc3RkOjpvcHRpb25hbDxSZWY8R3Jh
ZGllbnQ+CiAgICAgaWYgKCFjb2xvckludGVycG9sYXRpb25NZXRob2QpCiAgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CiAKLSAgICBhdXRvIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShX
VEZNb3ZlKCpkYXRhKSwgKmNvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCk7CisgICAgc3RkOjpvcHRp
b25hbDxHcmFkaWVudFNwcmVhZE1ldGhvZD4gc3ByZWFkTWV0aG9kOworICAgIGRlY29kZXIgPj4g
c3ByZWFkTWV0aG9kOworICAgIGlmICghc3ByZWFkTWV0aG9kKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogCiAgICAgc3RkOjpvcHRpb25hbDxDb2xvclN0b3BWZWN0b3I+IHN0b3BzOwog
ICAgIGRlY29kZXIgPj4gc3RvcHM7CiAgICAgaWYgKCFzdG9wcykKICAgICAgICAgcmV0dXJuIHN0
ZDo6bnVsbG9wdDsKLSAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IHN0b3BzU29ydGVkOwotICAgIGRl
Y29kZXIgPj4gc3RvcHNTb3J0ZWQ7Ci0gICAgaWYgKCFzdG9wc1NvcnRlZC5oYXNfdmFsdWUoKSkK
LSAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKLSAgICBpZiAoKnN0b3BzU29ydGVkKQotICAg
ICAgICBncmFkaWVudC0+c2V0U29ydGVkQ29sb3JTdG9wcyhXVEZNb3ZlKCpzdG9wcykpOwotICAg
IGVsc2UgewotICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiAqc3RvcHMpCi0gICAgICAgICAgICBn
cmFkaWVudC0+YWRkQ29sb3JTdG9wKFdURk1vdmUoc3RvcCkpOwotICAgIH0KIAotICAgIEdyYWRp
ZW50U3ByZWFkTWV0aG9kIHNwcmVhZE1ldGhvZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHNw
cmVhZE1ldGhvZCkpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Ci0gICAgZ3JhZGllbnQt
PnNldFNwcmVhZE1ldGhvZChzcHJlYWRNZXRob2QpOwotCi0gICAgcmV0dXJuIGdyYWRpZW50Owor
ICAgIHJldHVybiBHcmFkaWVudDo6Y3JlYXRlKFdURk1vdmUoKmRhdGEpLCAqY29sb3JJbnRlcnBv
bGF0aW9uTWV0aG9kLCAqc3ByZWFkTWV0aG9kLCBXVEZNb3ZlKCpzdG9wcykpOwogfQogCiBpbmxp
bmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUdyYWRpZW50LmNwcAkocmV2aXNpb24gMjg3MzE4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI1LDEwICsyMjUsMTMgQEAgdm9pZCBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50Ojpwb3N0
QXBwbHlSZXNvdXJjZShSZW5kCiAgICAgY29udGV4dC0+cmVzdG9yZSgpOwogfQogCi12b2lkIFJl
bmRlclNWR1Jlc291cmNlR3JhZGllbnQ6OmFkZFN0b3BzKEdyYWRpZW50JiBncmFkaWVudCwgY29u
c3QgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciYgc3RvcHMsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSkKK0dyYWRpZW50OjpDb2xvclN0b3BWZWN0b3IgUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVu
dDo6c3RvcHNCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoY29uc3QgR3JhZGllbnQ6OkNvbG9yU3RvcFZl
Y3RvciYgc3RvcHMsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKKyAgICBHcmFkaWVudDo6
Q29sb3JTdG9wVmVjdG9yIHJlc3VsdDsKKyAgICByZXN1bHQucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShzdG9wcy5zaXplKCkpOwogICAgIGZvciAoYXV0byYgc3RvcCA6IHN0b3BzKQotICAgICAgICBn
cmFkaWVudC5hZGRDb2xvclN0b3AoeyBzdG9wLm9mZnNldCwgc3R5bGUuY29sb3JCeUFwcGx5aW5n
Q29sb3JGaWx0ZXIoc3RvcC5jb2xvcikgfSk7CisgICAgICAgIHJlc3VsdC51bmNoZWNrZWRBcHBl
bmQoeyBzdG9wLm9mZnNldCwgc3R5bGUuY29sb3JCeUFwcGx5aW5nQ29sb3JGaWx0ZXIoc3RvcC5j
b2xvcikgfSk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogR3JhZGllbnRTcHJlYWRNZXRob2Qg
UmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudDo6cGxhdGZvcm1TcHJlYWRNZXRob2RGcm9tU1ZHVHlw
ZShTVkdTcHJlYWRNZXRob2RUeXBlIG1ldGhvZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VHcmFkaWVudC5oCShyZXZp
c2lvbiAyODczMTgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jl
c291cmNlR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBS
ZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50IDogcHVibGljIFJlbmRlclNWR1Jlc28KIHByb3RlY3Rl
ZDoKICAgICBSZW5kZXJTVkdSZXNvdXJjZUdyYWRpZW50KFNWR0dyYWRpZW50RWxlbWVudCYsIFJl
bmRlclN0eWxlJiYpOwogCi0gICAgc3RhdGljIHZvaWQgYWRkU3RvcHMoR3JhZGllbnQmLCBjb25z
dCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKyAgICBz
dGF0aWMgR3JhZGllbnQ6OkNvbG9yU3RvcFZlY3RvciBzdG9wc0J5QXBwbHlpbmdDb2xvckZpbHRl
cihjb25zdCBHcmFkaWVudDo6Q29sb3JTdG9wVmVjdG9yJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsK
ICAgICBzdGF0aWMgR3JhZGllbnRTcHJlYWRNZXRob2QgcGxhdGZvcm1TcHJlYWRNZXRob2RGcm9t
U1ZHVHlwZShTVkdTcHJlYWRNZXRob2RUeXBlKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VMaW5lYXJHcmFkaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNv
dXJjZUxpbmVhckdyYWRpZW50LmNwcAkocmV2aXNpb24gMjg3MzE4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUxpbmVhckdyYWRpZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMsMTAgKzUzLDEyIEBAIEZsb2F0UG9pbnQgUmVuZGVyU1ZHUmVzb3Vy
Y2VMaW5lYXJHcmFkaWVudDo6ZW5kUG9pbnQoYwogCiBSZWY8R3JhZGllbnQ+IFJlbmRlclNWR1Jl
c291cmNlTGluZWFyR3JhZGllbnQ6OmJ1aWxkR3JhZGllbnQoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlKSBjb25zdAogewotICAgIGF1dG8gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKEdyYWRp
ZW50OjpMaW5lYXJEYXRhIHsgc3RhcnRQb2ludChtX2F0dHJpYnV0ZXMpLCBlbmRQb2ludChtX2F0
dHJpYnV0ZXMpIH0sIHsgQ29sb3JJbnRlcnBvbGF0aW9uTWV0aG9kOjpTUkdCIHsgfSwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkIH0pOwotICAgIGdyYWRpZW50LT5zZXRT
cHJlYWRNZXRob2QocGxhdGZvcm1TcHJlYWRNZXRob2RGcm9tU1ZHVHlwZShtX2F0dHJpYnV0ZXMu
c3ByZWFkTWV0aG9kKCkpKTsKLSAgICBhZGRTdG9wcyhncmFkaWVudCwgbV9hdHRyaWJ1dGVzLnN0
b3BzKCksIHN0eWxlKTsKLSAgICByZXR1cm4gZ3JhZGllbnQ7CisgICAgcmV0dXJuIEdyYWRpZW50
OjpjcmVhdGUoCisgICAgICAgIEdyYWRpZW50OjpMaW5lYXJEYXRhIHsgc3RhcnRQb2ludChtX2F0
dHJpYnV0ZXMpLCBlbmRQb2ludChtX2F0dHJpYnV0ZXMpIH0sCisgICAgICAgIENvbG9ySW50ZXJw
b2xhdGlvbk1ldGhvZCB7IENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZDo6U1JHQiB7IH0sIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCB9LAorICAgICAgICBwbGF0Zm9ybVNw
cmVhZE1ldGhvZEZyb21TVkdUeXBlKG1fYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSksCisgICAg
ICAgIHN0b3BzQnlBcHBseWluZ0NvbG9yRmlsdGVyKG1fYXR0cmlidXRlcy5zdG9wcygpLCBzdHls
ZSkKKyAgICApOwogfQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1Jlc291cmNlUmFkaWFsR3JhZGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJ
KHJldmlzaW9uIDI4NzMxOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVy
U1ZHUmVzb3VyY2VSYWRpYWxHcmFkaWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDEwICs2
NCwxMiBAQCBmbG9hdCBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Ojpmb2NhbFJhZGl1
cyhjb24KIAogUmVmPEdyYWRpZW50PiBSZW5kZXJTVkdSZXNvdXJjZVJhZGlhbEdyYWRpZW50Ojpi
dWlsZEdyYWRpZW50KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgY29uc3QKIHsKLSAgICBhdXRv
IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShHcmFkaWVudDo6UmFkaWFsRGF0YSB7IGZvY2Fs
UG9pbnQobV9hdHRyaWJ1dGVzKSwgY2VudGVyUG9pbnQobV9hdHRyaWJ1dGVzKSwgZm9jYWxSYWRp
dXMobV9hdHRyaWJ1dGVzKSwgcmFkaXVzKG1fYXR0cmlidXRlcyksIDEgfSwgeyBDb2xvckludGVy
cG9sYXRpb25NZXRob2Q6OlNSR0IgeyB9LCBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQgfSk7Ci0gICAgZ3JhZGllbnQtPnNldFNwcmVhZE1ldGhvZChwbGF0Zm9ybVNwcmVh
ZE1ldGhvZEZyb21TVkdUeXBlKG1fYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSkpOwotICAgIGFk
ZFN0b3BzKGdyYWRpZW50LCBtX2F0dHJpYnV0ZXMuc3RvcHMoKSwgc3R5bGUpOwotICAgIHJldHVy
biBncmFkaWVudDsKKyAgICByZXR1cm4gR3JhZGllbnQ6OmNyZWF0ZSgKKyAgICAgICAgR3JhZGll
bnQ6OlJhZGlhbERhdGEgeyBmb2NhbFBvaW50KG1fYXR0cmlidXRlcyksIGNlbnRlclBvaW50KG1f
YXR0cmlidXRlcyksIGZvY2FsUmFkaXVzKG1fYXR0cmlidXRlcyksIHJhZGl1cyhtX2F0dHJpYnV0
ZXMpLCAxIH0sCisgICAgICAgIENvbG9ySW50ZXJwb2xhdGlvbk1ldGhvZCB7IENvbG9ySW50ZXJw
b2xhdGlvbk1ldGhvZDo6U1JHQiB7IH0sIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVs
dGlwbGllZCB9LAorICAgICAgICBwbGF0Zm9ybVNwcmVhZE1ldGhvZEZyb21TVkdUeXBlKG1fYXR0
cmlidXRlcy5zcHJlYWRNZXRob2QoKSksCisgICAgICAgIHN0b3BzQnlBcHBseWluZ0NvbG9yRmls
dGVyKG1fYXR0cmlidXRlcy5zdG9wcygpLCBzdHlsZSkKKyAgICApOwogfQogCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>