<?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>108545</bug_id>
          
          <creation_ts>2013-01-31 16:03:44 -0800</creation_ts>
          <short_desc>Document is never released if an image&apos;s src attribute is changed to a url blocked by content-security-policy.</short_desc>
          <delta_ts>2013-02-01 17:00:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yongjun Zhang">yongjun_zhang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ap</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yongjun_zhang</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>822067</commentid>
    <comment_count>0</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2013-01-31 16:03:44 -0800</bug_when>
    <thetext>If we have an HTML document with an image, and we change the image src to an url  that is blocked by content-security-policy, the document itself will never be released.  Below is the test case:

&lt;html&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Security-Policy&quot; content=&quot;img-src &apos;self&apos;&quot;&gt;
    &lt;script&gt;
        function load() {
            setTimeout(function() {
                var image = document.getElementById(&apos;test&apos;);
                image.src = &apos;http://www.mysample.com/image.png&apos;;
                location.reload();
            }, 300);
        }
    &lt;/script&gt;
&lt;/head&gt;
&lt;body onload=&apos;setTimeout(load(), 100)&apos;&gt;
    &lt;img id=&apos;test&apos; src=&quot;./test.png&quot;&gt;&lt;/img&gt;
&lt;/body&gt;
&lt;/html&gt;

Loading this into Safari and run &apos;heap WebProcess | grep HTMLDocument&quot;, you will see the number of living document keeps growing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822072</commentid>
    <comment_count>1</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2013-01-31 16:04:36 -0800</bug_when>
    <thetext>&lt;rdar://problem/13128478&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822163</commentid>
    <comment_count>2</comment_count>
      <attachid>185903</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2013-01-31 17:21:51 -0800</bug_when>
    <thetext>Created attachment 185903
Don&apos;t cancel error event if the newImage is blocked due to content security policy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>822922</commentid>
    <comment_count>3</comment_count>
      <attachid>185903</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-01 10:24:29 -0800</bug_when>
    <thetext>Comment on attachment 185903
Don&apos;t cancel error event if the newImage is blocked due to content security policy.

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

Great catch.

Another potential way to fix this bug would be do dispatch the error event immediately in this case, not through errorEventSender().dispatchEventSoon(). That would be observable through JavaScript, and I don&apos;t know which behavior is right. Can you find it out from the spec and from other browsers&apos; behavior?

Note that we currently dispatch the event synchronously for an empty URL.

I do not fully understand why canceling the error event causes a world leak. Is there something else going wrong in lower level code?

&gt; Source/WebCore/ChangeLog:12
&gt; +        No new tests, manually verified by using heap tool in OS X Safari.

It is difficult to test for abandoned memory, but can we test for the event being fired?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823066</commentid>
    <comment_count>4</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2013-02-01 11:48:02 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 185903 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=185903&amp;action=review
&gt; 
&gt; Great catch.
&gt; 
&gt; Another potential way to fix this bug would be do dispatch the error event immediately in this case, not through errorEventSender().dispatchEventSoon(). That would be observable through JavaScript, and I don&apos;t know which behavior is right. Can you find it out from the spec and from other browsers&apos; behavior?

Looks like the spec does expect to fire the error event asynchronously, from http://www.whatwg.org/specs/web-apps/current-work/multipage/embedded-content-1.html#the-img-element (section 12):

&quot;If selected source is null, then set the element to the broken state, queue a task to fire a simple event named error at the img element&quot;

&gt; 
&gt; Note that we currently dispatch the event synchronously for an empty URL.
&gt; 

This sounds like behaves differently from the spec.

&gt; I do not fully understand why canceling the error event causes a world leak. Is there something else going wrong in lower level code?

In ImageLoader::updateFromElement, when the image url is blocked by cross-site-voilation or content-security-policy, newImage is null and we schedule error event in ImageLoader.cpp:208:

            m_hasPendingErrorEvent = true;
            errorEventSender().dispatchEventSoon(this);

Later, we cancel the error event in the same call stack since m_hasPendingErrorEvent is true, in ImageLoader.cpp:226:

        if (m_hasPendingErrorEvent)
            errorEventSender().cancelEvent(this);

At the end of ImageLoader::updateFromElement, we ref the source Element in updateHasPendingEvent() since m_hasPendingErrorEvent is still true, at ImageLoader.cpp:256:

    updatedHasPendingEvent();

At this point, the error event is cancelled so errorEventSender won&apos;t call dispatchPendingErrorEvents for this ImageLoader any more.  However, the source Element is still ref-ed and we will leak.

