<?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>99647</bug_id>
          
          <creation_ts>2012-10-17 15:39:04 -0700</creation_ts>
          <short_desc>HTMLMediaPlayer should free m_player when src is set/changed</short_desc>
          <delta_ts>2013-04-08 11:28:10 -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>528+ (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>
          <dependson>101010</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ami Fischman">fischman</reporter>
          <assigned_to name="Ami Fischman">fischman</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>fischman</cc>
    
    <cc>isherman</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>744713</commentid>
    <comment_count>0</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-10-17 15:39:04 -0700</bug_when>
    <thetext>HTMLMediaPlayer should free m_player on error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744715</commentid>
    <comment_count>1</comment_count>
      <attachid>169278</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-10-17 15:41:24 -0700</bug_when>
    <thetext>Created attachment 169278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744727</commentid>
    <comment_count>2</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-10-17 15:52:28 -0700</bug_when>
    <thetext>FTR, this issue was raised in http://crbug.com/154546
(because chrome enjoys spawning several threads per MediaPlayer, making delaying their teardown an expensive proposition).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744849</commentid>
    <comment_count>3</comment_count>
      <attachid>169278</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-17 17:42:02 -0700</bug_when>
    <thetext>Comment on attachment 169278
Patch

Attachment 169278 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14395756

New failing tests:
compositing/geometry/limit-layer-bounds-transformed.html
platform/chromium/virtual/softwarecompositing/geometry/limit-layer-bounds-clipping-ancestor.html
platform/chromium/virtual/softwarecompositing/geometry/limit-layer-bounds-positioned.html
compositing/geometry/limit-layer-bounds-clipping-ancestor.html
compositing/geometry/limit-layer-bounds-fixed-positioned.html
compositing/geometry/limit-layer-bounds-positioned.html
platform/chromium/virtual/softwarecompositing/geometry/limit-layer-bounds-fixed-positioned.html
compositing/geometry/limit-layer-bounds-transformed-overflow.html
platform/chromium/virtual/softwarecompositing/geometry/limit-layer-bounds-overflow-root.html
compositing/geometry/limit-layer-bounds-positioned-transition.html
platform/chromium/virtual/softwarecompositing/geometry/limit-layer-bounds-transformed.html
platform/chromium/virtual/softwarecompositing/layer-creation/scroll-partial-update.html
compositing/geometry/limit-layer-bounds-overflow-root.html
platform/chromium/virtual/softwarecompositing/geometry/limit-layer-bounds-positioned-transition.html
platform/chromium/virtual/softwarecompositing/geometry/limit-layer-bounds-transformed-overflow.html
compositing/layer-creation/scroll-partial-update.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744850</commentid>
    <comment_count>4</comment_count>
      <attachid>169278</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-10-17 17:43:15 -0700</bug_when>
    <thetext>Comment on attachment 169278
Patch

(bot failures are clearly unrelated)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744865</commentid>
    <comment_count>5</comment_count>
      <attachid>169278</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-10-17 17:53:57 -0700</bug_when>
    <thetext>Comment on attachment 169278
Patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:4324
&gt; +    if (event-&gt;type() == eventNames().errorEvent)
&gt; +        m_player = nullptr;

An error event doesn&apos;t mean that the media player doesn&apos;t have any valid data, eg. losing the connection to the server will fire an error event with some media engines. This will change will *always* delete the media player and lose all state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744904</commentid>
    <comment_count>6</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-10-17 19:22:17 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 169278 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169278&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:4324
&gt; &gt; +    if (event-&gt;type() == eventNames().errorEvent)
&gt; &gt; +        m_player = nullptr;
&gt; 
&gt; An error event doesn&apos;t mean that the media player doesn&apos;t have any valid data, eg. losing the connection to the server will fire an error event with some media engines. This will change will *always* delete the media player and lose all state.

I see.  Do you have any suggestions for where the right place to put this is?
(the goal, other than &quot;real&quot; error handling, is to be able to know that setting mediaElement.src=&quot;&quot; in JS means resources held by any previously-playing engine underlying mediaElement have been released).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744914</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-10-17 19:36:20 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; 
&gt; I see.  Do you have any suggestions for where the right place to put this is?
&gt; (the goal, other than &quot;real&quot; error handling, is to be able to know that setting mediaElement.src=&quot;&quot; in JS means resources held by any previously-playing engine underlying mediaElement have been released).

Only clearing it when m_readyState &lt; HAVE_METADATA should be safe, except that when ENABLE(PLUGIN_PROXY_FOR_VIDEO) is defined you should *never* delete it.

You might also try clearing it in HTMLMediaElement::parseAttribute when when the src attribute is set to &quot;&quot;, but please check the spec first to see if it has anything specific to say about what to do in that situation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745002</commentid>
    <comment_count>8</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-10-17 23:12:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Only clearing it when m_readyState &lt; HAVE_METADATA should be safe, except that when ENABLE(PLUGIN_PROXY_FOR_VIDEO) is defined you should *never* delete it.

That doesn&apos;t work for me, because in the case I&apos;m concerned with m_readyState==4.
Reading the spec, ISTM setting src invokes the resource load algorithm, which among other things resets readyState to HAVE_NOTHING, dismisses pending callbacks and algorithms, and generally starts from a clean slate.  What am I missing that says already-downloaded state should be preserved?

In fact, looking at the code a bit closer, it seems prepareForLoad() already does all this cleanup, but it is being stymied by the second clause in this test:
    if ((loadType &amp; MediaResource) &amp;&amp; !(m_pendingLoadFlags &amp; MediaResource)) {
in scheduleLoad().  Commenting out the !(m_pendingLoadFlags &amp; MediaResource) part makes the problem go away (even without the explicit clearing of m_player).  
Do you know what that part is doing?

&gt; You might also try clearing it in HTMLMediaElement::parseAttribute when when the src attribute is set to &quot;&quot;, but please check the spec first to see if it has anything specific to say about what to do in that situation.

It doesn&apos;t say anything about the empty string specifically, but this triggering on parseAttribute seems strange, considering the prepareForLoad() business already seems to implement the verbiage I want to rely on from the spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745245</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-10-18 07:38:01 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Only clearing it when m_readyState &lt; HAVE_METADATA should be safe, except that when ENABLE(PLUGIN_PROXY_FOR_VIDEO) is defined you should *never* delete it.
&gt; 
&gt; That doesn&apos;t work for me, because in the case I&apos;m concerned with m_readyState==4.

What causes the error event to be fired when readyState is HAVE_ENOUGH_DATA?

&gt; Reading the spec, ISTM setting src invokes the resource load algorithm, which among other things resets readyState to HAVE_NOTHING, dismisses pending callbacks and algorithms, and generally starts from a clean slate.  What am I missing that says already-downloaded state should be preserved?
&gt; 

I don&apos;t know that the spec says already downloaded state should be preserved, but it seems common sense to me. For example, I think a user would be very surprised if all media data was purged because the connection to the server was lost after downloading most of a file.

&gt; In fact, looking at the code a bit closer, it seems prepareForLoad() already does all this cleanup, but it is being stymied by the second clause in this test:
&gt;     if ((loadType &amp; MediaResource) &amp;&amp; !(m_pendingLoadFlags &amp; MediaResource)) {
&gt; in scheduleLoad().  Commenting out the !(m_pendingLoadFlags &amp; MediaResource) part makes the problem go away (even without the explicit clearing of m_player).  
&gt; Do you know what that part is doing?
&gt; 
  scheduleLoad is called to set up loading of the media resource and text track(s) so m_pendingLoadFlags keeps track of which load has already been scheduled so we don&apos;t, e.g. set up to load the media resource and then do it again when we see that there are text tracks to load. It is also necessary to allow us to iterate through candidate &lt;source&gt; elements without resetting the state machine each time.

  m_pendingLoadFlags is cleared in loadTimerFired, so it *should* allow prepareForLoad to be called again when src changes. What prevents it? 

&gt; &gt; You might also try clearing it in HTMLMediaElement::parseAttribute when when the src attribute is set to &quot;&quot;, but please check the spec first to see if it has anything specific to say about what to do in that situation.
&gt; 
&gt; It doesn&apos;t say anything about the empty string specifically, but this triggering on parseAttribute seems strange, considering the prepareForLoad() business already seems to implement the verbiage I want to rely on from the spec.

Looking at the code I see that parseAttribute already calls prepareForLoad when src is set to &quot;&quot; so my suggestion should be unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745400</commentid>
    <comment_count>10</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-10-18 11:13:28 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (In reply to comment #7)
&gt; &gt; &gt; Only clearing it when m_readyState &lt; HAVE_METADATA should be safe, except that when ENABLE(PLUGIN_PROXY_FOR_VIDEO) is defined you should *never* delete it.
&gt; &gt; That doesn&apos;t work for me, because in the case I&apos;m concerned with m_readyState==4.
&gt; What causes the error event to be fired when readyState is HAVE_ENOUGH_DATA?

I&apos;m not sure what you&apos;re asking, but you can easily repro by dropping this in ManualTests/:
&lt;html&gt;
&lt;head&gt;
&lt;script&gt;
var v;
function handleCanplay() {
  v.src = &quot;&quot;;
}

function go() {
  v = document.createElement(&apos;video&apos;);
  v.addEventListener(&apos;canplay&apos;, handleCanplay);
  v.controls = &quot;controls&quot;;
  v.src = &quot;../LayoutTests/media/content/test-25fps.mp4&quot;;
  v.load();
  document.body.appendChild(v);
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body onload=&quot;go()&quot;&gt;
&lt;/body&gt;
&lt;/html&gt;

&gt; &gt; In fact, looking at the code a bit closer, it seems prepareForLoad() already does all this cleanup, but it is being stymied by the second clause in this test:
&gt; &gt;     if ((loadType &amp; MediaResource) &amp;&amp; !(m_pendingLoadFlags &amp; MediaResource)) {
&gt; &gt; in scheduleLoad().  Commenting out the !(m_pendingLoadFlags &amp; MediaResource) part makes the problem go away (even without the explicit clearing of m_player).  
&gt; &gt; Do you know what that part is doing?
&gt; &gt; 
&gt;   scheduleLoad is called to set up loading of the media resource and text track(s) so m_pendingLoadFlags keeps track of which load has already been scheduled so we don&apos;t, e.g. set up to load the media resource and then do it again when we see that there are text tracks to load. It is also necessary to allow us to iterate through candidate &lt;source&gt; elements without resetting the state machine each time.

Hmm.  Sounds like m_pLF needs to be cleared earlier, but I&apos;m not sure where.

&gt;   m_pendingLoadFlags is cleared in loadTimerFired, so it *should* allow prepareForLoad to be called again when src changes. What prevents it? 

I&apos;m not sure what the intended timing is, but the above test case emits this sequence of logs (with a bit of extra LOGging added, but no logic changes from ToT):

HTMLMediaElement::scheduleLoad
HTMLMediaElement::prepareForLoad
AMI: m_player being written; currently: (nil)
HTMLMediaElement::setShouldDelayLoadEvent(true)
HTMLMediaElement::prepareForLoad
AMI: m_player being written; currently: 0x7f206dbbea20
HTMLMediaElement::setReadyState(0) - current state is 0,
HTMLMediaElement::setReadyState(1) - current state is 0,
HTMLMediaElement::setReadyState(4) - current state is 1,
HTMLMediaElement::setShouldDelayLoadEvent(false)
HTMLMediaElement::scheduleLoad
AMI: HTMLMediaElement::loadTimerFired()
HTMLMediaElement::setShouldDelayLoadEvent(true)
HTMLMediaElement::setShouldDelayLoadEvent(false)
AMI: loadTimerFired clearing m_pendingLoadFlags, which was: 1

I think you&apos;re saying you expect loadTimerFired to be fired before the second scheduleLoad(), so m_pLF should be 0 by the time that second scheduleLoad fires?

&gt; &gt; &gt; You might also try clearing it in HTMLMediaElement::parseAttribute when when the src attribute is set to &quot;&quot;, but please check the spec first to see if it has anything specific to say about what to do in that situation.
&gt; &gt; It doesn&apos;t say anything about the empty string specifically, but this triggering on parseAttribute seems strange, considering the prepareForLoad() business already seems to implement the verbiage I want to rely on from the spec.
&gt; Looking at the code I see that parseAttribute already calls prepareForLoad when src is set to &quot;&quot; so my suggestion should be unnecessary.

I&apos;m not seeing that; what I see is selectMediaResource() handling src=&quot;&quot; specially, but not how that leads to prepareForLoad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756647</commentid>
    <comment_count>11</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-11-01 14:56:50 -0700</bug_when>
    <thetext>Eric,
I went back to the spec and ISTM it says any set/change of the src attribute should drop all state from any previously-playing source:

4.8.10.2 says &quot;If a src attribute of a media element is set or changed, the user agent must invoke the media element&apos;s media element load algorithm&quot;
4.8.10.5 (step 8) says &quot;Playback of any previously playing media resource for this element stops.&quot;  Coupled with step 4 of the load algo I read this to mean discard any buffered data from a previous value of src.

Given that, WDYT of simply adding dropping the player when src is set in parseAttribute?  Uploading a patch that does this for discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756649</commentid>
    <comment_count>12</comment_count>
      <attachid>171940</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-11-01 14:59:12 -0700</bug_when>
    <thetext>Created attachment 171940
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756663</commentid>
    <comment_count>13</comment_count>
      <attachid>171940</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-01 15:11:03 -0700</bug_when>
    <thetext>Comment on attachment 171940
Patch

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

Thanks for keeping at this!

&gt; Source/WebCore/html/HTMLMediaElement.cpp:374
&gt; +            m_loadTimer.stop();
&gt; +            m_progressEventTimer.stop();
&gt; +            m_playbackProgressTimer.stop();
&gt; +            m_pendingLoadFlags &amp;= ~MediaResource;
&gt; +            m_loadState = WaitingForSource;
&gt; +#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
&gt; +            m_player.clear();
&gt; +#endif

We do all of these in HTMLMediaElement::userCancelledLoad, although m_pendingLoadFlags is set to 0. It would be nice to have both use a shared function that took a flags mask.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756676</commentid>
    <comment_count>14</comment_count>
      <attachid>171940</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-11-01 15:20:04 -0700</bug_when>
    <thetext>Comment on attachment 171940
Patch

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

&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:374
&gt;&gt; +#endif
&gt; 
&gt; We do all of these in HTMLMediaElement::userCancelledLoad, although m_pendingLoadFlags is set to 0. It would be nice to have both use a shared function that took a flags mask.

Yeah, I thought about it, but wasn&apos;t sure about it.
clearMediaLoadingState() ?
Given that I only need to clear MediaResource from m_pLF (setting it to 0 here is wrong) and given uCL is already using a helper for stopping 2 of the timers (but not the third) I opted for explicitness and to leave unification to a pass that understands how these things are supposed to be related.

If that&apos;s ok w/ you, please CQ+.
If you want me to make a unification pass as part of this CL, let me know and I&apos;ll take a crack at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756688</commentid>
    <comment_count>15</comment_count>
      <attachid>171940</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-01 15:39:43 -0700</bug_when>
    <thetext>Comment on attachment 171940
Patch

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

&gt;&gt;&gt; Source/WebCore/html/HTMLMediaElement.cpp:374
&gt;&gt;&gt; +#endif
&gt;&gt; 
&gt;&gt; We do all of these in HTMLMediaElement::userCancelledLoad, although m_pendingLoadFlags is set to 0. It would be nice to have both use a shared function that took a flags mask.
&gt; 
&gt; Yeah, I thought about it, but wasn&apos;t sure about it.
&gt; clearMediaLoadingState() ?
&gt; Given that I only need to clear MediaResource from m_pLF (setting it to 0 here is wrong) and given uCL is already using a helper for stopping 2 of the timers (but not the third) I opted for explicitness and to leave unification to a pass that understands how these things are supposed to be related.
&gt; 
&gt; If that&apos;s ok w/ you, please CQ+.
&gt; If you want me to make a unification pass as part of this CL, let me know and I&apos;ll take a crack at it.

I think we might as well do it now, there is enough &quot;fix this later&quot; crud in HTMLMediaElement already :-)

Something like this should work:

void HTMLMediaElement::clearMediaPlayer(unsigned flags)
{
#if !ENABLE(PLUGIN_PROXY_FOR_VIDEO)
    m_player.clear();
#endif
    stopPeriodicTimers();
    m_loadTimer.stop();

    m_pendingLoadFlags &amp;= ~flags;
    m_loadState = WaitingForSource;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756694</commentid>
    <comment_count>16</comment_count>
      <attachid>171946</attachid>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-11-01 15:49:13 -0700</bug_when>
    <thetext>Created attachment 171946
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756696</commentid>
    <comment_count>17</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2012-11-01 15:49:55 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I think we might as well do it now, there is enough &quot;fix this later&quot; crud in HTMLMediaElement already :-)

Mmm :)

&gt; Something like this should work:
&gt; void HTMLMediaElement::clearMediaPlayer(unsigned flags)

It requires a -1 trick, but done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756697</commentid>
    <comment_count>18</comment_count>
      <attachid>171946</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-01 15:56:24 -0700</bug_when>
    <thetext>Comment on attachment 171946
Patch

Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756799</commentid>
    <comment_count>19</comment_count>
      <attachid>171946</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-11-01 18:37:56 -0700</bug_when>
    <thetext>Comment on attachment 171946
Patch

Attachment 171946 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14687664</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756800</commentid>
    <comment_count>20</comment_count>
      <attachid>171946</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-01 18:38:51 -0700</bug_when>
    <thetext>Comment on attachment 171946
Patch

Clearing flags on attachment: 171946

Committed r133252: &lt;http://trac.webkit.org/changeset/133252&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756801</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-01 18:38:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>756841</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-01 19:38:07 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 101010</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870968</commentid>
    <comment_count>23</comment_count>
    <who name="Ami Fischman">fischman</who>
    <bug_when>2013-04-08 11:28:10 -0700</bug_when>
    <thetext>(the threatened rollout for which this bug was reopened was replaced with a forward-fix, so this was never reverted)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169278</attachid>
            <date>2012-10-17 15:41:24 -0700</date>
            <delta_ts>2012-11-01 14:59:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99647-20121017154010.patch</filename>
            <type>text/plain</type>
            <size>3583</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjhkNmY1MjFlZTgzODI3
MzdmZWRlYjk4YTRmNWYxZmRiZDhhYzBmOS4uODNkMTE1MjBjY2QxYWY3M2VkZGM4ZjRmNGUzNDQx
NjFhYWQwM2I0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTEwLTE3ICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSFRNTE1lZGlhUGxh
eWVyIHNob3VsZCBmcmVlIG1fcGxheWVyIG9uIGVycm9yLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOZXcgTWFudWFsVGVzdCBhZGRlZDsgbWFudWFsIHNp
bmNlIGxlYWtpbmcgbWVkaWEgcGxheWVycyBkb2Vzbid0IGhhdmUgbGF5b3V0VGVzdENvbnRyb2xs
ZXItdmlzaWJsZSBlZmZlY3RzLgorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmRpc3BhdGNoRXZlbnQpOgor
CiAyMDEyLTEwLTE3ICBQYXRyaWNrIEdhbnN0ZXJlciAgPHBhcm9nYUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIEJ1aWxkIGZpeCBmb3IgV2luQ0UgYWZ0ZXIgcjEzMTM2NS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGViZWVlMWI0MDU4MGQyYmVlODc2NTQ0Y2My
OGE5YjU4ZTUxZjY1ODkuLmIzODQ0ZTE5NDIyZDk2ZmMyZTBjMTdlMjAzZTJhOWU4MzJiYWUxYWUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNDMyMCw2ICs0
MzIwLDkgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50KQogICAgIGlmIChpc0NhblBsYXlFdmVudCkKICAgICAgICAgbV9kaXNwYXRj
aGluZ0NhblBsYXlFdmVudCA9IHRydWU7CiAKKyAgICBpZiAoZXZlbnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkuZXJyb3JFdmVudCkKKyAgICAgICAgbV9wbGF5ZXIgPSBudWxscHRyOworCiAgICAg
ZGlzcGF0Y2hSZXN1bHQgPSBIVE1MRWxlbWVudDo6ZGlzcGF0Y2hFdmVudChldmVudCk7CiAKICAg
ICBpZiAoaXNDYW5QbGF5RXZlbnQpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cK
aW5kZXggODM4NjYwZjYzZTVmYTkyODI4ODE5MDE2MDJlYTY3M2YyMDhkMGQ3NS4uYjA4YTcyNTM2
MzU2YzZmYWY0YWM3ZWFjNmQzMTM3ODY0MmEzNWNmNyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisr
KyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTEwLTE3ICBBbWkgRmlzY2htYW4g
IDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSFRNTE1lZGlhUGxheWVyIHNob3Vs
ZCBmcmVlIG1fcGxheWVyIG9uIGVycm9yLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9OTk2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIE1hbnVhbFRlc3RzL21lZGlhLXBsYXllcnMtYXJlLWRyb3BwZWQt
b24tZXJyb3IuaHRtbDogQWRkZWQuCisgICAgICAgICAgICBWYXJpb3VzIHNjZW5hcmlvcyBhcmUg
dGVzdGVkIHRvIG1ha2Ugc3VyZSBwbGF5ZXJzIGFyZW4ndAorICAgICAgICAgICAgbGVha2VkIGlu
IGRpZmZlcmVudCB3YXlzIGZvciBlYWNoIG9mIHRoZW0uCisKIDIwMTItMTAtMTYgIFBhYmxvIEZs
b3VyZXQgIDxwYWJsb2ZAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFByZS1wcm9jZXNzIENTU0dy
YW1tYXIueSBiZWZvcmUgcnVubmluZyB0aHJvdWdoIGJpc29uLgpkaWZmIC0tZ2l0IGEvTWFudWFs
VGVzdHMvbWVkaWEtcGxheWVycy1hcmUtZHJvcHBlZC1vbi1lcnJvci5odG1sIGIvTWFudWFsVGVz
dHMvbWVkaWEtcGxheWVycy1hcmUtZHJvcHBlZC1vbi1lcnJvci5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA1
NTUxZDE1OTJiOWQ2ZjAxNjhjMDU1NTFhY2Q0MjM5MjExYTUyMDkKLS0tIC9kZXYvbnVsbAorKysg
Yi9NYW51YWxUZXN0cy9tZWRpYS1wbGF5ZXJzLWFyZS1kcm9wcGVkLW9uLWVycm9yLmh0bWwKQEAg
LTAsMCArMSw0MCBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQ+Cit2YXIgdXJscyA9IFsKKyAg
ICAiZmlsZTovLy9kb2VzIG5vdCBleGlzdCBvaCBub2VzL3Rlc3QubXA0IiwKKyAgICAiLi4vTGF5
b3V0VGVzdHMvbWVkaWEvY29udGVudC90ZXN0LTI1ZnBzLm1wNCIKK107Cit2YXIga2lja29mZkZ1
bmN0aW9ucyA9IFsKKyAgICAibG9hZCIsCisgICAgInBsYXkiCitdOworCit2YXIgbWVkaWFFbGVt
ZW50SG9sZGVyID0gW107CisKK2Z1bmN0aW9uIHJlbGVhc2VBbmRBZGRNZWRpYUVsZW1lbnRzKCkg
eworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFbGVtZW50SG9sZGVyLmxlbmd0aDsgKytp
KQorICAgICAgICBtZWRpYUVsZW1lbnRIb2xkZXJbaV0uc3JjID0gIiI7CisgICAgbWVkaWFFbGVt
ZW50SG9sZGVyID0gW107CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7ICsraSkgeworICAg
ICAgICBmb3IgKHZhciB1cmwgaW4gdXJscykgeworICAgICAgICAgICAgZm9yICh2YXIga2lja29m
ZkZ1bmN0aW9uIGluIGtpY2tvZmZGdW5jdGlvbnMpIHsKKyAgICAgICAgICAgICAgICB2YXIgYSA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7CisgICAgICAgICAgICAgICAgYS5jb250
cm9scyA9ICJjb250cm9scyI7CisgICAgICAgICAgICAgICAgYS5zcmMgPSB1cmxzW3VybF07Cisg
ICAgICAgICAgICAgICAgZXZhbCgiYS4iICsga2lja29mZkZ1bmN0aW9uc1traWNrb2ZmRnVuY3Rp
b25dICsgIigpOyIpOworICAgICAgICAgICAgICAgIG1lZGlhRWxlbWVudEhvbGRlci5wdXNoKGEp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+
Cis8Ym9keSBvbmxvYWQ9InNldEludGVydmFsKCdyZWxlYXNlQW5kQWRkTWVkaWFFbGVtZW50cygp
JywgMTAwKSI+CisgICAgVGVzdCB0aGF0IG1lZGlhIHBsYXllcnMgYXJlbid0IGxlYWtlZCBvbiBl
cnJvci4KKyAgICBMb2FkIHRoaXMgcGFnZSBhbmQgdmVyaWZ5IHRoZSBudW1iZXIgb2YgdGhyZWFk
cyB1c2VkIGJ5IHRoZSBicm93c2VyIGRvZXNuJ3QKKyAgICBzZWVtIHVucmVhc29uYWJsZSAoZS5n
LiBjaHJvbWUgdXNlcyA0LTUgdGhyZWFkcyBwZXIgdmlkZW8gdGFnIHNvIHN0YXlpbmcKKyAgICB1
bmRlciA4MCB0aHJlYWRzIGlzICJzdWNjZXNzIikuCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171940</attachid>
            <date>2012-11-01 14:59:12 -0700</date>
            <delta_ts>2012-11-01 15:49:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99647-20121101145733.patch</filename>
            <type>text/plain</type>
            <size>4393</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWY5MjIwNjhjNjA2NWVh
MGVmOGRjOGYwZjk1Njg5OWZmZDg4YmY3Yy4uNWRlYmRmY2E5MmNhYzJkODVhZmVhYmFjMDNjNzEx
NmQ1MjdjNjM0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEyLTExLTAxICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSFRNTE1lZGlhUGxh
eWVyIHNob3VsZCBmcmVlIG1fcGxheWVyIHdoZW4gc3JjIGlzIHNldC9jaGFuZ2VkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTY0NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyBNYW51YWxUZXN0IGFk
ZGVkOyBtYW51YWwgc2luY2UgbGVha2luZyBtZWRpYSBwbGF5ZXJzIGRvZXNuJ3QgaGF2ZSBsYXlv
dXRUZXN0Q29udHJvbGxlci12aXNpYmxlIGVmZmVjdHMuCisKKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6cGFy
c2VBdHRyaWJ1dGUpOiBjbGVhciBtX3BsYXllciB3aGVuIHNyYyBpcyBzZXQvY2hhbmdlZC4KKwog
MjAxMi0xMS0wMSAgS2lob25nIEt3b24gIDxraWhvbmcua3dvbkBzYW1zdW5nLmNvbT4KIAogICAg
ICAgICBBZGQgRGV2aWNlQ29udHJvbGxlciBiYXNlLWNsYXNzIHRvIHJlbW92ZSBkdXBsaWNhdGlv
biBvZiBEZXZpY2VYWFhDb250cm9sZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwCmluZGV4IGU5Y2QxYWZmYzllNjYxZDk4ZTRlNjRkOTc2NDRhOWExMWJmYmQ0MTEuLjg3
ZjI3NDA5YzlkNWJmOWE4OWM5MDEzZjQyZTliM2FjNWZkYjY0ODUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtMzYzLDggKzM2MywxNyBAQCB2b2lkIEhUTUxN
ZWRpYUVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQog
ewogICAgIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IHNyY0F0dHIpIHsKICAgICAgICAgLy8gVHJp
Z2dlciBhIHJlbG9hZCwgYXMgbG9uZyBhcyB0aGUgJ3NyYycgYXR0cmlidXRlIGlzIHByZXNlbnQu
Ci0gICAgICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKHNyY0F0dHIpKQorICAgICAgICBpZiAoZmFz
dEhhc0F0dHJpYnV0ZShzcmNBdHRyKSkgeworICAgICAgICAgICAgbV9sb2FkVGltZXIuc3RvcCgp
OworICAgICAgICAgICAgbV9wcm9ncmVzc0V2ZW50VGltZXIuc3RvcCgpOworICAgICAgICAgICAg
bV9wbGF5YmFja1Byb2dyZXNzVGltZXIuc3RvcCgpOworICAgICAgICAgICAgbV9wZW5kaW5nTG9h
ZEZsYWdzICY9IH5NZWRpYVJlc291cmNlOworICAgICAgICAgICAgbV9sb2FkU3RhdGUgPSBXYWl0
aW5nRm9yU291cmNlOworI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURFTykKKyAgICAg
ICAgICAgIG1fcGxheWVyLmNsZWFyKCk7CisjZW5kaWYKICAgICAgICAgICAgIHNjaGVkdWxlTG9h
ZChNZWRpYVJlc291cmNlKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlLm5h
bWUoKSA9PSBjb250cm9sc0F0dHIpCiAgICAgICAgIGNvbmZpZ3VyZU1lZGlhQ29udHJvbHMoKTsK
ICNpZiBQTEFURk9STShNQUMpCkBAIC00MjYzLDcgKzQyNzIsNyBAQCB2b2lkIEhUTUxNZWRpYUVs
ZW1lbnQ6OmNyZWF0ZU1lZGlhUGxheWVyKCkKICAgICBpZiAobV9hdWRpb1NvdXJjZU5vZGUpCiAg
ICAgICAgIG1fYXVkaW9Tb3VyY2VOb2RlLT5sb2NrKCk7CiAjZW5kaWYKLSAgICAgICAgCisKICAg
ICBtX3BsYXllciA9IE1lZGlhUGxheWVyOjpjcmVhdGUodGhpcyk7CiAKICNpZiBFTkFCTEUoTUVE
SUFfU09VUkNFKQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDQ1ODNj
MjFmZjljMDY5YTFjMGMwZWRmNTExYzUxMTk0MGUzYzA3YTEuLjUyZTc0NTFmZjBkYTQ1YzU5YjZh
MGE1ODNhNmEwMTcxOTE2MTZmOTYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0xMS0wMSAgQW1pIEZpc2NobWFuICA8ZmlzY2htYW5A
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIEhUTUxNZWRpYVBsYXllciBzaG91bGQgZnJlZSBtX3Bs
YXllciB3aGVuIHNyYyBpcyBzZXQvY2hhbmdlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk2NDcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIE1hbnVhbFRlc3RzL21lZGlhLXBsYXllcnMtYXJlLWRyb3Bw
ZWQtb24tZXJyb3IuaHRtbDogQWRkZWQuCisgICAgICAgICAgICBWYXJpb3VzIHNjZW5hcmlvcyBh
cmUgdGVzdGVkIHRvIG1ha2Ugc3VyZSBwbGF5ZXJzIGFyZW4ndAorICAgICAgICAgICAgbGVha2Vk
IGluIGRpZmZlcmVudCB3YXlzIGZvciBlYWNoIG9mIHRoZW0uCisKIDIwMTItMTAtMzEgIFRoaWFn
byBNYXJjb3MgUC4gU2FudG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CiAKICAgICAgICAg
QWRkZWQgdmlld3BvcnQgYXQtcnVsZSB0byB0aGUgQ1NTIHBhcnNlciBhbmQgdG9rZW5pemVyCmRp
ZmYgLS1naXQgYS9NYW51YWxUZXN0cy9tZWRpYS1wbGF5ZXJzLWFyZS1kcm9wcGVkLW9uLWVycm9y
Lmh0bWwgYi9NYW51YWxUZXN0cy9tZWRpYS1wbGF5ZXJzLWFyZS1kcm9wcGVkLW9uLWVycm9yLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDM4OTY2ODE2N2ZhNTA0Yjc3NzUzN2M0MDczMjNkOGE2YjViMjNlMAot
LS0gL2Rldi9udWxsCisrKyBiL01hbnVhbFRlc3RzL21lZGlhLXBsYXllcnMtYXJlLWRyb3BwZWQt
b24tZXJyb3IuaHRtbApAQCAtMCwwICsxLDQwIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4K
K3ZhciB1cmxzID0gWworICAgICJmaWxlOi8vL2RvZXMgbm90IGV4aXN0IG9oIG5vZXMvdGVzdC5t
cDQiLAorICAgICIuLi9MYXlvdXRUZXN0cy9tZWRpYS9jb250ZW50L3Rlc3QtMjVmcHMubXA0Igor
XTsKK3ZhciBraWNrb2ZmRnVuY3Rpb25zID0gWworICAgICJsb2FkIiwKKyAgICAicGxheSIKK107
CisKK3ZhciBtZWRpYUVsZW1lbnRIb2xkZXIgPSBbXTsKKworZnVuY3Rpb24gcmVsZWFzZUFuZEFk
ZE1lZGlhRWxlbWVudHMoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUVsZW1lbnRI
b2xkZXIubGVuZ3RoOyArK2kpCisgICAgICAgIG1lZGlhRWxlbWVudEhvbGRlcltpXS5zcmMgPSAi
IjsKKyAgICBtZWRpYUVsZW1lbnRIb2xkZXIgPSBbXTsKKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgNTsgKytpKSB7CisgICAgICAgIGZvciAodmFyIHVybCBpbiB1cmxzKSB7CisgICAgICAgICAg
ICBmb3IgKHZhciBraWNrb2ZmRnVuY3Rpb24gaW4ga2lja29mZkZ1bmN0aW9ucykgeworICAgICAg
ICAgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTsKKyAgICAg
ICAgICAgICAgICBhLmNvbnRyb2xzID0gImNvbnRyb2xzIjsKKyAgICAgICAgICAgICAgICBhLnNy
YyA9IHVybHNbdXJsXTsKKyAgICAgICAgICAgICAgICBldmFsKCJhLiIgKyBraWNrb2ZmRnVuY3Rp
b25zW2tpY2tvZmZGdW5jdGlvbl0gKyAiKCk7Iik7CisgICAgICAgICAgICAgICAgbWVkaWFFbGVt
ZW50SG9sZGVyLnB1c2goYSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9Cis8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ic2V0SW50ZXJ2YWwoJ3JlbGVhc2VBbmRB
ZGRNZWRpYUVsZW1lbnRzKCknLCAxMDApIj4KKyAgICBUZXN0IHRoYXQgbWVkaWEgcGxheWVycyBh
cmVuJ3QgbGVha2VkIG9uIGVycm9yLgorICAgIExvYWQgdGhpcyBwYWdlIGFuZCB2ZXJpZnkgdGhl
IG51bWJlciBvZiB0aHJlYWRzIHVzZWQgYnkgdGhlIGJyb3dzZXIgZG9lc24ndAorICAgIHNlZW0g
dW5yZWFzb25hYmxlIChlLmcuIGNocm9tZSB1c2VzIDQtNSB0aHJlYWRzIHBlciB2aWRlbyB0YWcg
c28gc3RheWluZworICAgIHVuZGVyIDEwMCB0aHJlYWRzIGlzICJzdWNjZXNzIiwgc2luY2UgdGhp
cyBpbnN0YW50aWF0ZXMgMjAgJmx0O3ZpZGVvJmd0OyBlbGVtZW50cykuCis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171946</attachid>
            <date>2012-11-01 15:49:13 -0700</date>
            <delta_ts>2012-11-01 18:38:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-99647-20121101154734.patch</filename>
            <type>text/plain</type>
            <size>6103</size>
            <attacher name="Ami Fischman">fischman</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWY5MjIwNjhjNjA2NWVh
MGVmOGRjOGYwZjk1Njg5OWZmZDg4YmY3Yy4uY2E3ZWM3MzI3NDY2NThmZGI2OTI1YjUyMjNmYWRk
YWFhNGRlYzA4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTExLTAxICBBbWkg
RmlzY2htYW4gIDxmaXNjaG1hbkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSFRNTE1lZGlhUGxh
eWVyIHNob3VsZCBmcmVlIG1fcGxheWVyIHdoZW4gc3JjIGlzIHNldC9jaGFuZ2VkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTY0NworCisgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgQ2FybHNvbi4KKworICAgICAgICBOZXcgTWFudWFsVGVzdCBhZGRl
ZDsgbWFudWFsIHNpbmNlIGxlYWtpbmcgbWVkaWEgcGxheWVycyBkb2Vzbid0IGhhdmUgbGF5b3V0
VGVzdENvbnRyb2xsZXItdmlzaWJsZSBlZmZlY3RzLgorCisgICAgICAgICogaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBhcnNl
QXR0cmlidXRlKTogY2xlYXJNZWRpYVBsYXllcigpIHdoZW4gc3JjIGlzIHNldC9jaGFuZ2VkCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp1c2VyQ2FuY2VsbGVkTG9hZCk6IHVz
ZSBuZXcgY2xlYXJNZWRpYVBsYXllcigpIGhlbHBlcgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1l
ZGlhRWxlbWVudDo6Y2xlYXJNZWRpYVBsYXllcik6IGNsZWFyIG1fcGxheWVyIGFuZCBhc3NvY2lh
dGVkIHRpbWVycy9mbGFncworICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYVBsYXllcik6IHdoaXRlc3BhY2Utb25seSBjaGFu
Z2UKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDogbmV3IG1ldGhvZDogY3JlYXRl
TWVkaWFQbGF5ZXIoKS4KKyAgICAgICAgKEhUTUxNZWRpYUVsZW1lbnQpOgorCiAyMDEyLTExLTAx
ICBLaWhvbmcgS3dvbiAgPGtpaG9uZy5rd29uQHNhbXN1bmcuY29tPgogCiAgICAgICAgIEFkZCBE
ZXZpY2VDb250cm9sbGVyIGJhc2UtY2xhc3MgdG8gcmVtb3ZlIGR1cGxpY2F0aW9uIG9mIERldmlj
ZVhYWENvbnRyb2xlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5k
ZXggZTljZDFhZmZjOWU2NjFkOThlNGU2NGQ5NzY0NGE5YTExYmZiZDQxMS4uYzg4MmU2MjZlNWNh
NDZjMDcwOGYyZDNjNThmNjE4N2U2MjRjODhmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCkBAIC0zNjMsOCArMzYzLDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVu
dDo6cGFyc2VBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpCiB7CiAgICAgaWYg
KGF0dHJpYnV0ZS5uYW1lKCkgPT0gc3JjQXR0cikgewogICAgICAgICAvLyBUcmlnZ2VyIGEgcmVs
b2FkLCBhcyBsb25nIGFzIHRoZSAnc3JjJyBhdHRyaWJ1dGUgaXMgcHJlc2VudC4KLSAgICAgICAg
aWYgKGZhc3RIYXNBdHRyaWJ1dGUoc3JjQXR0cikpCisgICAgICAgIGlmIChmYXN0SGFzQXR0cmli
dXRlKHNyY0F0dHIpKSB7CisgICAgICAgICAgICBjbGVhck1lZGlhUGxheWVyKE1lZGlhUmVzb3Vy
Y2UpOwogICAgICAgICAgICAgc2NoZWR1bGVMb2FkKE1lZGlhUmVzb3VyY2UpOworICAgICAgICB9
CiAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGUubmFtZSgpID09IGNvbnRyb2xzQXR0cikKICAgICAg
ICAgY29uZmlndXJlTWVkaWFDb250cm9scygpOwogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTM2Njks
MTMgKzM2NzEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnVzZXJDYW5jZWxsZWRMb2FkKCkK
ICAgICAvLyBJZiB0aGUgbWVkaWEgZGF0YSBmZXRjaGluZyBwcm9jZXNzIGlzIGFib3J0ZWQgYnkg
dGhlIHVzZXI6CiAKICAgICAvLyAxIC0gVGhlIHVzZXIgYWdlbnQgc2hvdWxkIGNhbmNlbCB0aGUg
ZmV0Y2hpbmcgcHJvY2Vzcy4KLSNpZiAhRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi0g
ICAgbV9wbGF5ZXIuY2xlYXIoKTsKLSNlbmRpZgotICAgIHN0b3BQZXJpb2RpY1RpbWVycygpOwot
ICAgIG1fbG9hZFRpbWVyLnN0b3AoKTsKLSAgICBtX2xvYWRTdGF0ZSA9IFdhaXRpbmdGb3JTb3Vy
Y2U7Ci0gICAgbV9wZW5kaW5nTG9hZEZsYWdzID0gMDsKKyAgICBjbGVhck1lZGlhUGxheWVyKC0x
KTsKIAogICAgIC8vIDIgLSBTZXQgdGhlIGVycm9yIGF0dHJpYnV0ZSB0byBhIG5ldyBNZWRpYUVy
cm9yIG9iamVjdCB3aG9zZSBjb2RlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gTUVESUFfRVJSX0FCT1JU
RUQuCiAgICAgbV9lcnJvciA9IE1lZGlhRXJyb3I6OmNyZWF0ZShNZWRpYUVycm9yOjpNRURJQV9F
UlJfQUJPUlRFRCk7CkBAIC0zNzEzLDYgKzM3MDksMTggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
Ojp1c2VyQ2FuY2VsbGVkTG9hZCgpCiAjZW5kaWYKIH0KIAordm9pZCBIVE1MTWVkaWFFbGVtZW50
OjpjbGVhck1lZGlhUGxheWVyKHVuc2lnbmVkIGZsYWdzKQoreworI2lmICFFTkFCTEUoUExVR0lO
X1BST1hZX0ZPUl9WSURFTykKKyAgICBtX3BsYXllci5jbGVhcigpOworI2VuZGlmCisgICAgc3Rv
cFBlcmlvZGljVGltZXJzKCk7CisgICAgbV9sb2FkVGltZXIuc3RvcCgpOworCisgICAgbV9wZW5k
aW5nTG9hZEZsYWdzICY9IH5mbGFnczsKKyAgICBtX2xvYWRTdGF0ZSA9IFdhaXRpbmdGb3JTb3Vy
Y2U7Cit9CisKIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y2FuU3VzcGVuZCgpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIHRydWU7IApAQCAtNDI2Myw3ICs0MjcxLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50OjpjcmVhdGVNZWRpYVBsYXllcigpCiAgICAgaWYgKG1fYXVkaW9Tb3VyY2VOb2RlKQogICAg
ICAgICBtX2F1ZGlvU291cmNlTm9kZS0+bG9jaygpOwogI2VuZGlmCi0gICAgICAgIAorCiAgICAg
bV9wbGF5ZXIgPSBNZWRpYVBsYXllcjo6Y3JlYXRlKHRoaXMpOwogCiAjaWYgRU5BQkxFKE1FRElB
X1NPVVJDRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggYzI4OWZm
ZjJlNmE5OTc3NTkwNWVkMjE4Yzk5M2ZkMjg0ZWRhOTM0MS4uM2FlOWYyZjM2NDkzY2ExMjkyNWQ4
MmM0Yjk0YjQ0Zjg4M2QwNTQ0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50
LmgKQEAgLTQ2NCw2ICs0NjQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NoZWR1bGVOZXh0U291
cmNlQ2hpbGQoKTsKICAgICB2b2lkIGxvYWROZXh0U291cmNlQ2hpbGQoKTsKICAgICB2b2lkIHVz
ZXJDYW5jZWxsZWRMb2FkKCk7CisgICAgdm9pZCBjbGVhck1lZGlhUGxheWVyKHVuc2lnbmVkIGZs
YWdzKTsKICAgICBib29sIGhhdmVQb3RlbnRpYWxTb3VyY2VDaGlsZCgpOwogICAgIHZvaWQgbm9u
ZVN1cHBvcnRlZCgpOwogICAgIHZvaWQgbWVkaWFFbmdpbmVFcnJvcihQYXNzUmVmUHRyPE1lZGlh
RXJyb3I+IGVycik7CmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggNDU4
M2MyMWZmOWMwNjlhMWMwYzBlZGY1MTFjNTExOTQwZTNjMDdhMS4uMDdmZTlhOTJkNmU4MDcyODc1
MTk0MGEzYjNjYmUzMTkzOGY5NGEyYiAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTExLTAxICBBbWkgRmlzY2htYW4gIDxmaXNjaG1h
bkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSFRNTE1lZGlhUGxheWVyIHNob3VsZCBmcmVlIG1f
cGxheWVyIHdoZW4gc3JjIGlzIHNldC9jaGFuZ2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTY0NworCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMg
Q2FybHNvbi4KKworICAgICAgICAqIE1hbnVhbFRlc3RzL21lZGlhLXBsYXllcnMtYXJlLWRyb3Bw
ZWQtb24tZXJyb3IuaHRtbDogQWRkZWQuCisgICAgICAgICAgICBWYXJpb3VzIHNjZW5hcmlvcyBh
cmUgdGVzdGVkIHRvIG1ha2Ugc3VyZSBwbGF5ZXJzIGFyZW4ndAorICAgICAgICAgICAgbGVha2Vk
IGluIGRpZmZlcmVudCB3YXlzIGZvciBlYWNoIG9mIHRoZW0uCisKIDIwMTItMTAtMzEgIFRoaWFn
byBNYXJjb3MgUC4gU2FudG9zICA8dGhpYWdvLnNhbnRvc0BpbnRlbC5jb20+CiAKICAgICAgICAg
QWRkZWQgdmlld3BvcnQgYXQtcnVsZSB0byB0aGUgQ1NTIHBhcnNlciBhbmQgdG9rZW5pemVyCmRp
ZmYgLS1naXQgYS9NYW51YWxUZXN0cy9tZWRpYS1wbGF5ZXJzLWFyZS1kcm9wcGVkLW9uLWVycm9y
Lmh0bWwgYi9NYW51YWxUZXN0cy9tZWRpYS1wbGF5ZXJzLWFyZS1kcm9wcGVkLW9uLWVycm9yLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDM4OTY2ODE2N2ZhNTA0Yjc3NzUzN2M0MDczMjNkOGE2YjViMjNlMAot
LS0gL2Rldi9udWxsCisrKyBiL01hbnVhbFRlc3RzL21lZGlhLXBsYXllcnMtYXJlLWRyb3BwZWQt
b24tZXJyb3IuaHRtbApAQCAtMCwwICsxLDQwIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdD4K
K3ZhciB1cmxzID0gWworICAgICJmaWxlOi8vL2RvZXMgbm90IGV4aXN0IG9oIG5vZXMvdGVzdC5t
cDQiLAorICAgICIuLi9MYXlvdXRUZXN0cy9tZWRpYS9jb250ZW50L3Rlc3QtMjVmcHMubXA0Igor
XTsKK3ZhciBraWNrb2ZmRnVuY3Rpb25zID0gWworICAgICJsb2FkIiwKKyAgICAicGxheSIKK107
CisKK3ZhciBtZWRpYUVsZW1lbnRIb2xkZXIgPSBbXTsKKworZnVuY3Rpb24gcmVsZWFzZUFuZEFk
ZE1lZGlhRWxlbWVudHMoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUVsZW1lbnRI
b2xkZXIubGVuZ3RoOyArK2kpCisgICAgICAgIG1lZGlhRWxlbWVudEhvbGRlcltpXS5zcmMgPSAi
IjsKKyAgICBtZWRpYUVsZW1lbnRIb2xkZXIgPSBbXTsKKworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgNTsgKytpKSB7CisgICAgICAgIGZvciAodmFyIHVybCBpbiB1cmxzKSB7CisgICAgICAgICAg
ICBmb3IgKHZhciBraWNrb2ZmRnVuY3Rpb24gaW4ga2lja29mZkZ1bmN0aW9ucykgeworICAgICAg
ICAgICAgICAgIHZhciBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTsKKyAgICAg
ICAgICAgICAgICBhLmNvbnRyb2xzID0gImNvbnRyb2xzIjsKKyAgICAgICAgICAgICAgICBhLnNy
YyA9IHVybHNbdXJsXTsKKyAgICAgICAgICAgICAgICBldmFsKCJhLiIgKyBraWNrb2ZmRnVuY3Rp
b25zW2tpY2tvZmZGdW5jdGlvbl0gKyAiKCk7Iik7CisgICAgICAgICAgICAgICAgbWVkaWFFbGVt
ZW50SG9sZGVyLnB1c2goYSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9Cis8
L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ic2V0SW50ZXJ2YWwoJ3JlbGVhc2VBbmRB
ZGRNZWRpYUVsZW1lbnRzKCknLCAxMDApIj4KKyAgICBUZXN0IHRoYXQgbWVkaWEgcGxheWVycyBh
cmVuJ3QgbGVha2VkIG9uIGVycm9yLgorICAgIExvYWQgdGhpcyBwYWdlIGFuZCB2ZXJpZnkgdGhl
IG51bWJlciBvZiB0aHJlYWRzIHVzZWQgYnkgdGhlIGJyb3dzZXIgZG9lc24ndAorICAgIHNlZW0g
dW5yZWFzb25hYmxlIChlLmcuIGNocm9tZSB1c2VzIDQtNSB0aHJlYWRzIHBlciB2aWRlbyB0YWcg
c28gc3RheWluZworICAgIHVuZGVyIDEwMCB0aHJlYWRzIGlzICJzdWNjZXNzIiwgc2luY2UgdGhp
cyBpbnN0YW50aWF0ZXMgMjAgJmx0O3ZpZGVvJmd0OyBlbGVtZW50cykuCis8L2JvZHk+Cis8L2h0
bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>