<?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>149965</bug_id>
          
          <creation_ts>2015-10-09 12:49:50 -0700</creation_ts>
          <short_desc>REGRESSION: ASSERT (impl-&gt;isAtomic()) @ facebook.com</short_desc>
          <delta_ts>2015-10-13 09:04:01 -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>JavaScriptCore</component>
          <version>Other</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="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1131989</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-09 12:49:50 -0700</bug_when>
    <thetext>STEPS TO REPRODUCE:
1. Create a debug build
2. Visit Facebook.com
3. Wait about 5 seconds

ASSERTION FAILED: impl-&gt;isAtomic()
/Volumes/Big/ggaren/OpenSource/Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp(261) : bool JSC::DFG::ConstantFoldingPhase::foldConstants(JSC::DFG::BasicBlock *)
1   0x114645330 WTFCrash
2   0x113d2b395 JSC::DFG::ConstantFoldingPhase::foldConstants(JSC::DFG::BasicBlock*)
3   0x113d2a39a JSC::DFG::ConstantFoldingPhase::run()
4   0x113d2a215 bool JSC::DFG::runAndLog&lt;JSC::DFG::ConstantFoldingPhase&gt;(JSC::DFG::ConstantFoldingPhase&amp;)
5   0x113d2a19e bool JSC::DFG::runPhase&lt;JSC::DFG::ConstantFoldingPhase&gt;(JSC::DFG::Graph&amp;)
6   0x113d2a158 JSC::DFG::performConstantFolding(JSC::DFG::Graph&amp;)
7   0x113ea1bd1 JSC::DFG::Plan::compileInThreadImpl(JSC::DFG::LongLivedState&amp;)
8   0x113ea0cda JSC::DFG::Plan::compileInThread(JSC::DFG::LongLivedState&amp;, JSC::DFG::ThreadData*)
9   0x113fa60d0 JSC::DFG::Worklist::runThread(JSC::DFG::ThreadData*)
10  0x113fa45c4 JSC::DFG::Worklist::threadFunction(void*)
11  0x1146b0419 WTF::createThread(void (*)(void*), void*, char const*)::$_0::operator()() const
12  0x1146b03ec std::__1::__function::__func&lt;WTF::createThread(void (*)(void*), void*, char const*)::$_0, std::__1::allocator&lt;WTF::createThread(void (*)(void*), void*, char const*)::$_0&gt;, void ()&gt;::operator()()
13  0x1140d91da std::__1::function&lt;void ()&gt;::operator()() const
14  0x1146af36e WTF::threadEntryPoint(void*)
15  0x1146b0cf8 WTF::wtfThreadEntryPoint(void*)
16  0x7fff8e3ba268 _pthread_body
17  0x7fff8e3ba1e5 _pthread_body
18  0x7fff8e3b841d thread_start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131990</commentid>
    <comment_count>1</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-09 12:55:47 -0700</bug_when>
    <thetext>I debugged this a little.

In the crashing case, the AbstractInterpreter executes CheckIdent and *does not* find a constant. Then, the DFGConstantFoldingPhase executes CheckIdent and *does* find a constant. The DFGConstantFoldingPhase constant is string equal to the uid expected by CheckIdent, but it is a plain string and not an atomic string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131994</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-09 13:01:51 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; I debugged this a little.
&gt; 
&gt; In the crashing case, the AbstractInterpreter executes CheckIdent and *does
&gt; not* find a constant. Then, the DFGConstantFoldingPhase executes CheckIdent
&gt; and *does* find a constant. The DFGConstantFoldingPhase constant is string
&gt; equal to the uid expected by CheckIdent, but it is a plain string and not an
&gt; atomic string.

It&apos;s more subtle than that.

The constant folding phase code is assuming that it is running after m_interpreter.execute().  It&apos;s saying things like, &quot;oh hey this has to be an atomic string because we already did StringIdentUse filtering&quot;.  It&apos;s true that if you had run edge filtering first, then StringIdentUse would have filtered an abstract value containing a plain string to the empty abstract value (representing the fact that we would have always exited).  And that&apos;s exactly what happens inside AbstractInterpreter - the executeEffects() method that has the CheckIdent case runs after edge filtering, so the AbstractInterpreter sees an empty AbstractValue because the StringIdentUse filtered the non-ident string to the empty value.

The solution is to fix the constant folder to no longer assume that edge filtering already ran.  If it sees a constant value, it should verify that the constant value is valid (i.e. would have passed edge filtering, i.e. would have been an atomic string).

