<?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>170923</bug_id>
          
          <creation_ts>2017-04-17 15:58:50 -0700</creation_ts>
          <short_desc>Allow Variants of RetainPtrs</short_desc>
          <delta_ts>2017-04-17 22:38:00 -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>New Bugs</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>sam</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1298074</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-17 15:58:50 -0700</bug_when>
    <thetext>Allow Variants of RetainPtrs</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298076</commentid>
    <comment_count>1</comment_count>
      <attachid>307313</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-17 16:05:17 -0700</bug_when>
    <thetext>Created attachment 307313
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298078</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-04-17 16:09:35 -0700</bug_when>
    <thetext>What was the error? Could it be fixed by having Variant use std::addressof, which is designed to work around objects that overload operator&amp;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298090</commentid>
    <comment_count>3</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-17 16:29:42 -0700</bug_when>
    <thetext>../Source/WTF/wtf/Variant.h:1798:12: error: non-const lvalue reference to type &apos;typename __indexed_type&lt;1L, RefPtr&lt;RefLogger&gt;, RetainPtr&lt;const __CFData *&gt; &gt;::__type&apos; (aka &apos;WTF::RetainPtr&lt;const __CFData *&gt;&apos;) cannot bind to a value of unrelated type &apos;PtrType&apos; (aka &apos;const __CFData *&apos;)
    return *(
           ^~
../Source/WTF/wtf/Variant.h:1768:12: note: in instantiation of function template specialization &apos;WTF::get&lt;1, WTF::RefPtr&lt;TestWebKitAPI::RefLogger&gt;, WTF::RetainPtr&lt;const __CFData *&gt; &gt;&apos; requested here
    return get&lt;__type_index&lt;_Type,_Types...&gt;::__value&gt;(__v);
           ^
../Source/WTF/wtf/Variant.h:1868:26: note: in instantiation of function template specialization &apos;WTF::get&lt;WTF::RetainPtr&lt;const __CFData *&gt;, WTF::RefPtr&lt;TestWebKitAPI::RefLogger&gt;, WTF::RetainPtr&lt;const __CFData *&gt; &gt;&apos; requested here
        return __visitor(get&lt;_Type&gt;(__v));
                         ^
../Source/WTF/wtf/Variant.h:1876:10: note: in instantiation of function template specialization &apos;WTF::__visitor_table&lt;WTF::Visitor&lt;(lambda at ../Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:124:9), (lambda at ../Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:125:9)&gt; &amp;, WTF::RefPtr&lt;TestWebKitAPI::RefLogger&gt;, WTF::RetainPtr&lt;const __CFData *&gt; &gt;::__trampoline_func&lt;WTF::RetainPtr&lt;const __CFData *&gt; &gt;&apos; requested here
        &amp;__trampoline_func&lt;_Types&gt;...
         ^
../Source/WTF/wtf/Variant.h:1884:48: note: in instantiation of static data member &apos;WTF::__visitor_table&lt;WTF::Visitor&lt;(lambda at ../Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:124:9), (lambda at ../Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:125:9)&gt; &amp;, WTF::RefPtr&lt;TestWebKitAPI::RefLogger&gt;, WTF::RetainPtr&lt;const __CFData *&gt; &gt;::__trampoline&apos; requested here
        : __visitor_table&lt;_Visitor,_Types...&gt;::__trampoline[__v.index()](__visitor,__v);
                                               ^
../Source/WTF/wtf/Variant.h:1606:31: error: no viable overloaded &apos;=&apos;
            get&lt;_Index&gt;(*this)=std::forward&lt;_Type&gt;(__x);
            ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
../Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:134:13: note: in instantiation of function template specialization &apos;WTF::Variant&lt;WTF::RefPtr&lt;TestWebKitAPI::RefLogger&gt;, WTF::RetainPtr&lt;const __CFData *&gt; &gt;::operator=&lt;WTF::RetainPtr&lt;const __CFData *&gt; &gt;&apos; requested here
    variant = WTFMove(retainPtr);
            ^
../Source/WTF/wtf/RetainPtr.h:107:16: note: candidate function not viable: &apos;this&apos; argument has type &apos;const typename __indexed_type&lt;1L, RefPtr&lt;RefLogger&gt;, RetainPtr&lt;const __CFData *&gt; &gt;::__type&apos; (aka &apos;const WTF::RetainPtr&lt;const __CFData *&gt;&apos;), but method is not marked const
    RetainPtr&amp; operator=(const RetainPtr&amp;);
               ^
../Source/WTF/wtf/RetainPtr.h:108:37: note: candidate function not viable: &apos;this&apos; argument has type &apos;const typename __indexed_type&lt;1L, RefPtr&lt;RefLogger&gt;, RetainPtr&lt;const __CFData *&gt; &gt;::__type&apos; (aka &apos;const WTF::RetainPtr&lt;const __CFData *&gt;&apos;), but method is not marked const
    template&lt;typename U&gt; RetainPtr&amp; operator=(const RetainPtr&lt;U&gt;&amp;);
                                    ^
../Source/WTF/wtf/RetainPtr.h:109:16: note: candidate function not viable: &apos;this&apos; argument has type &apos;const typename __indexed_type&lt;1L, RefPtr&lt;RefLogger&gt;, RetainPtr&lt;const __CFData *&gt; &gt;::__type&apos; (aka &apos;const WTF::RetainPtr&lt;const __CFData *&gt;&apos;), but method is not marked const
    RetainPtr&amp; operator=(PtrType);
               ^
../Source/WTF/wtf/RetainPtr.h:112:16: note: candidate function not viable: &apos;this&apos; argument has type &apos;const typename __indexed_type&lt;1L, RefPtr&lt;RefLogger&gt;, RetainPtr&lt;const __CFData *&gt; &gt;::__type&apos; (aka &apos;const WTF::RetainPtr&lt;const __CFData *&gt;&apos;), but method is not marked const
    RetainPtr&amp; operator=(RetainPtr&amp;&amp;);
               ^
../Source/WTF/wtf/RetainPtr.h:113:37: note: candidate function not viable: &apos;this&apos; argument has type &apos;const typename __indexed_type&lt;1L, RefPtr&lt;RefLogger&gt;, RetainPtr&lt;const __CFData *&gt; &gt;::__type&apos; (aka &apos;const WTF::RetainPtr&lt;const __CFData *&gt;&apos;), but method is not marked const
    template&lt;typename U&gt; RetainPtr&amp; operator=(RetainPtr&lt;U&gt;&amp;&amp;);
                                    ^
../Source/WTF/wtf/RetainPtr.h:110:37: note: candidate template ignored: could not match &apos;U *&apos; against &apos;WTF::RetainPtr&lt;const __CFData *&gt;&apos;
    template&lt;typename U&gt; RetainPtr&amp; operator=(U*);
                                    ^
2 errors generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298097</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-17 16:35:22 -0700</bug_when>
    <thetext>I tried using std::addressof instead of &amp; in WTF::Variant, but it still failed for some reason.  Maybe we should fix that and add a test with a class that has an operator&amp; that returns a different type, but this fixes my problem and I think it improves our code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298119</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-04-17 17:55:07 -0700</bug_when>
    <thetext>(In reply to Alex Christensen from comment #4)
&gt; I tried using std::addressof instead of &amp; in WTF::Variant, but it still
&gt; failed for some reason.  Maybe we should fix that and add a test with a
&gt; class that has an operator&amp; that returns a different type, but this fixes my
&gt; problem and I think it improves our code.

By &quot;improves our code&quot; do you mean it is good to get rid of the operator&amp; for RetainPtr? It seemed like an ok use of operator&amp; to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298135</commentid>
    <comment_count>6</comment_count>
      <attachid>307332</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-04-17 19:05:09 -0700</bug_when>
    <thetext>Created attachment 307332
Fix for Variant

Here is a fix for Variant, and a small test case. The test could definitely be fleshed out, and maybe an explicit use of RetainPtr&lt;&gt; could be added if you end up keeping the RetainPtr operator&amp;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298169</commentid>
    <comment_count>7</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-17 22:02:27 -0700</bug_when>
    <thetext>Attachment 307332 did not pass style-queue:


ERROR: Source/WTF/wtf/Variant.h:1791:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1792:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1792:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1800:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1801:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1801:  Wrong number of spaces before statement. (expected: 16)  [whitespace/indent] [4]
ERROR: Source/WTF/wtf/Variant.h:1821:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1821:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1826:  Missing spaces around !=  [whitespace/operators] [3]
ERROR: Source/WTF/wtf/Variant.h:1826:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1832:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WTF/wtf/Variant.h:1839:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:233:  Should be indented on a separate line, with the colon or comma first on that line.  [whitespace/indent] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:241:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WTF/Variant.cpp:244:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
Total errors found: 15 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298176</commentid>
    <comment_count>8</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-17 22:28:18 -0700</bug_when>
    <thetext>Aha!  I had missed the &amp;get needing to be changed to std::addressof(get when I tried it.  Thanks Sam!

I think removing operator&amp; from RetainPtr is an improvement because using it requires you to know that it&apos;s only ok to use with nullptr, and there are only runtime checks as it was.  I think replacing &amp; with std::addressof in our Variant implementation is an improvement because it will work if we make variants in the future of types that have overloaded operator&amp; that return a different type.

I&apos;m going to commit both.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1298180</commentid>
    <comment_count>9</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-04-17 22:38:00 -0700</bug_when>
    <thetext>http://trac.webkit.org/r215450</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307313</attachid>
            <date>2017-04-17 16:05:17 -0700</date>
            <delta_ts>2017-04-17 16:09:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-170923-20170417160516.patch</filename>
            <type>text/plain</type>
            <size>7181</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMTU0MzQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDE3LTA0LTE3ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWxsb3cgVmFyaWFudHMgb2YgUmV0
YWluUHRycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTcwOTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiB3dGYvUmV0YWluUHRyLmg6CisgICAgICAgIChXVEY6OlJldGFpblB0cjo6b3BlcmF0b3ImKTog
RGVsZXRlZC4KKyAgICAgICAgT3BlcmF0b3ImIHdhcyBjYXVzaW5nIGEgY29tcGlsZSBlcnJvciB3
aGVuIG1ha2luZyBWYXJpYW50PFJldGFpblB0cjxUPiwgLi4uPgorICAgICAgICBhbmQgYmVjYXVz
ZSBpdCBpcyBzdHJhbmdlIGFuZCBvbmx5IHVzZWQgb25jZSwgbGV0J3MganVzdCByZW1vdmUgaXQu
CisKIDIwMTctMDQtMTcgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAg
ICAgIERpc2FibGUgb3V0ZGF0ZWQgV3JpdGFibGVTdHJlYW0gQVBJCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9SZXRhaW5QdHIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9SZXRhaW5QdHIu
aAkocmV2aXNpb24gMjE1NDM0KQorKysgU291cmNlL1dURi93dGYvUmV0YWluUHRyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg4LDE4ICs4OCw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gIW1fcHRyOyB9CiAKLSNpZiAhKGRlZmluZWQgKF9fT0JKQ19fKSAm
JiBfX2hhc19mZWF0dXJlKG9iamNfYXJjKSkKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1
bCBmb3IgcGFzc2luZyBSZXRhaW5QdHJzIHRvIGZ1bmN0aW9ucyB0aGF0IHJldHVybgotICAgIC8v
IENGIHR5cGVzIGFzIG91dCBwYXJhbWV0ZXJzLgotICAgIFB0clR5cGUqIG9wZXJhdG9yJigpCi0g
ICAgewotICAgICAgICAvLyBSZXF1aXJlIHRoYXQgdGhlIHBvaW50ZXIgaXMgbnVsbCwgdG8gcHJl
dmVudCBsZWFrcy4KLSAgICAgICAgQVNTRVJUKCFtX3B0cik7Ci0KLSAgICAgICAgcmV0dXJuIChQ
dHJUeXBlKikmbV9wdHI7Ci0gICAgfQotI2VuZGlmCi0KICAgICAvLyBUaGlzIGNvbnZlcnNpb24g
b3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90IHRvIG90
aGVyIGludGVnZXIgdHlwZXMuCiAgICAgdHlwZWRlZiBTdG9yYWdlVHlwZSBSZXRhaW5QdHI6OipV
bnNwZWNpZmllZEJvb2xUeXBlOwogICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3B0ciA/ICZSZXRhaW5QdHI6Om1fcHRyIDogbnVsbHB0cjsgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZwkocmV2aXNpb24gMjE1NDM4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTctMDQtMTcgIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBbGxvdyBWYXJpYW50
cyBvZiBSZXRhaW5QdHJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzA5MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IuICBKdXN0IHVwZGF0ZWQgdGhlIG9uZSBjbGFz
cyB0aGF0IHVzZWQgUmV0YWluUHRyOjpvcGVyYXRvciYgdG8gY2xlYW5seSBpbml0aWFsaXplCisg
ICAgICAgIFJldGFpblB0cnMgaW5zdGVhZCBvZiB0YWtpbmcgdGhlIGFkZHJlc3Mgb2YgYSBzbWFy
dCBwb2ludGVyIGFuZCBmb3JjaW5nIGEgdmFsdWUgaW5zaWRlIG9mIGl0LgorCisgICAgICAgICog
cGxhdGZvcm0vbWFjL1NTTEtleUdlbmVyYXRvck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNp
Z25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisKIDIwMTctMDQtMTcgIEFsZXggQ2hy
aXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBGaXggQ01ha2Ug
YnVpbGQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvU1NMS2V5R2VuZXJhdG9y
TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9TU0xLZXlH
ZW5lcmF0b3JNYWMubW0JKHJldmlzaW9uIDIxNTQzNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9TU0xLZXlHZW5lcmF0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyOCwyMCAr
MTI4LDIzIEBAIHN0YXRpYyBTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmcKIAogICAg
IFNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZSBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2Ug
eyB9OwogCi0gICAgUmV0YWluUHRyPFNlY0FjY2Vzc1JlZj4gYWNjZXNzOwotICAgIGlmIChTZWNB
Y2Nlc3NDcmVhdGUoa2V5RGVzY3JpcHRpb24uY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgbnVsbHB0
ciwgJmFjY2VzcykgIT0gbm9FcnIpCisgICAgU2VjQWNjZXNzUmVmIGFjY2Vzc1JlZiB7IG51bGxw
dHIgfTsKKyAgICBpZiAoU2VjQWNjZXNzQ3JlYXRlKGtleURlc2NyaXB0aW9uLmNyZWF0ZUNGU3Ry
aW5nKCkuZ2V0KCksIG51bGxwdHIsICZhY2Nlc3NSZWYpICE9IG5vRXJyKQogICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgUmV0YWluUHRyPFNlY0FjY2Vzc1JlZj4gYWNjZXNzID0gYWRvcHRD
RihhY2Nlc3NSZWYpOwogCi0gICAgUmV0YWluUHRyPENGQXJyYXlSZWY+IGFjbHM7Ci0gICAgaWYg
KFNlY0FjY2Vzc0NvcHlTZWxlY3RlZEFDTExpc3QoYWNjZXNzLmdldCgpLCBDU1NNX0FDTF9BVVRI
T1JJWkFUSU9OX0RFQ1JZUFQsICZhY2xzKSAhPSBub0VycikKKyAgICBDRkFycmF5UmVmIGFjbHNS
ZWYgeyBudWxscHRyIH07CisgICAgaWYgKFNlY0FjY2Vzc0NvcHlTZWxlY3RlZEFDTExpc3QoYWNj
ZXNzLmdldCgpLCBDU1NNX0FDTF9BVVRIT1JJWkFUSU9OX0RFQ1JZUFQsICZhY2xzUmVmKSAhPSBu
b0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIFJldGFpblB0cjxDRkFycmF5UmVm
PiBhY2xzID0gYWRvcHRDRihhY2xzUmVmKTsKIAogICAgIFNlY0FDTFJlZiBhY2wgPSAoU2VjQUNM
UmVmKShDRkFycmF5R2V0VmFsdWVBdEluZGV4KGFjbHMuZ2V0KCksIDApKTsKIAogICAgIC8vIFBh
c3NpbmcgbnVsbHB0ciB0byBTZWNUcnVzdGVkQXBwbGljYXRpb25DcmVhdGVGcm9tUGF0aCB0ZWxs
cyB0aGF0IGZ1bmN0aW9uIHRvIGFzc3VtZSB0aGUgYXBwbGljYXRpb24gYnVuZGxlLgotICAgIFJl
dGFpblB0cjxTZWNUcnVzdGVkQXBwbGljYXRpb25SZWY+IHRydXN0ZWRBcHA7Ci0gICAgaWYgKFNl
Y1RydXN0ZWRBcHBsaWNhdGlvbkNyZWF0ZUZyb21QYXRoKG51bGxwdHIsICZ0cnVzdGVkQXBwKSAh
PSBub0VycikKKyAgICBTZWNUcnVzdGVkQXBwbGljYXRpb25SZWYgdHJ1c3RlZEFwcFJlZiB7IG51
bGxwdHIgfTsKKyAgICBpZiAoU2VjVHJ1c3RlZEFwcGxpY2F0aW9uQ3JlYXRlRnJvbVBhdGgobnVs
bHB0ciwgJnRydXN0ZWRBcHBSZWYpICE9IG5vRXJyKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
CisgICAgUmV0YWluUHRyPFNlY1RydXN0ZWRBcHBsaWNhdGlvblJlZj4gdHJ1c3RlZEFwcCA9IGFk
b3B0Q0YodHJ1c3RlZEFwcFJlZik7CiAKICAgICBjb25zdCBDU1NNX0FDTF9LRVlDSEFJTl9QUk9N
UFRfU0VMRUNUT1IgZGVmYXVsdFNlbGVjdG9yID0gewogICAgICAgICBDU1NNX0FDTF9LRVlDSEFJ
Tl9QUk9NUFRfQ1VSUkVOVF9WRVJTSU9OLCAwCkBAIC0xNDksMTAgKzE1MiwxMiBAQCBzdGF0aWMg
U3RyaW5nIHNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nCiAgICAgaWYgKFNlY0FDTFNldFNpbXBs
ZUNvbnRlbnRzKGFjbCwgKF9fYnJpZGdlIENGQXJyYXlSZWYpQFsgKF9fYnJpZGdlIGlkKXRydXN0
ZWRBcHAuZ2V0KCkgXSwga2V5RGVzY3JpcHRpb24uY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwgJmRl
ZmF1bHRTZWxlY3RvcikgIT0gbm9FcnIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAg
IFJldGFpblB0cjxTZWNLZXlSZWY+IHB1YmxpY0tleTsKLSAgICBSZXRhaW5QdHI8U2VjS2V5UmVm
PiBwcml2YXRlS2V5OwotICAgIGlmIChTZWNLZXlDcmVhdGVQYWlyKG51bGxwdHIsIENTU01fQUxH
SURfUlNBLCBrZXlTaXplLCAwLCBDU1NNX0tFWVVTRV9BTlksIENTU01fS0VZQVRUUl9QRVJNQU5F
TlQgfCBDU1NNX0tFWUFUVFJfRVhUUkFDVEFCTEUgfCBDU1NNX0tFWUFUVFJfUkVUVVJOX1JFRiwg
Q1NTTV9LRVlVU0VfQU5ZLCBDU1NNX0tFWUFUVFJfU0VOU0lUSVZFIHwgQ1NTTV9LRVlBVFRSX1JF
VFVSTl9SRUYgfCBDU1NNX0tFWUFUVFJfUEVSTUFORU5UIHwgQ1NTTV9LRVlBVFRSX0VYVFJBQ1RB
QkxFLCBhY2Nlc3MuZ2V0KCksICZwdWJsaWNLZXksICZwcml2YXRlS2V5KSAhPSBub0VycikKKyAg
ICBTZWNLZXlSZWYgcHVibGljS2V5UmVmIHsgbnVsbHB0ciB9OworICAgIFNlY0tleVJlZiBwcml2
YXRlS2V5UmVmIHsgbnVsbHB0ciB9OworICAgIGlmIChTZWNLZXlDcmVhdGVQYWlyKG51bGxwdHIs
IENTU01fQUxHSURfUlNBLCBrZXlTaXplLCAwLCBDU1NNX0tFWVVTRV9BTlksIENTU01fS0VZQVRU
Ul9QRVJNQU5FTlQgfCBDU1NNX0tFWUFUVFJfRVhUUkFDVEFCTEUgfCBDU1NNX0tFWUFUVFJfUkVU
VVJOX1JFRiwgQ1NTTV9LRVlVU0VfQU5ZLCBDU1NNX0tFWUFUVFJfU0VOU0lUSVZFIHwgQ1NTTV9L
RVlBVFRSX1JFVFVSTl9SRUYgfCBDU1NNX0tFWUFUVFJfUEVSTUFORU5UIHwgQ1NTTV9LRVlBVFRS
X0VYVFJBQ1RBQkxFLCBhY2Nlc3MuZ2V0KCksICZwdWJsaWNLZXlSZWYsICZwcml2YXRlS2V5UmVm
KSAhPSBub0VycikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIFJldGFpblB0cjxTZWNL
ZXlSZWY+IHB1YmxpY0tleSA9IGFkb3B0Q0YocHVibGljS2V5UmVmKTsKKyAgICBSZXRhaW5QdHI8
U2VjS2V5UmVmPiBwcml2YXRlS2V5ID0gYWRvcHRDRihwcml2YXRlS2V5UmVmKTsKIAogICAgIENT
U01fQ1NQX0hBTkRMRSBjc3BIYW5kbGU7CiAgICAgaWYgKFNlY0tleUdldENTUEhhbmRsZShwcml2
YXRlS2V5LmdldCgpLCAmY3NwSGFuZGxlKSAhPSBub0VycikKSW5kZXg6IFRvb2xzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNTQzOSkKKysrIFRv
b2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE3LTA0LTE3
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
QWxsb3cgVmFyaWFudHMgb2YgUmV0YWluUHRycworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcwOTIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9WYXJpYW50LmNw
cDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE3LTA0LTE3ICBZb3Vlbm4g
RmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBEaXNhYmxlIG91dGRhdGVkIFdy
aXRhYmxlU3RyZWFtIEFQSQpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFy
aWFudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFy
aWFudC5jcHAJKHJldmlzaW9uIDIxNTQzNCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V1RGL1ZhcmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNiArMTA5LDM0IEBAIFRFU1Qo
V1RGX1ZhcmlhbnQsIEJhc2ljVmlzaXRvcikKICAgICBFWFBFQ1RfVFJVRShUeXBlOjpTdHJpbmcg
PT0gdHlwZSk7CiB9CiAKKyNpZiBVU0UoQ0YpCitURVNUKFdURl9WYXJpYW50LCBSZXRhaW5QdHIp
Cit7CisgICAgZW51bSBjbGFzcyBUeXBlIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgUmVmUHRy
LAorICAgICAgICBSZXRhaW5QdHIsCisgICAgfTsKKyAgICAKKyAgICBUeXBlIHR5cGUgPSBUeXBl
OjpOb25lOworICAgIAorICAgIGF1dG8gdmlzaXRvciA9IFdURjo6bWFrZVZpc2l0b3IoCisgICAg
ICAgIFsmXShjb25zdCBSZWZQdHI8UmVmTG9nZ2VyPiYpIHsgdHlwZSA9IFR5cGU6OlJlZlB0cjsg
fSwKKyAgICAgICAgWyZdKGNvbnN0IFJldGFpblB0cjxDRkRhdGFSZWY+JikgeyB0eXBlID0gVHlw
ZTo6UmV0YWluUHRyOyB9CisgICAgKTsKKyAgICAKKyAgICBSZWZQdHI8UmVmTG9nZ2VyPiByZWZQ
dHI7CisgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcmV0YWluUHRyOworICAgIFZhcmlhbnQ8UmVm
UHRyPFJlZkxvZ2dlcj4sIFJldGFpblB0cjxDRkRhdGFSZWY+PiB2YXJpYW50KFdURk1vdmUocmVm
UHRyKSk7CisgICAgV1RGOjp2aXNpdCh2aXNpdG9yLCB2YXJpYW50KTsKKyAgICBFWFBFQ1RfVFJV
RShUeXBlOjpSZWZQdHIgPT0gdHlwZSk7CisgICAgCisgICAgdmFyaWFudCA9IFdURk1vdmUocmV0
YWluUHRyKTsKKyAgICBXVEY6OnZpc2l0KHZpc2l0b3IsIHZhcmlhbnQpOworICAgIEVYUEVDVF9U
UlVFKFR5cGU6OlJldGFpblB0ciA9PSB0eXBlKTsKK30KKyNlbmRpZgorCiBURVNUKFdURl9WYXJp
YW50LCBWaXNpdG9yVXNpbmdNYWtlVmlzaXRvcikKIHsKICAgICBlbnVtIGNsYXNzIFR5cGUgewo=
</data>
<flag name="review"
          id="328600"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307332</attachid>
            <date>2017-04-17 19:05:09 -0700</date>
            <delta_ts>2017-04-17 19:05:09 -0700</delta_ts>
            <desc>Fix for Variant</desc>
            <filename>variant.diff</filename>
            <type>text/plain</type>
            <size>3625</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1ZhcmlhbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9WYXJpYW50LmgJKHJldmlzaW9uIDIxNTQ0NCkKKysrIFNvdXJjZS9XVEYvd3RmL1Zhcmlh
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTc4OCw4ICsxNzg4LDggQEAgdGVtcGxhdGU8cHRyZGlm
Zl90IF9JbmRleCx0eXBlbmFtZSAuLi4gXwogY29uc3RleHByIHR5cGVuYW1lIF9faW5kZXhlZF90
eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUgY29uc3QmIGdldChWYXJpYW50PF9UeXBlcy4u
Lj4gY29uc3QmIF9fdil7CiAgICAgcmV0dXJuICooCiAgICAgICAgIChfSW5kZXghPV9fdi5pbmRl
eCgpKQotICAgICAgICAgICAgPyAmX190aHJvd19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUg
X19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBlcy4uLj46Ol9fdHlwZSBjb25zdCY+KCJCYWQgVmFy
aWFudCBpbmRleCBpbiBnZXQiKQotICAgICAgICAgICAgOiAmX192YXJpYW50X2FjY2Vzc29yPF9J
bmRleCxfVHlwZXMuLi4+OjpnZXQoX192KQorICAgICAgICAgICAgPyBzdGQ6OmFkZHJlc3NvZihf
X3Rocm93X2JhZF92YXJpYW50X2FjY2Vzczx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgs
X1R5cGVzLi4uPjo6X190eXBlIGNvbnN0Jj4oIkJhZCBWYXJpYW50IGluZGV4IGluIGdldCIpKQor
ICAgICAgICAgICAgOiBzdGQ6OmFkZHJlc3NvZihfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9U
eXBlcy4uLj46OmdldChfX3YpKQogICAgICk7CiB9CiAKQEAgLTE3OTcsOCArMTc5Nyw4IEBAIHRl
bXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF8KIGNvbnN0ZXhwciB0eXBlbmFt
ZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5cGVzLi4uPjo6X190eXBlJiBnZXQoVmFyaWFudDxf
VHlwZXMuLi4+JiBfX3YpewogICAgIHJldHVybiAqKAogICAgICAgICAoX0luZGV4IT1fX3YuaW5k
ZXgoKSkKLSAgICAgICAgICAgID8gJl9fdGhyb3dfYmFkX3ZhcmlhbnRfYWNjZXNzPHR5cGVuYW1l
IF9faW5kZXhlZF90eXBlPF9JbmRleCxfVHlwZXMuLi4+OjpfX3R5cGUmPigiQmFkIFZhcmlhbnQg
aW5kZXggaW4gZ2V0IikKLSAgICAgICAgICAgIDogJl9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgs
X1R5cGVzLi4uPjo6Z2V0KF9fdikKKyAgICAgICAgICAgID8gc3RkOjphZGRyZXNzb2YoX190aHJv
d19iYWRfdmFyaWFudF9hY2Nlc3M8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZSY+KCJCYWQgVmFyaWFudCBpbmRleCBpbiBnZXQiKSkKKyAgICAgICAgICAg
IDogc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+Ojpn
ZXQoX192KSkKICAgICApOwogfQogCkBAIC0xODE4LDI1ICsxODE4LDI1IEBAIGNvbnN0ZXhwciBj
b25zdCB0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTwKIAogdGVtcGxhdGU8dHlwZW5hbWUgX1R5cGUs
dHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhwciBzdGQ6OmFkZF9wb2ludGVyX3Q8X1R5cGU+
IGdldF9pZihWYXJpYW50PF9UeXBlcy4uLj4mIF9fdil7Ci0gICAgcmV0dXJuIChfX3R5cGVfaW5k
ZXg8X1R5cGUsX1R5cGVzLi4uPjo6X192YWx1ZSE9X192LmluZGV4KCkpP251bGxwdHI6JmdldDxf
VHlwZT4oX192KTsKKyAgICByZXR1cm4gKF9fdHlwZV9pbmRleDxfVHlwZSxfVHlwZXMuLi4+Ojpf
X3ZhbHVlIT1fX3YuaW5kZXgoKSk/bnVsbHB0cjpzdGQ6OmFkZHJlc3NvZihnZXQ8X1R5cGU+KF9f
dikpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAuLi4gX1R5cGVzPgog
Y29uc3RleHByIHN0ZDo6YWRkX3BvaW50ZXJfdDxfVHlwZSBjb25zdD4gZ2V0X2lmKFZhcmlhbnQ8
X1R5cGVzLi4uPiBjb25zdCYgX192KXsKLSAgICByZXR1cm4gKF9fdHlwZV9pbmRleDxfVHlwZSxf
VHlwZXMuLi4+OjpfX3ZhbHVlIT1fX3YuaW5kZXgoKSk/bnVsbHB0cjomZ2V0PF9UeXBlPihfX3Yp
OworICAgIHJldHVybiAoX190eXBlX2luZGV4PF9UeXBlLF9UeXBlcy4uLj46Ol9fdmFsdWUhPV9f
di5pbmRleCgpKT9udWxscHRyOnN0ZDo6YWRkcmVzc29mKGdldDxfVHlwZT4oX192KSk7CiB9CiAK
IHRlbXBsYXRlPHB0cmRpZmZfdCBfSW5kZXgsdHlwZW5hbWUgLi4uIF9UeXBlcz4KIGNvbnN0ZXhw
ciBzdGQ6OmFkZF9wb2ludGVyX3Q8dHlwZW5hbWUgX19pbmRleGVkX3R5cGU8X0luZGV4LF9UeXBl
cy4uLj46Ol9fdHlwZT4gZ2V0X2lmKFZhcmlhbnQ8X1R5cGVzLi4uPiYgX192KXsKICAgICByZXR1
cm4gKChfSW5kZXghPV9fdi5pbmRleCgpKT9udWxscHRyOgotICAgICAgICAmX192YXJpYW50X2Fj
Y2Vzc29yPF9JbmRleCxfVHlwZXMuLi4+OjpnZXQoX192KSk7CisgICAgICAgIHN0ZDo6YWRkcmVz
c29mKF9fdmFyaWFudF9hY2Nlc3NvcjxfSW5kZXgsX1R5cGVzLi4uPjo6Z2V0KF9fdikpKTsKIH0K
IAogdGVtcGxhdGU8cHRyZGlmZl90IF9JbmRleCx0eXBlbmFtZSAuLi4gX1R5cGVzPgogY29uc3Rl
eHByIHN0ZDo6YWRkX3BvaW50ZXJfdDx0eXBlbmFtZSBfX2luZGV4ZWRfdHlwZTxfSW5kZXgsX1R5
cGVzLi4uPjo6X190eXBlIGNvbnN0PiBnZXRfaWYoCiAgICAgVmFyaWFudDxfVHlwZXMuLi4+IGNv
bnN0JiBfX3YpewogICAgIHJldHVybiAoKF9JbmRleCE9X192LmluZGV4KCkpP251bGxwdHI6Ci0g
ICAgICAgICZfX3ZhcmlhbnRfYWNjZXNzb3I8X0luZGV4LF9UeXBlcy4uLj46OmdldChfX3YpKTsK
KyAgICAgICAgc3RkOjphZGRyZXNzb2YoX192YXJpYW50X2FjY2Vzc29yPF9JbmRleCxfVHlwZXMu
Li4+OjpnZXQoX192KSkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHlwZSx0eXBlbmFtZSAu
Li4gX1R5cGVzPgpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvVmFyaWFudC5j
cHAJKHJldmlzaW9uIDIxNTQ0NCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Zh
cmlhbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNCArMjI1LDIzIEBAIFRFU1QoV1RGX1Zh
cmlhbnQsIFJlZikKICAgICBBU1NFUlRfU1RSRVEoInJlZihhKSBkZXJlZihhKSAiLCB0YWtlTG9n
U3RyKCkuY19zdHIoKSk7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIFQ+CitjbGFzcyBIb2xkZXIgewor
cHVibGljOgorICAgIFQgZGF0YTsKKworICAgIEhvbGRlcihUIGRhdGEpIDogZGF0YShkYXRhKSB7
IH0KKworICAgIFQqIG9wZXJhdG9yJigpIHsgcmV0dXJuICZkYXRhOyB9Cit9OworCitURVNUKFdU
Rl9WYXJpYW50LCBPcGVyYXRvckFtcGVyc2FuZCkKK3sKKyAgICBWYXJpYW50PEhvbGRlcjxpbnQ+
LCBpbnQ+IHYgPSBIb2xkZXI8aW50PigxMCk7CisgICAgRVhQRUNUX1RSVUUoV1RGOjpnZXQ8SG9s
ZGVyPGludD4+KHYpLmRhdGEgPT0gMTApOworCisgICAgdiA9IDIwOworICAgIEVYUEVDVF9UUlVF
KFdURjo6Z2V0PGludD4odikgPT0gMjApOworfQorCiB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>