&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        No new tests, manually verified by using heap tool in OS X Safari.
&gt; 
&gt; It is difficult to test for abandoned memory, but can we test for the event being fired?

Good idea!  I will make a test for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823094</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-01 12:03:36 -0800</bug_when>
    <thetext>&gt; At the end of ImageLoader::updateFromElement, we ref the source Element in updateHasPendingEvent() since m_hasPendingErrorEvent is still true, at ImageLoader.cpp:256:

This makes me wonder if we should set m_hasPendingErrorEvent to false when calling errorEventSender().cancelEvent(this).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823099</commentid>
    <comment_count>6</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2013-02-01 12:06:01 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; At the end of ImageLoader::updateFromElement, we ref the source Element in updateHasPendingEvent() since m_hasPendingErrorEvent is still true, at ImageLoader.cpp:256:
&gt; 
&gt; This makes me wonder if we should set m_hasPendingErrorEvent to false when calling errorEventSender().cancelEvent(this).

We could... but then we won&apos;t fire the error event in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823157</commentid>
    <comment_count>7</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-01 12:51:07 -0800</bug_when>
    <thetext>I guess what I&apos;m saying is that we have two bugs here.

1. A leak of the whole document. The best fix for this could be to accurately track m_hasPendingErrorEvent, always unsetting it after cancelEvent().

2. Error event not firing. The best fix for this is probably the one that&apos;s posted.

Not necessarily implying that these should be fixed in separate patches, but that&apos;s how I think about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823225</commentid>
    <comment_count>8</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2013-02-01 13:49:41 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; I guess what I&apos;m saying is that we have two bugs here.
&gt; 
&gt; 1. A leak of the whole document. The best fix for this could be to accurately track m_hasPendingErrorEvent, always unsetting it after cancelEvent().
&gt; 
&gt; 2. Error event not firing. The best fix for this is probably the one that&apos;s posted.
&gt; 
&gt; Not necessarily implying that these should be fixed in separate patches, but that&apos;s how I think about it.

I see, thanks!  I will make a new patch to fix both.  Anyway, the test will only be able to test if error event is fired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823248</commentid>
    <comment_count>9</comment_count>
      <attachid>186133</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2013-02-01 14:05:29 -0800</bug_when>
    <thetext>Created attachment 186133
add an test to verify error event is fired.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823280</commentid>
    <comment_count>10</comment_count>
      <attachid>186133</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-01 14:37:03 -0800</bug_when>
    <thetext>Comment on attachment 186133
add an test to verify error event is fired.

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

This looks pretty good. I had a number of comments, and if you choose to address certain of those, it would be beneficial to run the new patch by EWS, so marking r- for now.

&gt; Source/WebCore/loader/ImageLoader.cpp:223
&gt;              beforeLoadEventSender().cancelEvent(this);
&gt;          if (m_hasPendingLoadEvent)
&gt;              loadEventSender().cancelEvent(this);

These functions should also unset their respective data members (m_hasPendingBeforeLoadEvent, m_hasPendingLoadEvent).

You can compare this function to what setImageWithoutConsideringPendingLoadEvent() does.

&gt; Source/WebCore/loader/ImageLoader.cpp:224
&gt; +        // Don&apos;t cancel the error event if it is just scheduled due to invalid newImage.

I think that &quot;due to invalid newImage&quot; is a bit misleading. The image is null, and the reason for posting the event was that the load was not permitted, not that the image was invalid.

It is already an issue for existing code, which has a very long comment to explain why a null check for newImage translates into posting an error event. It would be better to express this in a more direct way.

In the meanwhile, I&apos;d say something more along the lines of 

// Cancel error events that belong to the previous load, which is now cancelled by changing the src attribute.
// If newImage is null, we assume that any error event has been just posted by this function.
// FIXME: If both previous load and this one got blocked with an error, we can receive one error event instead of two.

&gt; LayoutTests/fast/images/image-error-event-not-firing-expected.txt:11
&gt; +PASS successfullyParsed is true
&gt; +
&gt; +TEST COMPLETE
&gt; +PASS error event fired.

The way to avoid broken output order is to set window.jsTestIsAsync, and to then call finishJSTest() instead of notifyDone().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823401</commentid>
    <comment_count>11</comment_count>
      <attachid>186180</attachid>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2013-02-01 16:05:28 -0800</bug_when>
    <thetext>Created attachment 186180