Probably just replacing:

ASSERT(impl-&gt;isAtomic());

with:

if (!impl-&gt;isAtomic())
    break;

would go a long way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132213</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-10 22:41:09 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (In reply to comment #1)
&gt; &gt; I debugged this a little.
&gt; &gt; 
&gt; &gt; In the crashing case, the AbstractInterpreter executes CheckIdent and *does
&gt; &gt; not* find a constant. Then, the DFGConstantFoldingPhase executes CheckIdent
&gt; &gt; and *does* find a constant. The DFGConstantFoldingPhase constant is string
&gt; &gt; equal to the uid expected by CheckIdent, but it is a plain string and not an
&gt; &gt; atomic string.
&gt; 
&gt; It&apos;s more subtle than that.
&gt; 
&gt; The constant folding phase code is assuming that it is running after
&gt; m_interpreter.execute().  It&apos;s saying things like, &quot;oh hey this has to be an
&gt; atomic string because we already did StringIdentUse filtering&quot;.  It&apos;s true
&gt; that if you had run edge filtering first, then StringIdentUse would have
&gt; filtered an abstract value containing a plain string to the empty abstract
&gt; value (representing the fact that we would have always exited).  And that&apos;s
&gt; exactly what happens inside AbstractInterpreter - the executeEffects()
&gt; method that has the CheckIdent case runs after edge filtering, so the
&gt; AbstractInterpreter sees an empty AbstractValue because the StringIdentUse
&gt; filtered the non-ident string to the empty value.
&gt; 
&gt; The solution is to fix the constant folder to no longer assume that edge
&gt; filtering already ran.  If it sees a constant value, it should verify that
&gt; the constant value is valid (i.e. would have passed edge filtering, i.e.
&gt; would have been an atomic string).
&gt; 
&gt; Probably just replacing:
&gt; 
&gt; ASSERT(impl-&gt;isAtomic());
&gt; 
&gt; with:
&gt; 
&gt; if (!impl-&gt;isAtomic())
&gt;     break;
&gt; 
&gt; would go a long way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132324</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-12 09:37:59 -0700</bug_when>
    <thetext>Thanks. I&apos;m now investigating to create the reproducible test cases (still did not succeed yet).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132326</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 09:46:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Thanks. I&apos;m now investigating to create the reproducible test cases (still
&gt; did not succeed yet).

This is the kind of bug where it&apos;s extremely valuable to land a fix, even if it does not have a test case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132337</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-12 10:09:34 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Thanks. I&apos;m now investigating to create the reproducible test cases (still
&gt; &gt; did not succeed yet).
&gt; 
&gt; This is the kind of bug where it&apos;s extremely valuable to land a fix, even if
&gt; it does not have a test case.

Thanks. OK, I&apos;ll upload the patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132357</commentid>
    <comment_count>7</comment_count>
      <attachid>262900</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-12 10:57:57 -0700</bug_when>
    <thetext>Created attachment 262900
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132361</commentid>
    <comment_count>8</comment_count>
      <attachid>262900</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-12 11:02:43 -0700</bug_when>
    <thetext>Comment on attachment 262900
Patch

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

Added comment :)

&gt; Source/JavaScriptCore/ChangeLog:15
&gt; +        in AI to the same in the constant folding phase.

If my understanding is not correct, please point it :)

In AI, we execute `executeEdges`. Finally, this executes AbstractValue::filter(with Use filter). And it makes the value empty if the value does not meet to the edge filter.
So essentially, in AI, this change is not required. AI makes the constant value JSEmpty when it does not meet to the filter.
I changed the code to keep it in sync with the code in the constant folding phase.
In constant folding phase, we extract the constant value before executing AI&apos;s execute. So it means we may see the non-edge-filtered value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132401</commentid>
    <comment_count>9</comment_count>
      <attachid>262900</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-12 11:55:25 -0700</bug_when>
    <thetext>Comment on attachment 262900
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:15
&gt;&gt; +        in AI to the same in the constant folding phase.
&gt; 
&gt; If my understanding is not correct, please point it :)
&gt; 
&gt; In AI, we execute `executeEdges`. Finally, this executes AbstractValue::filter(with Use filter). And it makes the value empty if the value does not meet to the edge filter.
&gt; So essentially, in AI, this change is not required. AI makes the constant value JSEmpty when it does not meet to the filter.
&gt; I changed the code to keep it in sync with the code in the constant folding phase.
&gt; In constant folding phase, we extract the constant value before executing AI&apos;s execute. So it means we may see the non-edge-filtered value.

