<?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>211131</bug_id>
          
          <creation_ts>2020-04-28 09:17:31 -0700</creation_ts>
          <short_desc>[WPE][GTK] Paths should be canonicalized before calling bwrap</short_desc>
          <delta_ts>2023-07-02 07:45:11 -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>WebKitGTK</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Linux</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>
          
          <blocked>206533</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jack Hill">jackhill</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>jackhill</cc>
    
    <cc>maxim.cournoyer</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>pgriffis</cc>
    
    <cc>philn</cc>
    
    <cc>robin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1646511</commentid>
    <comment_count>0</comment_count>
    <who name="Jack Hill">jackhill</who>
    <bug_when>2020-04-28 09:17:31 -0700</bug_when>
    <thetext>Before setting up worker sandboxes with Bubblewrap, the paths should be canonicalized by calling realpath(). Bubblewrap does not handle paths with absolute symlinks &lt;https://github.com/containers/bubblewrap/issues/195&gt;, so this avoids that problem. The error message presented by bwrap in such a case is, &quot;bwrap: Can&apos;t create file at /path/to/symbolic/link: No such file or directory&quot;. This problem was observed on GNU Guix with WebKitGTK 2.28.1 &lt;https://debbugs.gnu.org/cgi/bugreport.cgi?bug=40837&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845143</commentid>
    <comment_count>1</comment_count>
      <attachid>452983</attachid>
    <who name="apteryx">maxim.cournoyer</who>
    <bug_when>2022-02-23 08:20:08 -0800</bug_when>
    <thetext>Created attachment 452983
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845146</commentid>
    <comment_count>2</comment_count>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2022-02-23 08:29:27 -0800</bug_when>
    <thetext>(In reply to apteryx from comment #1)
&gt; Created attachment 452983 [details]
&gt; Patch

The patch looks reasonable to me, but I am a bit shy to approve it
because there are other reviewers with more knowledge about of the
sandbox code.

If Michael or Patrick could rubber-stamp this, that would be perfect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845160</commentid>
    <comment_count>3</comment_count>
      <attachid>452983</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-02-23 08:58:43 -0800</bug_when>
    <thetext>Comment on attachment 452983
Patch

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

&gt; Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp:334
&gt; +static void bindSymlinksRealPath(Vector&lt;CString&gt;&amp; args, const char* path, const char* bindOption = &quot;--ro-bind&quot;)
&gt; +{
&gt; +    WTF::String realPath = FileSystem::realPath(path);
&gt; +    if (path == realPath) {
&gt; +        const char* rpath = realPath.utf8().data();
&gt; +        args.appendVector(Vector&lt;CString&gt;({ bindOption, rpath, rpath }));
&gt; +    }
&gt; +}

I&apos;m a little confused here.

What I expected: if the path is a symlink, bind its target instead so the operation doesn&apos;t fail.

What you have here: if the path is a symlink (path != realPath), ignore it. Sure, the operation will not fail if you skip it, but won&apos;t you still wind up with a broken sandbox?

&gt; Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp:352
&gt; +    bindSymlinksRealPath(args, path, bindType);
&gt; +    // As /etc is exposed wholesale, do not layer extraneous bind

Style nit: leave a blank line here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845221</commentid>
    <comment_count>4</comment_count>
      <attachid>452983</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-02-23 10:39:57 -0800</bug_when>
    <thetext>Comment on attachment 452983
Patch

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

&gt; Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp:330
&gt; +    if (path == realPath) {

Seems this was supposed to be !=, which indicates that another round of testing is warranted here. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845226</commentid>
    <comment_count>5</comment_count>
      <attachid>452983</attachid>
    <who name="Patrick Griffis">pgriffis</who>
    <bug_when>2022-02-23 10:57:21 -0800</bug_when>
    <thetext>Comment on attachment 452983
Patch

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

&gt; Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp:355
&gt; +    if (!WTF::String(path).startsWith(&quot;/etc/&quot;))

No point in making a new object. `g_str_has_prefix()` takes a `char*`.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845231</commentid>
    <comment_count>6</comment_count>
      <attachid>453003</attachid>
    <who name="apteryx">maxim.cournoyer</who>
    <bug_when>2022-02-23 11:20:37 -0800</bug_when>
    <thetext>Created attachment 453003
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845241</commentid>
    <comment_count>7</comment_count>
    <who name="apteryx">maxim.cournoyer</who>
    <bug_when>2022-02-23 11:35:16 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #3)
&gt; Comment on attachment 452983 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=452983&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp:334
&gt; &gt; +static void bindSymlinksRealPath(Vector&lt;CString&gt;&amp; args, const char* path, const char* bindOption = &quot;--ro-bind&quot;)
&gt; &gt; +{
&gt; &gt; +    WTF::String realPath = FileSystem::realPath(path);
&gt; &gt; +    if (path == realPath) {
&gt; &gt; +        const char* rpath = realPath.utf8().data();
&gt; &gt; +        args.appendVector(Vector&lt;CString&gt;({ bindOption, rpath, rpath }));
&gt; &gt; +    }
&gt; &gt; +}
&gt; 
&gt; I&apos;m a little confused here.
&gt; 
&gt; What I expected: if the path is a symlink, bind its target instead so the
&gt; operation doesn&apos;t fail.
&gt; 
&gt; What you have here: if the path is a symlink (path != realPath), ignore it.
&gt; Sure, the operation will not fail if you skip it, but won&apos;t you still wind
&gt; up with a broken sandbox?

Hmm, you are right.  Fixed.

&gt; &gt; Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp:352
&gt; &gt; +    bindSymlinksRealPath(args, path, bindType);
&gt; &gt; +    // As /etc is exposed wholesale, do not layer extraneous bind
&gt; 
&gt; Style nit: leave a blank line here.

Fixed.

Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845271</commentid>
    <comment_count>8</comment_count>
      <attachid>453003</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-02-23 12:46:37 -0800</bug_when>
    <thetext>Comment on attachment 453003
Patch

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

OK, almost there...

&gt; Source/WebKit/ChangeLog:3
&gt; +        Canonicalize source paths passed to bindIfExists in BubbleWrap launcher

This line should match the title of the bug:

[WPE][GTK] Paths should be canonicalized before calling bwrap

&gt; Source/WebKit/ChangeLog:6
&gt; +        Reviewed by Michael Catanzaro and Adrian Perez.

Please don&apos;t fill this out yourself unless you&apos;ve actually received r+. Just leave it saying NOBODY (OOPS!). Confusing, I know....

&gt; Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp:172
&gt; +        const char* rpath = realPath.utf8().data();
&gt; +        args.appendVector(Vector&lt;CString&gt;({ bindOption, rpath, rpath }));

This is a use-after-free again. The temporary utf8() is out of scope, so rpath is dangling here. You must own the memory somehow. Probably the easiest way is to change rpath to be a CString:

CString rpath = realPath.utf8();
args.appendVector(Vector&lt;CString&gt;({ bindOption, rpath.data(), rpath.data() }));

I think that would work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845311</commentid>
    <comment_count>9</comment_count>
      <attachid>453026</attachid>
    <who name="apteryx">maxim.cournoyer</who>
    <bug_when>2022-02-23 14:12:06 -0800</bug_when>
    <thetext>Created attachment 453026
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845312</commentid>
    <comment_count>10</comment_count>
    <who name="apteryx">maxim.cournoyer</who>
    <bug_when>2022-02-23 14:14:11 -0800</bug_when>
    <thetext>&gt; 
&gt; &gt; Source/WebKit/ChangeLog:3
&gt; &gt; +        Canonicalize source paths passed to bindIfExists in BubbleWrap launcher
&gt; 
&gt; This line should match the title of the bug:
&gt;
&gt; 
&gt; [WPE][GTK] Paths should be canonicalized before calling bwrap

Fixed.
 
&gt; &gt; Source/WebKit/ChangeLog:6
&gt; &gt; +        Reviewed by Michael Catanzaro and Adrian Perez.
&gt; 
&gt; Please don&apos;t fill this out yourself unless you&apos;ve actually received r+. Just
&gt; leave it saying NOBODY (OOPS!). Confusing, I know....

OK! I wasn&apos;t sure. Fixed.
 
&gt; &gt; Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp:172
&gt; &gt; +        const char* rpath = realPath.utf8().data();
&gt; &gt; +        args.appendVector(Vector&lt;CString&gt;({ bindOption, rpath, rpath }));
&gt; 
&gt; This is a use-after-free again. The temporary utf8() is out of scope, so
&gt; rpath is dangling here. You must own the memory somehow. Probably the
&gt; easiest way is to change rpath to be a CString:
&gt; 
&gt; CString rpath = realPath.utf8();
&gt; args.appendVector(Vector&lt;CString&gt;({ bindOption, rpath.data(), rpath.data()
&gt; }));
&gt; 
&gt; I think that would work.

Tricky!  I&apos;m still not sure I fully understand; but I&apos;ve used your suggestion.

Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845320</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2022-02-23 14:30:26 -0800</bug_when>
    <thetext>(In reply to apteryx from comment #10)
&gt; Tricky!  I&apos;m still not sure I fully understand; but I&apos;ve used your
&gt; suggestion.

It&apos;s really simple. rpath.utf8() is a CString. rpath.utf8().data() is a pointer to the char* data owned by the CString. It&apos;s valid for the lifetime of rpath.utf8(). Once rpath.utf8() is destroyed, it&apos;s a dangling pointer to memory that is no longer valid. And in your previous patch, it was destroyed right away, because it was a temporary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845338</commentid>
    <comment_count>12</comment_count>
    <who name="apteryx">maxim.cournoyer</who>
    <bug_when>2022-02-23 15:03:55 -0800</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #11)
&gt; (In reply to apteryx from comment #10)
&gt; &gt; Tricky!  I&apos;m still not sure I fully understand; but I&apos;ve used your
&gt; &gt; suggestion.
&gt; 
&gt; It&apos;s really simple. rpath.utf8() is a CString. rpath.utf8().data() is a
&gt; pointer to the char* data owned by the CString. It&apos;s valid for the lifetime
&gt; of rpath.utf8(). Once rpath.utf8() is destroyed, it&apos;s a dangling pointer to
&gt; memory that is no longer valid. And in your previous patch, it was destroyed
&gt; right away, because it was a temporary.

Thank you for having explained in more details... it&apos;s clear now!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845427</commentid>
    <comment_count>13</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-23 16:50:34 -0800</bug_when>
    <thetext>Committed r290401 (247713@main): &lt;https://commits.webkit.org/247713@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453026.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1964455</commentid>
    <comment_count>14</comment_count>
      <attachid>453026</attachid>
    <who name="Philippe Normand">philn</who>
    <bug_when>2023-06-30 05:00:55 -0700</bug_when>
    <thetext>Comment on attachment 453026
Patch

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

&gt; Source/WebKit/UIProcess/Launcher/glib/BubblewrapLauncher.cpp:173
&gt; +    if (path != realPath) {
&gt; +        CString rpath = realPath.utf8();
&gt; +        args.appendVector(Vector&lt;CString&gt;({ bindOption, rpath.data(), rpath.data() }));
&gt; +    }

I don&apos;t understand this, path and realPath will be equal if path has no symlink, so path won&apos;t be bound at all in the sandbox. Was that really the intent here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1964680</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2023-07-02 07:45:11 -0700</bug_when>
    <thetext>If it&apos;s not a symlink then it gets bound at the bottom of bindIfExists, after the call to bindSymlinksRealPath.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452983</attachid>
            <date>2022-02-23 08:20:08 -0800</date>
            <delta_ts>2022-02-23 11:20:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211131-20220223112007.patch</filename>
            <type>text/plain</type>
            <size>3566</size>
            <attacher name="apteryx">maxim.cournoyer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5MTg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDkyN2I1NjIyMjQ3ZDlkNTg3
NTI0MTc3NzFkMWMwNzc2YzE0MjhkMzAuLjUxMTQ5MDliZmIzYTZjMjMwYTU0ZjdhNzRiYmFkZGYx
MTMyNjBkNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMjMgIE1heGltIENv
dXJub3llciAgPG1heGltLmNvdXJub3llckBnbWFpbC5jb20+CisKKyAgICAgICAgQ2Fub25pY2Fs
aXplIHNvdXJjZSBwYXRocyBwYXNzZWQgdG8gYmluZElmRXhpc3RzIGluIEJ1YmJsZVdyYXAgbGF1
bmNoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MTEzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvQnViYmxld3JhcExhdW5jaGVyLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6YmluZFN5bWxpbmtzUmVhbFBhdGgpOiBSZWxvY2F0ZSBlYXJsaWVyIGluIGZpbGUs
CisgICAgICAgIGFkZCBhICdiaW5kT3B0aW9uJyBhcmd1bWVudCBhbmQgdXNlIEZpbGVTeXN0ZW06
OnJlYWxQYXRoIGluc3RlYWQKKyAgICAgICAgb2YgcmVhbHBhdGggZnJvbSB0aGUgc3RhbmRhcmQg
QyBsaWJyYXJ5LgorICAgICAgICAoV2ViS2l0OjpiaW5kSWZFeGlzdHMpOiBVc2UgdGhlIG1vZGlm
aWVkIGFib3ZlIHByb2NlZHVyZSB0bworICAgICAgICBjYW5vbmljYWxpemUgdGhlIHNvdXJjZSBw
YXRoLCBhbmQgYXZvaWQgYWRkaW5nIGJpbmQgbW91bnRzIGZvcgorICAgICAgICBsb2NhdGlvbnMg
dW5kZXIgL2V0Yy4KKwogMjAyMi0wMi0wNSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZWZhY3RvciBSZW1vdGVMYXllckJhY2tpbmdTdG9yZUNvbGxl
Y3Rpb24gdG8gaGF2ZSBhIHNpbmdsZSBiYWNraW5nIHN0b3JlIHRyYXZlcnNhbCBmdW5jdGlvbgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9CdWJibGV3
cmFwTGF1bmNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9C
dWJibGV3cmFwTGF1bmNoZXIuY3BwCmluZGV4IDBkNWRkNGY2OTg2ZDY3MzNmNmZmY2I2OGI5ZmFi
OTExM2JiNTMyN2IuLmYwYTVlNGIwNWRmZmFjNDkyNmM4YjE0MWJkYTZhZDRlNTk3YTU3YjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvQnViYmxld3Jh
cExhdW5jaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9nbGli
L0J1YmJsZXdyYXBMYXVuY2hlci5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlIDxzZWNj
b21wLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNp
bmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUg
PHd0Zi9VbmlTdGRFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CkBAIC0z
MjUsNiArMzI0LDE1IEBAIGVudW0gY2xhc3MgQmluZEZsYWdzIHsKICAgICBEZXZpY2UsCiB9Owog
CitzdGF0aWMgdm9pZCBiaW5kU3ltbGlua3NSZWFsUGF0aChWZWN0b3I8Q1N0cmluZz4mIGFyZ3Ms
IGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIGJpbmRPcHRpb24gPSAiLS1yby1iaW5kIikK
K3sKKyAgICBXVEY6OlN0cmluZyByZWFsUGF0aCA9IEZpbGVTeXN0ZW06OnJlYWxQYXRoKHBhdGgp
OworICAgIGlmIChwYXRoID09IHJlYWxQYXRoKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHJwYXRo
ID0gcmVhbFBhdGgudXRmOCgpLmRhdGEoKTsKKyAgICAgICAgYXJncy5hcHBlbmRWZWN0b3IoVmVj
dG9yPENTdHJpbmc+KHsgYmluZE9wdGlvbiwgcnBhdGgsIHJwYXRoIH0pKTsKKyAgICB9Cit9CisK
IHN0YXRpYyB2b2lkIGJpbmRJZkV4aXN0cyhWZWN0b3I8Q1N0cmluZz4mIGFyZ3MsIGNvbnN0IGNo
YXIqIHBhdGgsIEJpbmRGbGFncyBiaW5kRmxhZ3MgPSBCaW5kRmxhZ3M6OlJlYWRPbmx5KQogewog
ICAgIGlmICghcGF0aCB8fCBwYXRoWzBdID09ICdcMCcpCkBAIC0zMzcsNyArMzQ1LDE1IEBAIHN0
YXRpYyB2b2lkIGJpbmRJZkV4aXN0cyhWZWN0b3I8Q1N0cmluZz4mIGFyZ3MsIGNvbnN0IGNoYXIq
IHBhdGgsIEJpbmRGbGFncyBiaW5kCiAgICAgICAgIGJpbmRUeXBlID0gIi0tcm8tYmluZC10cnki
OwogICAgIGVsc2UKICAgICAgICAgYmluZFR5cGUgPSAiLS1iaW5kLXRyeSI7Ci0gICAgYXJncy5h
cHBlbmRWZWN0b3IoVmVjdG9yPENTdHJpbmc+KHsgYmluZFR5cGUsIHBhdGgsIHBhdGggfSkpOwor
CisgICAgLy8gQ2Fub25pY2FsaXplIHRoZSBzb3VyY2UgcGF0aCwgb3RoZXJ3aXNlIGEgc3ltYm9s
aWMgbGluayBjb3VsZAorICAgIC8vIHBvaW50IHRvIGEgbG9jYXRpb24gb3V0c2lkZSBvZiB0aGUg
bmFtZXNwYWNlLgorICAgIGJpbmRTeW1saW5rc1JlYWxQYXRoKGFyZ3MsIHBhdGgsIGJpbmRUeXBl
KTsKKyAgICAvLyBBcyAvZXRjIGlzIGV4cG9zZWQgd2hvbGVzYWxlLCBkbyBub3QgbGF5ZXIgZXh0
cmFuZW91cyBiaW5kCisgICAgLy8gZGlyZWN0aXZlcyBvbiB0b3AsIHdoaWNoIGNvdWxkIGZhaWwg
aW4gdGhlIHByZXNlbmNlIG9mIHN5bWJvbGljCisgICAgLy8gbGlua3MuCisgICAgaWYgKCFXVEY6
OlN0cmluZyhwYXRoKS5zdGFydHNXaXRoKCIvZXRjLyIpKQorICAgICAgICBhcmdzLmFwcGVuZFZl
Y3RvcihWZWN0b3I8Q1N0cmluZz4oeyBiaW5kVHlwZSwgcGF0aCwgcGF0aCB9KSk7CiB9CiAKIHN0
YXRpYyB2b2lkIGJpbmREQnVzU2Vzc2lvbihWZWN0b3I8Q1N0cmluZz4mIGFyZ3MsIFhER0RCdXNQ
cm94eUxhdW5jaGVyJiBwcm94eSkKQEAgLTYxNSwxNyArNjMxLDYgQEAgc3RhdGljIHZvaWQgYmlu
ZFY0bChWZWN0b3I8Q1N0cmluZz4mIGFyZ3MpCiAgICAgfSkpOwogfQogCi1zdGF0aWMgdm9pZCBi
aW5kU3ltbGlua3NSZWFsUGF0aChWZWN0b3I8Q1N0cmluZz4mIGFyZ3MsIGNvbnN0IGNoYXIqIHBh
dGgpCi17Ci0gICAgY2hhciByZWFsUGF0aFtQQVRIX01BWF07Ci0KLSAgICBpZiAocmVhbHBhdGgo
cGF0aCwgcmVhbFBhdGgpICYmIHN0cmNtcChwYXRoLCByZWFsUGF0aCkpIHsKLSAgICAgICAgYXJn
cy5hcHBlbmRWZWN0b3IoVmVjdG9yPENTdHJpbmc+KHsKLSAgICAgICAgICAgICItLXJvLWJpbmQi
LCByZWFsUGF0aCwgcmVhbFBhdGgsCi0gICAgICAgIH0pKTsKLSAgICB9Ci19Ci0KIC8vIFRyYW5z
bGF0ZSBhIGxpYnNlY2NvbXAgZXJyb3IgY29kZSBpbnRvIGFuIGVycm9yIG1lc3NhZ2UuIGxpYnNl
Y2NvbXAKIC8vIG1vc3RseSByZXR1cm5zIG5lZ2F0aXZlIGVycm5vIHZhbHVlcyBzdWNoIGFzIC1F
Tk9NRU0sIGJ1dCBzb21lCiAvLyBzdGFuZGFyZCBlcnJubyB2YWx1ZXMgYXJlIHVzZWQgZm9yIG5v
bi1zdGFuZGFyZCBwdXJwb3NlcyB3aGVyZSB0aGVpcgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453003</attachid>
            <date>2022-02-23 11:20:37 -0800</date>
            <delta_ts>2022-02-23 14:12:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211131-20220223142036.patch</filename>
            <type>text/plain</type>
            <size>3552</size>
            <attacher name="apteryx">maxim.cournoyer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM2Y2ZiZWQ1N2UxMzlmNGI4
OGM5MzVmOGVjNDk1ZjljNjVhMzdmNGMuLjFjMmNhNTZjNGU0MWVlZDY2NGRiZDZlOTFkY2ZlZWMy
N2NjOTc4N2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMjMgIE1heGltIENv
dXJub3llciAgPG1heGltLmNvdXJub3llckBnbWFpbC5jb20+CisKKyAgICAgICAgQ2Fub25pY2Fs
aXplIHNvdXJjZSBwYXRocyBwYXNzZWQgdG8gYmluZElmRXhpc3RzIGluIEJ1YmJsZVdyYXAgbGF1
bmNoZXIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
MTEzMQorCisgICAgICAgIFJldmlld2VkIGJ5IE1pY2hhZWwgQ2F0YW56YXJvIGFuZCBBZHJpYW4g
UGVyZXouCisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9CdWJibGV3cmFwTGF1
bmNoZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpiaW5kU3ltbGlua3NSZWFsUGF0aCk6IFJlbG9j
YXRlIGVhcmxpZXIgaW4gZmlsZSwKKyAgICAgICAgYWRkIGEgJ2JpbmRPcHRpb24nIGFyZ3VtZW50
IGFuZCB1c2UgRmlsZVN5c3RlbTo6cmVhbFBhdGggaW5zdGVhZAorICAgICAgICBvZiByZWFscGF0
aCBmcm9tIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnkuCisgICAgICAgIChXZWJLaXQ6OmJpbmRJZkV4
aXN0cyk6IFVzZSB0aGUgbW9kaWZpZWQgYWJvdmUgcHJvY2VkdXJlIHRvCisgICAgICAgIGNhbm9u
aWNhbGl6ZSB0aGUgc291cmNlIHBhdGgsIGFuZCBhdm9pZCBhZGRpbmcgYmluZCBtb3VudHMgZm9y
CisgICAgICAgIGxvY2F0aW9ucyB1bmRlciAvZXRjLgorCiAyMDIyLTAyLTIzICBQaGlsaXBwZSBO
b3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXSBEZS1p
bml0aWFsaXplIEdTdHJlYW1lciBiZWZvcmUgdGVybWluYXRpbmcgV2ViUHJvY2VzcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9CdWJibGV3cmFwTGF1
bmNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvTGF1bmNoZXIvZ2xpYi9CdWJibGV3
cmFwTGF1bmNoZXIuY3BwCmluZGV4IGVjYzgwNDY2Mzc4NGIxM2RjNjg1NDM4OTZkN2Y4MjkwYWUy
ZjM2MmEuLmMwZGZjOGE4ODMzYWM3ODAwYzhkNTMyZTFjOWI4NDhhZWU3OTcxZGQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xhdW5jaGVyL2dsaWIvQnViYmxld3JhcExhdW5j
aGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9MYXVuY2hlci9nbGliL0J1YmJs
ZXdyYXBMYXVuY2hlci5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlIDxzZWNjb21wLmg+
CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRl
IDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvRmlsZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9V
bmlTdGRFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CkBAIC0xNjUsNiAr
MTY0LDE1IEBAIGVudW0gY2xhc3MgQmluZEZsYWdzIHsKICAgICBEZXZpY2UsCiB9OwogCitzdGF0
aWMgdm9pZCBiaW5kU3ltbGlua3NSZWFsUGF0aChWZWN0b3I8Q1N0cmluZz4mIGFyZ3MsIGNvbnN0
IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIGJpbmRPcHRpb24gPSAiLS1yby1iaW5kIikKK3sKKyAg
ICBXVEY6OlN0cmluZyByZWFsUGF0aCA9IEZpbGVTeXN0ZW06OnJlYWxQYXRoKHBhdGgpOworICAg
IGlmIChwYXRoICE9IHJlYWxQYXRoKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHJwYXRoID0gcmVh
bFBhdGgudXRmOCgpLmRhdGEoKTsKKyAgICAgICAgYXJncy5hcHBlbmRWZWN0b3IoVmVjdG9yPENT
dHJpbmc+KHsgYmluZE9wdGlvbiwgcnBhdGgsIHJwYXRoIH0pKTsKKyAgICB9Cit9CisKIHN0YXRp
YyB2b2lkIGJpbmRJZkV4aXN0cyhWZWN0b3I8Q1N0cmluZz4mIGFyZ3MsIGNvbnN0IGNoYXIqIHBh
dGgsIEJpbmRGbGFncyBiaW5kRmxhZ3MgPSBCaW5kRmxhZ3M6OlJlYWRPbmx5KQogewogICAgIGlm
ICghcGF0aCB8fCBwYXRoWzBdID09ICdcMCcpCkBAIC0xNzcsNyArMTg1LDE2IEBAIHN0YXRpYyB2
b2lkIGJpbmRJZkV4aXN0cyhWZWN0b3I8Q1N0cmluZz4mIGFyZ3MsIGNvbnN0IGNoYXIqIHBhdGgs
IEJpbmRGbGFncyBiaW5kCiAgICAgICAgIGJpbmRUeXBlID0gIi0tcm8tYmluZC10cnkiOwogICAg
IGVsc2UKICAgICAgICAgYmluZFR5cGUgPSAiLS1iaW5kLXRyeSI7Ci0gICAgYXJncy5hcHBlbmRW
ZWN0b3IoVmVjdG9yPENTdHJpbmc+KHsgYmluZFR5cGUsIHBhdGgsIHBhdGggfSkpOworCisgICAg
Ly8gQ2Fub25pY2FsaXplIHRoZSBzb3VyY2UgcGF0aCwgb3RoZXJ3aXNlIGEgc3ltYm9saWMgbGlu
ayBjb3VsZAorICAgIC8vIHBvaW50IHRvIGEgbG9jYXRpb24gb3V0c2lkZSBvZiB0aGUgbmFtZXNw
YWNlLgorICAgIGJpbmRTeW1saW5rc1JlYWxQYXRoKGFyZ3MsIHBhdGgsIGJpbmRUeXBlKTsKKwor
ICAgIC8vIEFzIC9ldGMgaXMgZXhwb3NlZCB3aG9sZXNhbGUsIGRvIG5vdCBsYXllciBleHRyYW5l
b3VzIGJpbmQKKyAgICAvLyBkaXJlY3RpdmVzIG9uIHRvcCwgd2hpY2ggY291bGQgZmFpbCBpbiB0
aGUgcHJlc2VuY2Ugb2Ygc3ltYm9saWMKKyAgICAvLyBsaW5rcy4KKyAgICBpZiAoIVdURjo6U3Ry
aW5nKHBhdGgpLnN0YXJ0c1dpdGgoIi9ldGMvIikpCisgICAgICAgIGFyZ3MuYXBwZW5kVmVjdG9y
KFZlY3RvcjxDU3RyaW5nPih7IGJpbmRUeXBlLCBwYXRoLCBwYXRoIH0pKTsKIH0KIAogc3RhdGlj
IHZvaWQgYmluZERCdXNTZXNzaW9uKFZlY3RvcjxDU3RyaW5nPiYgYXJncywgYm9vbCBhbGxvd1Bv
cnRhbHMpCkBAIC00MTAsMTcgKzQyNyw2IEBAIHN0YXRpYyB2b2lkIGJpbmRWNGwoVmVjdG9yPENT
dHJpbmc+JiBhcmdzKQogICAgIH0pKTsKIH0KIAotc3RhdGljIHZvaWQgYmluZFN5bWxpbmtzUmVh
bFBhdGgoVmVjdG9yPENTdHJpbmc+JiBhcmdzLCBjb25zdCBjaGFyKiBwYXRoKQotewotICAgIGNo
YXIgcmVhbFBhdGhbUEFUSF9NQVhdOwotCi0gICAgaWYgKHJlYWxwYXRoKHBhdGgsIHJlYWxQYXRo
KSAmJiBzdHJjbXAocGF0aCwgcmVhbFBhdGgpKSB7Ci0gICAgICAgIGFyZ3MuYXBwZW5kVmVjdG9y
KFZlY3RvcjxDU3RyaW5nPih7Ci0gICAgICAgICAgICAiLS1yby1iaW5kIiwgcmVhbFBhdGgsIHJl
YWxQYXRoLAotICAgICAgICB9KSk7Ci0gICAgfQotfQotCiAvLyBUcmFuc2xhdGUgYSBsaWJzZWNj
b21wIGVycm9yIGNvZGUgaW50byBhbiBlcnJvciBtZXNzYWdlLiBsaWJzZWNjb21wCiAvLyBtb3N0
bHkgcmV0dXJucyBuZWdhdGl2ZSBlcnJubyB2YWx1ZXMgc3VjaCBhcyAtRU5PTUVNLCBidXQgc29t
ZQogLy8gc3RhbmRhcmQgZXJybm8gdmFsdWVzIGFyZSB1c2VkIGZvciBub24tc3RhbmRhcmQgcHVy
cG9zZXMgd2hlcmUgdGhlaXIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453026</attachid>
            <date>2022-02-23 14:12:06 -0800</date>
            <delta_ts>2022-02-23 16:50:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-211131-20220223171206.patch</filename>
            <type>text/plain</type>
            <size>3519</size>
            <attacher name="apteryx">maxim.cournoyer</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM2Y2ZiZWQ1N2UxMzlmNGI4
OGM5MzVmOGVjNDk1ZjljNjVhMzdmNGMuLmY1YWFlNGE0NTRjZTNjMDQyMGMzMzFlOWFlNGE4ZWNk
OTg2NjQ1YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMjMgIE1heGltIENv
dXJub3llciAgPG1heGltLmNvdXJub3llckBnbWFpbC5jb20+CisKKyAgICAgICAgW1dQRV1bR1RL
XSBQYXRocyBzaG91bGQgYmUgY2Fub25pY2FsaXplZCBiZWZvcmUgY2FsbGluZyBid3JhcAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjExMTMxCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3Mv
TGF1bmNoZXIvZ2xpYi9CdWJibGV3cmFwTGF1bmNoZXIuY3BwOgorICAgICAgICAoV2ViS2l0Ojpi
aW5kU3ltbGlua3NSZWFsUGF0aCk6IFJlbG9jYXRlIGVhcmxpZXIgaW4gZmlsZSwKKyAgICAgICAg
YWRkIGEgJ2JpbmRPcHRpb24nIGFyZ3VtZW50IGFuZCB1c2UgRmlsZVN5c3RlbTo6cmVhbFBhdGgg
aW5zdGVhZAorICAgICAgICBvZiByZWFscGF0aCBmcm9tIHRoZSBzdGFuZGFyZCBDIGxpYnJhcnku
CisgICAgICAgIChXZWJLaXQ6OmJpbmRJZkV4aXN0cyk6IFVzZSB0aGUgbW9kaWZpZWQgYWJvdmUg
cHJvY2VkdXJlIHRvCisgICAgICAgIGNhbm9uaWNhbGl6ZSB0aGUgc291cmNlIHBhdGgsIGFuZCBh
dm9pZCBhZGRpbmcgYmluZCBtb3VudHMgZm9yCisgICAgICAgIGxvY2F0aW9ucyB1bmRlciAvZXRj
LgorCiAyMDIyLTAyLTIzICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4K
IAogICAgICAgICBbR1N0cmVhbWVyXSBEZS1pbml0aWFsaXplIEdTdHJlYW1lciBiZWZvcmUgdGVy
bWluYXRpbmcgV2ViUHJvY2VzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
TGF1bmNoZXIvZ2xpYi9CdWJibGV3cmFwTGF1bmNoZXIuY3BwIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvTGF1bmNoZXIvZ2xpYi9CdWJibGV3cmFwTGF1bmNoZXIuY3BwCmluZGV4IGVjYzgwNDY2
Mzc4NGIxM2RjNjg1NDM4OTZkN2Y4MjkwYWUyZjM2MmEuLmEyYTFjOWQ3YTRkZGEzMjVlNDA0NmM5
ZTYyZDBjYzFhOGE4NGYxNGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0xh
dW5jaGVyL2dsaWIvQnViYmxld3JhcExhdW5jaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9MYXVuY2hlci9nbGliL0J1YmJsZXdyYXBMYXVuY2hlci5jcHAKQEAgLTI3LDcgKzI3
LDYgQEAKICNpbmNsdWRlIDxzZWNjb21wLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAjaW5j
bHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDx3dGYvRmls
ZVN5c3RlbS5oPgogI2luY2x1ZGUgPHd0Zi9VbmlTdGRFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYv
Z2xpYi9HUmVmUHRyLmg+CkBAIC0xNjUsNiArMTY0LDE1IEBAIGVudW0gY2xhc3MgQmluZEZsYWdz
IHsKICAgICBEZXZpY2UsCiB9OwogCitzdGF0aWMgdm9pZCBiaW5kU3ltbGlua3NSZWFsUGF0aChW
ZWN0b3I8Q1N0cmluZz4mIGFyZ3MsIGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIGJpbmRP
cHRpb24gPSAiLS1yby1iaW5kIikKK3sKKyAgICBXVEY6OlN0cmluZyByZWFsUGF0aCA9IEZpbGVT
eXN0ZW06OnJlYWxQYXRoKHBhdGgpOworICAgIGlmIChwYXRoICE9IHJlYWxQYXRoKSB7CisgICAg
ICAgIENTdHJpbmcgcnBhdGggPSByZWFsUGF0aC51dGY4KCk7CisgICAgICAgIGFyZ3MuYXBwZW5k
VmVjdG9yKFZlY3RvcjxDU3RyaW5nPih7IGJpbmRPcHRpb24sIHJwYXRoLmRhdGEoKSwgcnBhdGgu
ZGF0YSgpIH0pKTsKKyAgICB9Cit9CisKIHN0YXRpYyB2b2lkIGJpbmRJZkV4aXN0cyhWZWN0b3I8
Q1N0cmluZz4mIGFyZ3MsIGNvbnN0IGNoYXIqIHBhdGgsIEJpbmRGbGFncyBiaW5kRmxhZ3MgPSBC
aW5kRmxhZ3M6OlJlYWRPbmx5KQogewogICAgIGlmICghcGF0aCB8fCBwYXRoWzBdID09ICdcMCcp
CkBAIC0xNzcsNyArMTg1LDE2IEBAIHN0YXRpYyB2b2lkIGJpbmRJZkV4aXN0cyhWZWN0b3I8Q1N0
cmluZz4mIGFyZ3MsIGNvbnN0IGNoYXIqIHBhdGgsIEJpbmRGbGFncyBiaW5kCiAgICAgICAgIGJp
bmRUeXBlID0gIi0tcm8tYmluZC10cnkiOwogICAgIGVsc2UKICAgICAgICAgYmluZFR5cGUgPSAi
LS1iaW5kLXRyeSI7Ci0gICAgYXJncy5hcHBlbmRWZWN0b3IoVmVjdG9yPENTdHJpbmc+KHsgYmlu
ZFR5cGUsIHBhdGgsIHBhdGggfSkpOworCisgICAgLy8gQ2Fub25pY2FsaXplIHRoZSBzb3VyY2Ug
cGF0aCwgb3RoZXJ3aXNlIGEgc3ltYm9saWMgbGluayBjb3VsZAorICAgIC8vIHBvaW50IHRvIGEg
bG9jYXRpb24gb3V0c2lkZSBvZiB0aGUgbmFtZXNwYWNlLgorICAgIGJpbmRTeW1saW5rc1JlYWxQ
YXRoKGFyZ3MsIHBhdGgsIGJpbmRUeXBlKTsKKworICAgIC8vIEFzIC9ldGMgaXMgZXhwb3NlZCB3
aG9sZXNhbGUsIGRvIG5vdCBsYXllciBleHRyYW5lb3VzIGJpbmQKKyAgICAvLyBkaXJlY3RpdmVz
IG9uIHRvcCwgd2hpY2ggY291bGQgZmFpbCBpbiB0aGUgcHJlc2VuY2Ugb2Ygc3ltYm9saWMKKyAg
ICAvLyBsaW5rcy4KKyAgICBpZiAoIWdfc3RyX2hhc19wcmVmaXgocGF0aCwgIi9ldGMvIikpCisg
ICAgICAgIGFyZ3MuYXBwZW5kVmVjdG9yKFZlY3RvcjxDU3RyaW5nPih7IGJpbmRUeXBlLCBwYXRo
LCBwYXRoIH0pKTsKIH0KIAogc3RhdGljIHZvaWQgYmluZERCdXNTZXNzaW9uKFZlY3RvcjxDU3Ry
aW5nPiYgYXJncywgYm9vbCBhbGxvd1BvcnRhbHMpCkBAIC00MTAsMTcgKzQyNyw2IEBAIHN0YXRp
YyB2b2lkIGJpbmRWNGwoVmVjdG9yPENTdHJpbmc+JiBhcmdzKQogICAgIH0pKTsKIH0KIAotc3Rh
dGljIHZvaWQgYmluZFN5bWxpbmtzUmVhbFBhdGgoVmVjdG9yPENTdHJpbmc+JiBhcmdzLCBjb25z
dCBjaGFyKiBwYXRoKQotewotICAgIGNoYXIgcmVhbFBhdGhbUEFUSF9NQVhdOwotCi0gICAgaWYg
KHJlYWxwYXRoKHBhdGgsIHJlYWxQYXRoKSAmJiBzdHJjbXAocGF0aCwgcmVhbFBhdGgpKSB7Ci0g
ICAgICAgIGFyZ3MuYXBwZW5kVmVjdG9yKFZlY3RvcjxDU3RyaW5nPih7Ci0gICAgICAgICAgICAi
LS1yby1iaW5kIiwgcmVhbFBhdGgsIHJlYWxQYXRoLAotICAgICAgICB9KSk7Ci0gICAgfQotfQot
CiAvLyBUcmFuc2xhdGUgYSBsaWJzZWNjb21wIGVycm9yIGNvZGUgaW50byBhbiBlcnJvciBtZXNz
YWdlLiBsaWJzZWNjb21wCiAvLyBtb3N0bHkgcmV0dXJucyBuZWdhdGl2ZSBlcnJubyB2YWx1ZXMg
c3VjaCBhcyAtRU5PTUVNLCBidXQgc29tZQogLy8gc3RhbmRhcmQgZXJybm8gdmFsdWVzIGFyZSB1
c2VkIGZvciBub24tc3RhbmRhcmQgcHVycG9zZXMgd2hlcmUgdGhlaXIK
</data>

          </attachment>
      

    </bug>

</bugzilla>