Patch, addressing review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823405</commentid>
    <comment_count>12</comment_count>
      <attachid>186180</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-01 16:11:20 -0800</bug_when>
    <thetext>Comment on attachment 186180
Patch, addressing review comments.

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

&gt; LayoutTests/fast/images/image-error-event-not-firing.html:25
&gt; +    }, 200);

Would a zero timeout work?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823416</commentid>
    <comment_count>13</comment_count>
    <who name="Yongjun Zhang">yongjun_zhang</who>
    <bug_when>2013-02-01 16:28:47 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 186180 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=186180&amp;action=review
&gt; 
&gt; &gt; LayoutTests/fast/images/image-error-event-not-firing.html:25
&gt; &gt; +    }, 200);
&gt; 
&gt; Would a zero timeout work?

My concern is using zero timeout could cause flaky results since onerror is fired asynchronously and errorEventSender&apos;s timer might fire after setTimeout DOMTimer.  Setting to 200 gives us a safe buffer for that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823436</commentid>
    <comment_count>14</comment_count>
      <attachid>186180</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-01 16:59:59 -0800</bug_when>
    <thetext>Comment on attachment 186180
Patch, addressing review comments.

Clearing flags on attachment: 186180

Committed r141667: &lt;http://trac.webkit.org/changeset/141667&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823437</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-01 17:00:03 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>185903</attachid>
            <date>2013-01-31 17:21:51 -0800</date>
            <delta_ts>2013-02-01 14:05:29 -0800</delta_ts>
            <desc>Don&apos;t cancel error event if the newImage is blocked due to content security policy.</desc>
            <filename>leak_doc_image_src.patch</filename>
            <type>text/plain</type>
            <size>1866</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTUwNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEzLTAxLTMxICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRG9jdW1lbnQgaXMg
bmV2ZXIgcmVsZWFzZWQgaWYgYW4gaW1hZ2UncyBzcmMgYXR0cmlidXRlIGlzIGNoYW5nZWQgdG8g
YSB1cmwgYmxvY2tlZCBieSBjb250ZW50LXNlY3VyaXR5LXBvbGljeS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU0NQorCisgICAgICAgIElmIHdl
IGp1c3Qgc2NoZWR1bGVkIGFuIGVycm9yIGV2ZW50IGR1ZSB0byBhbiBudWxsIG5ld0ltYWdlLCB3
ZSBzaG91bGQgbm90IGNhbmNlbCBpdCB3aGVuIG5ld0ltYWdlIGFuZCBvbGRJbWFnZQorICAgICAg
ICBpcyBub3QgdGhlIHNhbWUuICBPdGhlcndpc2Ugd2Ugd2lsbCByZWYgdGhlIHNvdXJjZUVsZW1l
bnQgaW4gdXBkYXRlSGFzUGVuZGluZ0V2ZW50IChtX2hhc1BlbmRpbmdFcnJvckV2ZW50IGlzIHRy
dWUpCisgICAgICAgIGJ1dCBuZXZlciBkZXJlZiBpdCBzaW5jZSB3ZSBhbHJlYWR5IGNhbmNlbGxl
ZCB0aGUgZXJyb3IgZXZlbnQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBtYW51YWxseSB2ZXJpZmllZCBieSB1c2luZyBoZWFw
IHRvb2wgaW4gT1MgWCBTYWZhcmkuCisKKyAgICAgICAgKiBsb2FkZXIvSW1hZ2VMb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KTogZG9u
J3QgY2FuY2VsIGVycm9yIGV2ZW50IGlmIG5ld0ltYWdlIGlzIG51bGwsIHdlIHdhbnQgdGhlCisg
ICAgICAgICAgICBlcnJvciBldmVudCB0byBmaXJlLgorCiAyMDEzLTAxLTMxICBKdWxpZW4gQ2hh
ZmZyYWl4ICA8amNoYWZmcmFpeEB3ZWJraXQub3JnPgogCiAgICAgICAgIFtDU1MgR3JpZCBMYXlv
dXRdIFN1cHBvcnQgaW1wbGljaXQgcm93cyBhbmQgY29sdW1ucwpJbmRleDogU291cmNlL1dlYkNv
cmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9s
b2FkZXIvSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxNDE0NDkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsNyArMjIxLDgg
QEAgdm9pZCBJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgICAgICAgICAgYmVm
b3JlTG9hZEV2ZW50U2VuZGVyKCkuY2FuY2VsRXZlbnQodGhpcyk7CiAgICAgICAgIGlmIChtX2hh
c1BlbmRpbmdMb2FkRXZlbnQpCiAgICAgICAgICAgICBsb2FkRXZlbnRTZW5kZXIoKS5jYW5jZWxF
dmVudCh0aGlzKTsKLSAgICAgICAgaWYgKG1faGFzUGVuZGluZ0Vycm9yRXZlbnQpCisgICAgICAg
IC8vIERvbid0IGNhbmNlbCB0aGUgZXJyb3IgZXZlbnQgaWYgaXQgaXMganVzdCBzY2hlZHVsZWQg
ZHVlIHRvIGludmFsaWQgbmV3SW1hZ2UuCisgICAgICAgIGlmIChtX2hhc1BlbmRpbmdFcnJvckV2
ZW50ICYmIG5ld0ltYWdlKQogICAgICAgICAgICAgZXJyb3JFdmVudFNlbmRlcigpLmNhbmNlbEV2
ZW50KHRoaXMpOwogCiAgICAgICAgIG1faW1hZ2UgPSBuZXdJbWFnZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186133</attachid>
            <date>2013-02-01 14:05:29 -0800</date>
            <delta_ts>2013-02-01 16:05:28 -0800</delta_ts>
            <desc>add an test to verify error event is fired.</desc>
            <filename>image_error_event_not_fired.patch</filename>
            <type>text/plain</type>
            <size>5006</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEzLTAyLTAxICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRG9jdW1lbnQgaXMg