I think your explanation in this ChangeLog is correct -- and indeed, if I only apply the constant folding change, and not the AI change, facebook.com stops crashing.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:2307
&gt;      case CheckIdent: {
&gt;          AbstractValue&amp; value = forNode(node-&gt;child1());
&gt;          UniquedStringImpl* uid = node-&gt;uidOperand();
&gt; -        ASSERT(uid-&gt;isSymbol() ? !(value.m_type &amp; ~SpecSymbol) : !(value.m_type &amp; ~SpecStringIdent)); // Edge filtering should have already ensured this.
&gt; +        const UniquedStringImpl* constantUid = nullptr;
&gt;  
&gt;          JSValue childConstant = value.value();
&gt;          if (childConstant) {
&gt;              if (uid-&gt;isSymbol()) {
&gt; -                ASSERT(childConstant.isSymbol());
&gt; -                if (asSymbol(childConstant)-&gt;privateName().uid() == uid) {
&gt; -                    m_state.setFoundConstants(true);
&gt; -                    break;
&gt; -                }
&gt; +                if (childConstant.isSymbol())
&gt; +                    constantUid = asSymbol(childConstant)-&gt;privateName().uid();
&gt;              } else {
&gt; -                ASSERT(childConstant.isString());
&gt; -                if (asString(childConstant)-&gt;tryGetValueImpl() == uid) {
&gt; -                    m_state.setFoundConstants(true);
&gt; -                    break;
&gt; +                if (childConstant.isString()) {
&gt; +                    if (const auto* impl = asString(childConstant)-&gt;tryGetValueImpl()) {
&gt; +                        // Edge filtering requires that a value here should be StringIdent.
&gt; +                        // However, a constant value propagated in DFG is not filtered.
&gt; +                        // So here, we check the propagated value is actually an atomic string.
&gt; +                        // And if it&apos;s not, we just ignore.
&gt; +                        if (impl-&gt;isAtomic())
&gt; +                            constantUid = static_cast&lt;const UniquedStringImpl*&gt;(impl);
&gt; +                    }
&gt;                  }
&gt;              }
&gt;          }
&gt;  
&gt; +        if (uid == constantUid) {
&gt; +            m_state.setFoundConstants(true);
&gt; +            break;
&gt; +        }

I&apos;m not sure about this change. Consistency is nice. But it&apos;s a bit confusing to have handling here for conditions that can never arise.

I think this patch might be better if you just make the change to the constant folding phase.

I wonder what Phil thinks.

&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:265
&gt; +                                // And if it&apos;s not, we just ignore.
&gt; +                                if (impl-&gt;isAtomic())
&gt; +                                    constantUid = static_cast&lt;const UniquedStringImpl*&gt;(impl);

Is it possible to test this? I think all we need is an inferred constant that is not an identifier in program text. Something like this:

function get(object, descriptor)
{
    return object[descriptor.propertyName];
}

noInline(get);

var propertyName = String(&quot;propertyName&quot; + (new Date).getSeconds());

function Descriptor () { }
Descriptor.prototype.propertyName = propertyName;

var object = { propertyName: 0 };
var descriptor = new Descriptor;

for (var i = 0; i &lt; 100000; ++i)
    get(object, descriptor);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132421</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 12:08:38 -0700</bug_when>
    <thetext>
&gt; &gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:2307
&gt; &gt;      case CheckIdent: {
&gt; &gt;          AbstractValue&amp; value = forNode(node-&gt;child1());
&gt; &gt;          UniquedStringImpl* uid = node-&gt;uidOperand();
&gt; &gt; -        ASSERT(uid-&gt;isSymbol() ? !(value.m_type &amp; ~SpecSymbol) : !(value.m_type &amp; ~SpecStringIdent)); // Edge filtering should have already ensured this.
&gt; &gt; +        const UniquedStringImpl* constantUid = nullptr;
&gt; &gt;  
&gt; &gt;          JSValue childConstant = value.value();
&gt; &gt;          if (childConstant) {
&gt; &gt;              if (uid-&gt;isSymbol()) {
&gt; &gt; -                ASSERT(childConstant.isSymbol());
&gt; &gt; -                if (asSymbol(childConstant)-&gt;privateName().uid() == uid) {
&gt; &gt; -                    m_state.setFoundConstants(true);
&gt; &gt; -                    break;
&gt; &gt; -                }
&gt; &gt; +                if (childConstant.isSymbol())
&gt; &gt; +                    constantUid = asSymbol(childConstant)-&gt;privateName().uid();
&gt; &gt;              } else {
&gt; &gt; -                ASSERT(childConstant.isString());
&gt; &gt; -                if (asString(childConstant)-&gt;tryGetValueImpl() == uid) {
&gt; &gt; -                    m_state.setFoundConstants(true);
&gt; &gt; -                    break;
&gt; &gt; +                if (childConstant.isString()) {
&gt; &gt; +                    if (const auto* impl = asString(childConstant)-&gt;tryGetValueImpl()) {
&gt; &gt; +                        // Edge filtering requires that a value here should be StringIdent.
&gt; &gt; +                        // However, a constant value propagated in DFG is not filtered.
&gt; &gt; +                        // So here, we check the propagated value is actually an atomic string.
&gt; &gt; +                        // And if it&apos;s not, we just ignore.
&gt; &gt; +                        if (impl-&gt;isAtomic())
&gt; &gt; +                            constantUid = static_cast&lt;const UniquedStringImpl*&gt;(impl);
&gt; &gt; +                    }
&gt; &gt;                  }
&gt; &gt;              }
&gt; &gt;          }
&gt; &gt;  
&gt; &gt; +        if (uid == constantUid) {
&gt; &gt; +            m_state.setFoundConstants(true);
&gt; &gt; +            break;
&gt; &gt; +        }
&gt; 
&gt; I&apos;m not sure about this change. Consistency is nice. But it&apos;s a bit
&gt; confusing to have handling here for conditions that can never arise.
&gt; 
&gt; I think this patch might be better if you just make the change to the
&gt; constant folding phase.
&gt; 
&gt; I wonder what Phil thinks.

I agree.

In AbstractInterpreter::executeEffects(), we know that we have already executed executeEdges(), and so it is correct (and preferable) to assert that the state is as it should be after edges are executed.

In ConstantFoldingPhase, for this particular node, we are not calling m_interpreter.execute().  Therefore, we are replacing all of the logic in both executeEdges() and executeEffects().  So, we cannot assume that executeEdges() has run.

It makes no sense to have consistency between code that is replacing execute() and code that loves in executeEffects().  If you&apos;re replacing execute(), then you are guaranteed that executeEdges() has not been called.  If you&apos;re implementing executeEffect(), then you are guaranteed that executeEdges() has been called.  The code must not look the same!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132658</commentid>
    <comment_count>11</comment_count>
      <attachid>262900</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-12 19:04:32 -0700</bug_when>
    <thetext>Comment on attachment 262900
Patch

OK, please rework this patch to remove the changes to the constant folding phase, and to add a test if possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132672</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 19:24:03 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 262900 [details]
&gt; Patch
&gt; 
&gt; OK, please rework this patch to remove the changes to the constant folding
&gt; phase, and to add a test if possible.

*remove the changes to the abstract interpreter. The changes to constant folding are the necessary ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132709</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-12 23:56:04 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Comment on attachment 262900 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; OK, please rework this patch to remove the changes to the constant folding
&gt; &gt; phase, and to add a test if possible.
&gt; 
&gt; *remove the changes to the abstract interpreter. The changes to constant
&gt; folding are the necessary ones.


Thanks. OK, I&apos;ll drop AI part in the above patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132767</commentid>
    <comment_count>14</comment_count>
      <attachid>262900</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-13 07:57:37 -0700</bug_when>
    <thetext>Comment on attachment 262900
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:265
&gt;&gt; +                                    constantUid = static_cast&lt;const UniquedStringImpl*&gt;(impl);
&gt; 
&gt; Is it possible to test this? I think all we need is an inferred constant that is not an identifier in program text. Something like this:
&gt; 
&gt; function get(object, descriptor)
&gt; {
&gt;     return object[descriptor.propertyName];
&gt; }
&gt; 
&gt; noInline(get);
&gt; 
&gt; var propertyName = String(&quot;propertyName&quot; + (new Date).getSeconds());
&gt; 
&gt; function Descriptor () { }
&gt; Descriptor.prototype.propertyName = propertyName;
&gt; 
&gt; var object = { propertyName: 0 };
&gt; var descriptor = new Descriptor;
&gt; 
&gt; for (var i = 0; i &lt; 100000; ++i)
&gt;     get(object, descriptor);

In the above case, we extract the constant value from descriptor.propertyName. So it becomes JSConstant (And it becomes atomic string because when using it in object[expr], it attempt to atomize the given string).
Hm, in the meantime, I&apos;ll just upload the revised patch...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132768</commentid>
    <comment_count>15</comment_count>
      <attachid>262987</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-13 07:59:33 -0700</bug_when>
    <thetext>Created attachment 262987
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132769</commentid>
    <comment_count>16</comment_count>
      <attachid>262987</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-10-13 08:07:21 -0700</bug_when>
    <thetext>Comment on attachment 262987
Patch

r=me

By the way, considering optimization:

(1) I wonder how Facebook produces this constant string that is somehow not an identifier. Usually, we try to make constant strings identifiers.

(2) I believe we *could* optimize this case to notice that the two strings, though not pointer equal, are character equal, and do the constant folding anyway.

Probably not a big deal, but I thought I would share the idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132770</commentid>
    <comment_count>17</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-10-13 08:17:10 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Comment on attachment 262987 [details]
&gt; Patch
&gt; 
&gt; r=me
&gt; 
&gt; By the way, considering optimization:
&gt; 
&gt; (1) I wonder how Facebook produces this constant string that is somehow not
&gt; an identifier. Usually, we try to make constant strings identifiers.
&gt; 
&gt; (2) I believe we *could* optimize this case to notice that the two strings,
&gt; though not pointer equal, are character equal, and do the constant folding
&gt; anyway.
&gt; 
&gt; Probably not a big deal, but I thought I would share the idea.

It looks interesting. Do you have any static HTML data to reproduce this?
This is because I still cannot reproduce this assertion failure...
Opening facebook.com with my account (localized: JP) in GTK+ port MiniBrowser (Maybe it&apos;s different part). But the assertion does not fire...
I think this is due to the fact that I did not use facebook so much... (there are only few contents)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132775</commentid>
    <comment_count>18</comment_count>
      <attachid>262987</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-13 09:03:57 -0700</bug_when>
    <thetext>Comment on attachment 262987
Patch

Clearing flags on attachment: 262987

Committed r190991: &lt;http://trac.webkit.org/changeset/190991&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132776</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-13 09:04:01 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262900</attachid>
            <date>2015-10-12 10:57:57 -0700</date>
            <delta_ts>2015-10-13 07:59:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149965-20151013025721.patch</filename>
            <type>text/plain</type>
            <size>5874</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwODU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MTU2OWY2NzlmNWE1NzZhOTU0OTlkM2QwYjA2ZGM3ZDI2NGE0ZmZhLi43NzMxMjIwN2E2YTNjMWRl
MjExMTAyNWM0NTQ4ODI1ZmU0MTllYTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAxNS0xMC0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OOiBBU1NFUlQgKGltcGwtPmlzQXRvbWljKCkpIEAg
ZmFjZWJvb2suY29tCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDk5NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBFZGdlIGZpbHRlcmluZyBmb3IgQ2hlY2tJZGVudCBlbnN1cmVzIHRoYXQgYSBnaXZlbiB2
YWx1ZSBpcyBlaXRoZXIgU3ltYm9sIG9yIFN0cmluZ0lkZW50LgorICAgICAgICBIb3dldmVyLCB0
aGlzIGZpbHRlcmluZyBpcyBub3QgYXBwbGllZCB0byBDaGVja0lkZW50IHdoZW4gcHJvcGFnYXRp
bmcgYSBjb25zdGFudCB2YWx1ZSBpbgorICAgICAgICB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFz
ZS4gQXMgYSByZXN1bHQsIGl0IGlzIG5vdCBndWFyYW50ZWVlZCB0aGF0IGEgY29uc3RhbnQgdmFs
dWUKKyAgICAgICAgcHJvcGFnYXRlZCBpbiBjb25zdGFudCBmb2xkaW5nIGlzIFN5bWJvbCBvciBT
dHJpbmdJZGVudC4KKworICAgICAgICBBSSBndWFyYW50ZWVzIHRoaXMgYnkgZXhlY3V0ZUVkZ2Vz
LiBTbyBlc3NlbnRpYWxseSBubyBjaGFuZ2UgaXMgcmVxdWlyZWQgZm9yIEFJLgorICAgICAgICBC
dXQgdG8ga2VlcCB0aGUgQUkgY29kZSBpbiBzeW5jIHdpdGggdGhlIGNvbnN0YW50IGZvbGRpbmcg
cGhhc2UsIHdlIGFsc28gY2hhbmdlIHRoZSBjb2RlCisgICAgICAgIGluIEFJIHRvIHRoZSBzYW1l
IGluIHRoZSBjb25zdGFudCBmb2xkaW5nIHBoYXNlLgorCisgICAgICAgICogZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRl
cnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBk
ZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0
YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRzKToKKwogMjAxNS0xMC0xMSAgWXVzdWtlIFN1
enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBFUzYgY2xhc3NlczogV2hl
biBhIGNsYXNzIGV4dGVuZHMgQiwgc3VwZXIoKSBpbnZva2VzIEIucHJvdG90eXBlLmNvbnN0cnVj
dG9yKCkgaW5zdGVhZCBvZiBCKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCA2OTE4M2Y3OWQxM2Vl
MDAyNDk1ZmVmODA4YTg4MTkwZjc5ODFkMWEzLi5lYTI0Y2RjNzI4YTA2MWQzYjE5MTA0MDNlODBl
YjI3YTZkMTE5YzFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC0yMjgwLDI1ICsyMjgwLDMyIEBA
CiAgICAgY2FzZSBDaGVja0lkZW50OiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0g
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQg
PSBub2RlLT51aWRPcGVyYW5kKCk7Ci0gICAgICAgIEFTU0VSVCh1aWQtPmlzU3ltYm9sKCkgPyAh
KHZhbHVlLm1fdHlwZSAmIH5TcGVjU3ltYm9sKSA6ICEodmFsdWUubV90eXBlICYgflNwZWNTdHJp
bmdJZGVudCkpOyAvLyBFZGdlIGZpbHRlcmluZyBzaG91bGQgaGF2ZSBhbHJlYWR5IGVuc3VyZWQg
dGhpcy4KKyAgICAgICAgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqIGNvbnN0YW50VWlkID0gbnVs
bHB0cjsKIAogICAgICAgICBKU1ZhbHVlIGNoaWxkQ29uc3RhbnQgPSB2YWx1ZS52YWx1ZSgpOwog
ICAgICAgICBpZiAoY2hpbGRDb25zdGFudCkgewogICAgICAgICAgICAgaWYgKHVpZC0+aXNTeW1i
b2woKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChjaGlsZENvbnN0YW50LmlzU3ltYm9sKCkp
OwotICAgICAgICAgICAgICAgIGlmIChhc1N5bWJvbChjaGlsZENvbnN0YW50KS0+cHJpdmF0ZU5h
bWUoKS51aWQoKSA9PSB1aWQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3Vu
ZENvbnN0YW50cyh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChjaGlsZENvbnN0YW50LmlzU3ltYm9sKCkpCisg
ICAgICAgICAgICAgICAgICAgIGNvbnN0YW50VWlkID0gYXNTeW1ib2woY2hpbGRDb25zdGFudCkt
PnByaXZhdGVOYW1lKCkudWlkKCk7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIEFTU0VSVChjaGlsZENvbnN0YW50LmlzU3RyaW5nKCkpOwotICAgICAgICAgICAgICAgIGlm
IChhc1N0cmluZyhjaGlsZENvbnN0YW50KS0+dHJ5R2V0VmFsdWVJbXBsKCkgPT0gdWlkKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuc2V0Rm91bmRDb25zdGFudHModHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChjaGlsZENvbnN0YW50
LmlzU3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnN0IGF1dG8qIGltcGwg
PSBhc1N0cmluZyhjaGlsZENvbnN0YW50KS0+dHJ5R2V0VmFsdWVJbXBsKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIEVkZ2UgZmlsdGVyaW5nIHJlcXVpcmVzIHRoYXQgYSB2YWx1ZSBo
ZXJlIHNob3VsZCBiZSBTdHJpbmdJZGVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhv
d2V2ZXIsIGEgY29uc3RhbnQgdmFsdWUgcHJvcGFnYXRlZCBpbiBERkcgaXMgbm90IGZpbHRlcmVk
LgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gU28gaGVyZSwgd2UgY2hlY2sgdGhlIHByb3Bh
Z2F0ZWQgdmFsdWUgaXMgYWN0dWFsbHkgYW4gYXRvbWljIHN0cmluZy4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEFuZCBpZiBpdCdzIG5vdCwgd2UganVzdCBpZ25vcmUuCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoaW1wbC0+aXNBdG9taWMoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdGFudFVpZCA9IHN0YXRpY19jYXN0PGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBs
Kj4oaW1wbCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBpZiAodWlkID09IGNvbnN0YW50VWlkKSB7
CisgICAgICAgICAgICBtX3N0YXRlLnNldEZvdW5kQ29uc3RhbnRzKHRydWUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBmaWx0ZXIodmFsdWUsIHVpZC0+aXNTeW1i
b2woKSA/IFNwZWNTeW1ib2wgOiBTcGVjU3RyaW5nSWRlbnQpOwogICAgICAgICBicmVhazsKICAg
ICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9s
ZGluZ1BoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwCmluZGV4IDVjODM2MDM5MmY2MThiNmUwMTRmM2VkMDU3ZTg0YWYxMDVlNTZl
MWMuLjNhNTZlMzViNzMyMjQyYjQxMzE3NDQzNjE0NzIxZDY5MDY5ZWRmYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
CkBAIC0yNDcsMTkgKzI0NywyMiBAQCBjbGFzcyBDb25zdGFudEZvbGRpbmdQaGFzZSA6IHB1Ymxp
YyBQaGFzZSB7CiAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tJZGVudDogewogICAgICAgICAgICAg
ICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQgPSBub2RlLT51aWRPcGVyYW5kKCk7Ci0gICAgICAg
ICAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0YW50ID0gbV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBs
KiBjb25zdGFudFVpZCA9IG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGNoaWxk
Q29uc3RhbnQgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLnZhbHVlKCk7CiAgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkQ29uc3RhbnQpIHsKICAgICAgICAgICAgICAgICAgICAgaWYg
KHVpZC0+aXNTeW1ib2woKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkQ29u
c3RhbnQuaXNTeW1ib2woKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudFVp
ZCA9IGFzU3ltYm9sKGNoaWxkQ29uc3RhbnQpLT5wcml2YXRlTmFtZSgpLnVpZCgpOwogICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
Q29uc3RhbnQuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNp
bmNlIHdlIGFscmVhZHkgZmlsdGVyZWQgdGhlIHZhbHVlIHdpdGggU3RyaW5nSWRlbnRVc2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGhlbGQgaW1wbCBpcyBhbHdheXMgYXRv
bWljLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25zdCBhdXRvKiBpbXBsID0g
YXNTdHJpbmcoY2hpbGRDb25zdGFudCktPnRyeUdldFZhbHVlSW1wbCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpbXBsLT5pc0F0b21pYygpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRVaWQgPSBzdGF0aWNfY2FzdDxjb25zdCBV
bmlxdWVkU3RyaW5nSW1wbCo+KGltcGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBFZGdlIGZpbHRlcmluZyByZXF1aXJlcyB0aGF0IGEgdmFsdWUgaGVyZSBzaG91bGQgYmUg
U3RyaW5nSWRlbnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhvd2V2ZXIs
IGEgY29uc3RhbnQgdmFsdWUgcHJvcGFnYXRlZCBpbiBERkcgaXMgbm90IGZpbHRlcmVkLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTbyBoZXJlLCB3ZSBjaGVjayB0aGUgcHJv
cGFnYXRlZCB2YWx1ZSBpcyBhY3R1YWxseSBhbiBhdG9taWMgc3RyaW5nLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBBbmQgaWYgaXQncyBub3QsIHdlIGp1c3QgaWdub3JlLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1wbC0+aXNBdG9taWMoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50VWlkID0gc3RhdGljX2Nh
c3Q8Y29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqPihpbXBsKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262987</attachid>
            <date>2015-10-13 07:59:33 -0700</date>
            <delta_ts>2015-10-13 09:03:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149965-20151013235857.patch</filename>
            <type>text/plain</type>
            <size>3181</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwODU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
MTU2OWY2NzlmNWE1NzZhOTU0OTlkM2QwYjA2ZGM3ZDI2NGE0ZmZhLi5mMDVjYjI4MDEzZGIyNmQx
YTcyYjNkMjg3MWY5ZTViZjI4ZTFjZTc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxOCBAQAorMjAxNS0xMC0xMyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBSRUdSRVNTSU9OOiBBU1NFUlQgKGltcGwtPmlzQXRvbWljKCkpIEAg
ZmFjZWJvb2suY29tCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDk5NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBFZGdlIGZpbHRlcmluZyBmb3IgQ2hlY2tJZGVudCBlbnN1cmVzIHRoYXQgYSBnaXZlbiB2
YWx1ZSBpcyBlaXRoZXIgU3ltYm9sIG9yIFN0cmluZ0lkZW50LgorICAgICAgICBIb3dldmVyLCB0
aGlzIGZpbHRlcmluZyBpcyBub3QgYXBwbGllZCB0byBDaGVja0lkZW50IHdoZW4gcHJvcGFnYXRp
bmcgYSBjb25zdGFudCB2YWx1ZSBpbgorICAgICAgICB0aGUgY29uc3RhbnQgZm9sZGluZyBwaGFz
ZS4gQXMgYSByZXN1bHQsIGl0IGlzIG5vdCBndWFyYW50ZWVlZCB0aGF0IGEgY29uc3RhbnQgdmFs
dWUKKyAgICAgICAgcHJvcGFnYXRlZCBpbiBjb25zdGFudCBmb2xkaW5nIGlzIFN5bWJvbCBvciBT
dHJpbmdJZGVudC4KKworICAgICAgICAqIGRmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6Q29uc3RhbnRGb2xkaW5nUGhhc2U6OmZvbGRDb25zdGFudHMp
OgorCiAyMDE1LTEwLTExICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgog
CiAgICAgICAgIEVTNiBjbGFzc2VzOiBXaGVuIGEgY2xhc3MgZXh0ZW5kcyBCLCBzdXBlcigpIGlu
dm9rZXMgQi5wcm90b3R5cGUuY29uc3RydWN0b3IoKSBpbnN0ZWFkIG9mIEIoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApp
bmRleCA1YzgzNjAzOTJmNjE4YjZlMDE0ZjNlZDA1N2U4NGFmMTA1ZTU2ZTFjLi4zYTU2ZTM1Yjcz
MjI0MmI0MTMxNzQ0MzYxNDcyMWQ2OTA2OWVkZmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcApAQCAtMjQ3LDE5ICsy
NDcsMjIgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMgUGhhc2UgewogCiAg
ICAgICAgICAgICBjYXNlIENoZWNrSWRlbnQ6IHsKICAgICAgICAgICAgICAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkID0gbm9kZS0+dWlkT3BlcmFuZCgpOwotICAgICAgICAgICAgICAgIEpTVmFs
dWUgY2hpbGRDb25zdGFudCA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUo
KTsKICAgICAgICAgICAgICAgICBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogY29uc3RhbnRVaWQg
PSBudWxscHRyOworCisgICAgICAgICAgICAgICAgSlNWYWx1ZSBjaGlsZENvbnN0YW50ID0gbV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwogICAgICAgICAgICAgICAgIGlm
IChjaGlsZENvbnN0YW50KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1aWQtPmlzU3ltYm9s
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZENvbnN0YW50LmlzU3ltYm9s
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RhbnRVaWQgPSBhc1N5bWJvbChj
aGlsZENvbnN0YW50KS0+cHJpdmF0ZU5hbWUoKS51aWQoKTsKICAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZENvbnN0YW50LmlzU3Ry
aW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBhbHJlYWR5
IGZpbHRlcmVkIHRoZSB2YWx1ZSB3aXRoIFN0cmluZ0lkZW50VXNlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBoZWxkIGltcGwgaXMgYWx3YXlzIGF0b21pYy4KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoY29uc3QgYXV0byogaW1wbCA9IGFzU3RyaW5nKGNoaWxk
Q29uc3RhbnQpLT50cnlHZXRWYWx1ZUltcGwoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoaW1wbC0+aXNBdG9taWMoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0YW50VWlkID0gc3RhdGljX2Nhc3Q8Y29uc3QgVW5pcXVlZFN0cmluZ0lt
cGwqPihpbXBsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRWRnZSBmaWx0
ZXJpbmcgcmVxdWlyZXMgdGhhdCBhIHZhbHVlIGhlcmUgc2hvdWxkIGJlIFN0cmluZ0lkZW50Lgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBIb3dldmVyLCBhIGNvbnN0YW50IHZh
bHVlIHByb3BhZ2F0ZWQgaW4gREZHIGlzIG5vdCBmaWx0ZXJlZC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gU28gaGVyZSwgd2UgY2hlY2sgdGhlIHByb3BhZ2F0ZWQgdmFsdWUg
aXMgYWN0dWFsbHkgYW4gYXRvbWljIHN0cmluZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gQW5kIGlmIGl0J3Mgbm90LCB3ZSBqdXN0IGlnbm9yZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGltcGwtPmlzQXRvbWljKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdGFudFVpZCA9IHN0YXRpY19jYXN0PGNvbnN0IFVuaXF1
ZWRTdHJpbmdJbXBsKj4oaW1wbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>