bmV2ZXIgcmVsZWFzZWQgaWYgYW4gaW1hZ2UncyBzcmMgYXR0cmlidXRlIGlzIGNoYW5nZWQgdG8g
YSB1cmwgYmxvY2tlZCBieSBjb250ZW50LXNlY3VyaXR5LXBvbGljeS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU0NQorCisgICAgICAgIElmIHdl
IGp1c3Qgc2NoZWR1bGVkIGFuIGVycm9yIGV2ZW50IGR1ZSB0byBhbiBudWxsIG5ld0ltYWdlLCB3
ZSBzaG91bGQgbm90IGNhbmNlbCBpdCB3aGVuIG5ld0ltYWdlIGFuZCBvbGRJbWFnZQorICAgICAg
ICBpcyBub3QgdGhlIHNhbWUuICBPdGhlcndpc2Ugd2Ugd2lsbCByZWYgdGhlIHNvdXJjZUVsZW1l
bnQgaW4gdXBkYXRlSGFzUGVuZGluZ0V2ZW50IChtX2hhc1BlbmRpbmdFcnJvckV2ZW50IGlzIHRy
dWUpCisgICAgICAgIGJ1dCBuZXZlciBkZXJlZiBpdCBzaW5jZSB3ZSBhbHJlYWR5IGNhbmNlbGxl
ZCB0aGUgZXJyb3IgZXZlbnQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGVzdDogZmFzdC9pbWFnZXMvaW1hZ2UtZXJyb3ItZXZlbnQtbm90LWZpcmlu
Zy5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KTogZG9uJ3QgY2FuY2VsIGVycm9y
IGV2ZW50IGlmIG5ld0ltYWdlIGlzIG51bGwsIHdlIHdhbnQgdGhlCisgICAgICAgICAgICBlcnJv
ciBldmVudCB0byBmaXJlLgorCiAyMDEzLTAyLTAxICBCZXRoIERha2luICA8YmRha2luQGFwcGxl
LmNvbT4KIAogICAgICAgICBBbm90aGVyIHNwZWN1bGF0aXZlIHdpbmRvd3MgYnVpbGQgZml4LgpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxNDE0NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMjEsOCArMjIxLDExIEBAIHZvaWQgSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50
KCkKICAgICAgICAgICAgIGJlZm9yZUxvYWRFdmVudFNlbmRlcigpLmNhbmNlbEV2ZW50KHRoaXMp
OwogICAgICAgICBpZiAobV9oYXNQZW5kaW5nTG9hZEV2ZW50KQogICAgICAgICAgICAgbG9hZEV2
ZW50U2VuZGVyKCkuY2FuY2VsRXZlbnQodGhpcyk7Ci0gICAgICAgIGlmIChtX2hhc1BlbmRpbmdF
cnJvckV2ZW50KQorICAgICAgICAvLyBEb24ndCBjYW5jZWwgdGhlIGVycm9yIGV2ZW50IGlmIGl0
IGlzIGp1c3Qgc2NoZWR1bGVkIGR1ZSB0byBpbnZhbGlkIG5ld0ltYWdlLgorICAgICAgICBpZiAo
bV9oYXNQZW5kaW5nRXJyb3JFdmVudCAmJiBuZXdJbWFnZSkgewogICAgICAgICAgICAgZXJyb3JF
dmVudFNlbmRlcigpLmNhbmNlbEV2ZW50KHRoaXMpOworICAgICAgICAgICAgbV9oYXNQZW5kaW5n
RXJyb3JFdmVudCA9IGZhbHNlOworICAgICAgICB9CiAKICAgICAgICAgbV9pbWFnZSA9IG5ld0lt
YWdlOwogICAgICAgICBtX2hhc1BlbmRpbmdCZWZvcmVMb2FkRXZlbnQgPSAhbV9lbGVtZW50LT5k
b2N1bWVudCgpLT5pc0ltYWdlRG9jdW1lbnQoKSAmJiBuZXdJbWFnZTsKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE0MTYyOCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDE2IEBACisyMDEzLTAyLTAxICBZb25nanVuIFpoYW5nICA8eW9uZ2p1bl96aGFuZ0Bh
cHBsZS5jb20+CisKKyAgICAgICAgRG9jdW1lbnQgaXMgbmV2ZXIgcmVsZWFzZWQgaWYgYW4gaW1h
Z2UncyBzcmMgYXR0cmlidXRlIGlzIGNoYW5nZWQgdG8gYSB1cmwgYmxvY2tlZCBieSBjb250ZW50
LXNlY3VyaXR5LXBvbGljeS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEwODU0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBhIHRlc3QgdG8gdmVyaWZ5IHRoZSBlcnJvciBldmVudCBpcyBmaXJlZCB3
aGVuIGltYWdlJ3Mgc3JjIGF0dHJpYnV0ZSBpcyBjaGFuZ2VkIHRvIGEgdXJsCisgICAgICAgIGJ1
dCB0aGUgdXJsIGJsb2NrZWQgYnkgY29udGVudC1zZWN1cml0eS1wb2xpY3kuCisKKyAgICAgICAg
KiBmYXN0L2ltYWdlcy9pbWFnZS1lcnJvci1ldmVudC1ub3QtZmlyaW5nLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvaW1hZ2UtZXJyb3ItZXZlbnQtbm90LWZpcmlu
Zy5odG1sOiBBZGRlZC4KKwogMjAxMy0wMi0wMSAgSmVzc2llIEJlcmxpbiAgPGpiZXJsaW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFdUUiBuZWVkcyBhbiBpbXBsZW1lbnRhdGlvbiBvZiBzZXRBdXRv
bWF0aWNMaW5rRGV0ZWN0aW9uRW5hYmxlZApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMv
aW1hZ2UtZXJyb3ItZXZlbnQtbm90LWZpcmluZy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2UtZXJyb3ItZXZlbnQtbm90LWZpcmluZy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1l
cnJvci1ldmVudC1ub3QtZmlyaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMiBAQAorQ09OU09MRSBNRVNTQUdFOiBSZWZ1c2VkIHRvIGxvYWQgdGhlIGltYWdlICdodHRw
Oi8vd3d3Lm15ZmFrZXNpdGVhYmMuY29tL2ltYWdlLnBuZycgYmVjYXVzZSBpdCB2aW9sYXRlcyB0
aGUgZm9sbG93aW5nIENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IGRpcmVjdGl2ZTogImltZy1zcmMg
J3NlbGYnIi4KKworVGhpcyB0ZXN0cyBvbmVycm9yIGV2ZW50IGlzIGZpcmVkIGlmIHdlIGNoYW5n
ZSBpbWFnZSBzcmMgdG8gYSB1cmwgYmxvY2tlZCBieSBjb250ZW50LXNlY3VyaXR5LXBvbGljeS4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorUEFTUyBlcnJvciBldmVudCBmaXJlZC4KKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2UtZXJyb3ItZXZlbnQtbm90LWZpcmluZy5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2ltYWdlLWVycm9yLWV2
ZW50LW5vdC1maXJpbmcuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1h
Z2VzL2ltYWdlLWVycm9yLWV2ZW50LW5vdC1maXJpbmcuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtU2VjdXJpdHktUG9s
aWN5IiBjb250ZW50PSJpbWctc3JjICdzZWxmJyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CitpZiAod2luZG93LnRlc3RS
dW5uZXIpCisgICAgd2luZG93LnRlc3RSdW5uZXIud2FpdFVudGlsRG9uZSgpOworCitkZXNjcmlw
dGlvbigKKyAgICAiVGhpcyB0ZXN0cyBvbmVycm9yIGV2ZW50IGlzIGZpcmVkIGlmIHdlIGNoYW5n
ZSBpbWFnZSBzcmMgdG8gYSB1cmwgYmxvY2tlZCBieSBjb250ZW50LXNlY3VyaXR5LXBvbGljeS4i
CispCisKK2Z1bmN0aW9uIGxvYWQoKQoreworICAgIHZhciBpbWFnZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCd0ZXN0Jyk7CisgICAgaW1hZ2Uub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAg
ICAgICB0ZXN0UGFzc2VkKCJlcnJvciBldmVudCBmaXJlZC4iKTsKKworICAgICAgICBpZiAod2lu
ZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB3aW5kb3cudGVzdFJ1bm5lci5ub3RpZnlEb25l
KCk7CisgICAgfTsKKyAgICBpbWFnZS5zcmMgPSAnaHR0cDovL3d3dy5teWZha2VzaXRlYWJjLmNv
bS9pbWFnZS5wbmcnOworCisgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgdGVz
dEZhaWxlZCgiZXJyb3IgZXZlbnQgaXMgbm90IGZpcmVkLiIpCisKKyAgICAgICAgaWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgICAgICAgICAgd2luZG93LnRlc3RSdW5uZXIubm90aWZ5RG9uZSgp
OworICAgIH0sIDIwMCk7Cit9Cis8L3NjcmlwdD4KKworPC9oZWFkPgorPGJvZHkgb25sb2FkPSds
b2FkKCknPgorCis8aW1nIHNyYz0iLi9jb2xvci1qcGVnLXdpdGgtY29sb3ItcHJvZmlsZS1leHBl
Y3RlZC5wbmciIGlkPSJ0ZXN0Ij48L2ltZz4KKworPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="205457"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186180</attachid>
            <date>2013-02-01 16:05:28 -0800</date>
            <delta_ts>2013-02-01 16:59:59 -0800</delta_ts>
            <desc>Patch, addressing review comments.</desc>
            <filename>image_error_event_not_fired.patch</filename>
            <type>text/plain</type>
            <size>5515</size>
            <attacher name="Yongjun Zhang">yongjun_zhang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0MTYyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEzLTAyLTAxICBZb25nanVu
IFpoYW5nICA8eW9uZ2p1bl96aGFuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRG9jdW1lbnQgaXMg
bmV2ZXIgcmVsZWFzZWQgaWYgYW4gaW1hZ2UncyBzcmMgYXR0cmlidXRlIGlzIGNoYW5nZWQgdG8g
YSB1cmwgYmxvY2tlZCBieSBjb250ZW50LXNlY3VyaXR5LXBvbGljeS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwODU0NQorCisgICAgICAgIElmIHdl
IGp1c3Qgc2NoZWR1bGVkIGFuIGVycm9yIGV2ZW50IGR1ZSB0byBhbiBudWxsIG5ld0ltYWdlLCB3
ZSBzaG91bGQgbm90IGNhbmNlbCBpdCB3aGVuIG5ld0ltYWdlIGFuZCBvbGRJbWFnZQorICAgICAg
ICBpcyBub3QgdGhlIHNhbWUuICBPdGhlcndpc2Ugd2Ugd2lsbCByZWYgdGhlIHNvdXJjZUVsZW1l
bnQgaW4gdXBkYXRlSGFzUGVuZGluZ0V2ZW50IChtX2hhc1BlbmRpbmdFcnJvckV2ZW50IGlzIHRy
dWUpCisgICAgICAgIGJ1dCBuZXZlciBkZXJlZiBpdCBzaW5jZSB3ZSBhbHJlYWR5IGNhbmNlbGxl
ZCB0aGUgZXJyb3IgZXZlbnQuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGVzdDogZmFzdC9pbWFnZXMvaW1hZ2UtZXJyb3ItZXZlbnQtbm90LWZpcmlu
Zy5odG1sCisKKyAgICAgICAgKiBsb2FkZXIvSW1hZ2VMb2FkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KTogZG9uJ3QgY2FuY2VsIGVycm9y
IGV2ZW50IGlmIG5ld0ltYWdlIGlzIG51bGwsIHdlIHdhbnQgdGhlCisgICAgICAgICAgICBlcnJv
ciBldmVudCB0byBmaXJlLgorCiAyMDEzLTAyLTAxICBCZXRoIERha2luICA8YmRha2luQGFwcGxl
LmNvbT4KIAogICAgICAgICBBbm90aGVyIHNwZWN1bGF0aXZlIHdpbmRvd3MgYnVpbGQgZml4LgpJ
bmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxNDE0NDkp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTcsMTIgKzIxNywyMyBAQCB2b2lkIEltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVu
dCgpCiAgICAgCiAgICAgQ2FjaGVkSW1hZ2UqIG9sZEltYWdlID0gbV9pbWFnZS5nZXQoKTsKICAg
ICBpZiAobmV3SW1hZ2UgIT0gb2xkSW1hZ2UpIHsKLSAgICAgICAgaWYgKG1faGFzUGVuZGluZ0Jl
Zm9yZUxvYWRFdmVudCkKKyAgICAgICAgaWYgKG1faGFzUGVuZGluZ0JlZm9yZUxvYWRFdmVudCkg
ewogICAgICAgICAgICAgYmVmb3JlTG9hZEV2ZW50U2VuZGVyKCkuY2FuY2VsRXZlbnQodGhpcyk7
Ci0gICAgICAgIGlmIChtX2hhc1BlbmRpbmdMb2FkRXZlbnQpCisgICAgICAgICAgICBtX2hhc1Bl
bmRpbmdCZWZvcmVMb2FkRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9o
YXNQZW5kaW5nTG9hZEV2ZW50KSB7CiAgICAgICAgICAgICBsb2FkRXZlbnRTZW5kZXIoKS5jYW5j
ZWxFdmVudCh0aGlzKTsKLSAgICAgICAgaWYgKG1faGFzUGVuZGluZ0Vycm9yRXZlbnQpCisgICAg
ICAgICAgICBtX2hhc1BlbmRpbmdMb2FkRXZlbnQgPSBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIENhbmNlbCBlcnJvciBldmVudHMgdGhhdCBiZWxvbmcgdG8gdGhlIHByZXZpb3VzIGxv
YWQsIHdoaWNoIGlzIG5vdyBjYW5jZWxsZWQgYnkgY2hhbmdpbmcgdGhlIHNyYyBhdHRyaWJ1dGUu
CisgICAgICAgIC8vIElmIG5ld0ltYWdlIGlzIG51bGwgYW5kIG1faGFzUGVuZGluZ0Vycm9yRXZl
bnQgaXMgdHJ1ZSwgd2Uga25vdyB0aGUgZXJyb3IgZXZlbnQgaGFzIGJlZW4ganVzdCBwb3N0ZWQg
YnkKKyAgICAgICAgLy8gdGhpcyBsb2FkIGFuZCB3ZSBzaG91bGQgbm90IGNhbmNlbCB0aGUgZXZl
bnQuCisgICAgICAgIC8vIEZJWE1FOiBJZiBib3RoIHByZXZpb3VzIGxvYWQgYW5kIHRoaXMgb25l
IGdvdCBibG9ja2VkIHdpdGggYW4gZXJyb3IsIHdlIGNhbiByZWNlaXZlIG9uZSBlcnJvciBldmVu
dCBpbnN0ZWFkIG9mIHR3by4KKyAgICAgICAgaWYgKG1faGFzUGVuZGluZ0Vycm9yRXZlbnQgJiYg
bmV3SW1hZ2UpIHsKICAgICAgICAgICAgIGVycm9yRXZlbnRTZW5kZXIoKS5jYW5jZWxFdmVudCh0
aGlzKTsKKyAgICAgICAgICAgIG1faGFzUGVuZGluZ0Vycm9yRXZlbnQgPSBmYWxzZTsKKyAgICAg
ICAgfQogCiAgICAgICAgIG1faW1hZ2UgPSBuZXdJbWFnZTsKICAgICAgICAgbV9oYXNQZW5kaW5n
QmVmb3JlTG9hZEV2ZW50ID0gIW1fZWxlbWVudC0+ZG9jdW1lbnQoKS0+aXNJbWFnZURvY3VtZW50
KCkgJiYgbmV3SW1hZ2U7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDE2MjgpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0wMi0wMSAg
WW9uZ2p1biBaaGFuZyAgPHlvbmdqdW5femhhbmdAYXBwbGUuY29tPgorCisgICAgICAgIERvY3Vt
ZW50IGlzIG5ldmVyIHJlbGVhc2VkIGlmIGFuIGltYWdlJ3Mgc3JjIGF0dHJpYnV0ZSBpcyBjaGFu
Z2VkIHRvIGEgdXJsIGJsb2NrZWQgYnkgY29udGVudC1zZWN1cml0eS1wb2xpY3kuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg1NDUKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSB0ZXN0IHRvIHZl
cmlmeSB0aGUgZXJyb3IgZXZlbnQgaXMgZmlyZWQgd2hlbiBpbWFnZSdzIHNyYyBhdHRyaWJ1dGUg
aXMgY2hhbmdlZCB0byBhIHVybAorICAgICAgICBidXQgdGhlIHVybCBibG9ja2VkIGJ5IGNvbnRl
bnQtc2VjdXJpdHktcG9saWN5LgorCisgICAgICAgICogZmFzdC9pbWFnZXMvaW1hZ2UtZXJyb3It
ZXZlbnQtbm90LWZpcmluZy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1h
Z2VzL2ltYWdlLWVycm9yLWV2ZW50LW5vdC1maXJpbmcuaHRtbDogQWRkZWQuCisKIDIwMTMtMDIt
MDEgIEplc3NpZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBXVFIgbmVl
ZHMgYW4gaW1wbGVtZW50YXRpb24gb2Ygc2V0QXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2ltYWdlLWVycm9yLWV2ZW50LW5vdC1maXJp
bmctZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2lt
YWdlLWVycm9yLWV2ZW50LW5vdC1maXJpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvaW1hZ2UtZXJyb3ItZXZlbnQtbm90LWZpcmluZy1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKK0NPTlNPTEUgTUVTU0FHRTog
UmVmdXNlZCB0byBsb2FkIHRoZSBpbWFnZSAnaHR0cDovL3d3dy5teWZha2VzaXRlYWJjLmNvbS9p
bWFnZS5wbmcnIGJlY2F1c2UgaXQgdmlvbGF0ZXMgdGhlIGZvbGxvd2luZyBDb250ZW50IFNlY3Vy
aXR5IFBvbGljeSBkaXJlY3RpdmU6ICJpbWctc3JjICdzZWxmJyIuCisKK1RoaXMgdGVzdHMgb25l
cnJvciBldmVudCBpcyBmaXJlZCBpZiB3ZSBjaGFuZ2UgaW1hZ2Ugc3JjIHRvIGEgdXJsIGJsb2Nr
ZWQgYnkgY29udGVudC1zZWN1cml0eS1wb2xpY3kuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIGVycm9yIGV2ZW50IGZpcmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L2ltYWdlLWVycm9yLWV2ZW50LW5vdC1maXJpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1lcnJvci1ldmVudC1ub3QtZmlyaW5nLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9pbWFnZS1lcnJvci1ldmVudC1ub3Qt
ZmlyaW5nLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBo
dHRwLWVxdWl2PSJDb250ZW50LVNlY3VyaXR5LVBvbGljeSIgY29udGVudD0iaW1nLXNyYyAnc2Vs
ZiciPgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oCisgICAgIlRoaXMgdGVzdHMgb25lcnJvciBldmVu
dCBpcyBmaXJlZCBpZiB3ZSBjaGFuZ2UgaW1hZ2Ugc3JjIHRvIGEgdXJsIGJsb2NrZWQgYnkgY29u
dGVudC1zZWN1cml0eS1wb2xpY3kuIgorKQorCitqc1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworZnVu
Y3Rpb24gbG9hZCgpCit7CisgICAgdmFyIGltYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
J3Rlc3QnKTsKKyAgICBpbWFnZS5vbmVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RQ
YXNzZWQoImVycm9yIGV2ZW50IGZpcmVkLiIpOworICAgICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAg
ICB9OworICAgIGltYWdlLnNyYyA9ICdodHRwOi8vd3d3Lm15ZmFrZXNpdGVhYmMuY29tL2ltYWdl
LnBuZyc7CisKKyAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICB0ZXN0RmFpbGVk
KCJlcnJvciBldmVudCBpcyBub3QgZmlyZWQuIikKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfSwgMjAwKTsKK30KKzwvc2NyaXB0PgorCis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9J2xvYWQo
KSc+CisKKzxpbWcgc3JjPSIuL2NvbG9yLWpwZWctd2l0aC1jb2xvci1wcm9maWxlLWV4cGVjdGVk
LnBuZyIgaWQ9InRlc3QiPjwvaW1nPgorCis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>