<?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>72484</bug_id>
          
          <creation_ts>2011-11-16 02:40:01 -0800</creation_ts>
          <short_desc>[v8] Exception thrown in npObjectInvokeImpl may overwrite the exception message thrown by NPN_SetException</short_desc>
          <delta_ts>2013-05-02 11:23:50 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Hongbo Min">hongbo.min</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ajwong</cc>
    
    <cc>andersca</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dimich</cc>
    
    <cc>hongbo.min</cc>
    
    <cc>japhet</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>503734</commentid>
    <comment_count>0</comment_count>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-11-16 02:40:01 -0800</bug_when>
    <thetext>The npObjectInvokeImpl function defined in V8NPObject.cpp file will cause the renderer process can&apos;t throw the expected exception message by calling NPN_SetException in NPAPI plugin.

In the process of invoking an native method exposed by NPAPI plugin via NPClass::construct or NPClass::invoke, the method itself can thrown an exception message to JS engine by calling NPN_SetException and return false in case of an error occurs during method execution.

However, in npObjectInvokeImpl implementation, it will throw exception once the NPClass::constuct or NPClass::invoke returns false. As a result, the pending exception in JS context thrown by NPN_SetException will be discarded and replaced by a general exception with &quot;Error calling method on NPObject.&quot; message.

The issue is also raised in chromium community http://code.google.com/p/chromium/issues/detail?id=68919.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503736</commentid>
    <comment_count>1</comment_count>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-11-16 02:41:34 -0800</bug_when>
    <thetext>Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>504481</commentid>
    <comment_count>2</comment_count>
      <attachid>115502</attachid>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-11-16 18:14:35 -0800</bug_when>
    <thetext>Created attachment 115502
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508709</commentid>
    <comment_count>3</comment_count>
      <attachid>115502</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-11-24 04:23:30 -0800</bug_when>
    <thetext>Comment on attachment 115502
Patch

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

&gt; Source/WebCore/ChangeLog:2
&gt; +        Generic exception message thrown by npObjectInvokeImpl may overwrite

ChangeLog description should start with bug title and URL. See http://www.webkit.org/coding/contributing.html#changelogs

&gt; Source/WebCore/ChangeLog:15
&gt; +        No new tests. (OOPS!)

Need to provide tests or explain why none are possible.

&gt; Source/WebCore/bindings/v8/V8NPObject.cpp:136
&gt; +        // the result has a boolean type and its value should be true, so the

Is this a standard technique? If so, can you point to some documentation? Or is it just a Chromium-specific work-around?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509311</commentid>
    <comment_count>4</comment_count>
      <attachid>116645</attachid>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-11-25 19:29:50 -0800</bug_when>
    <thetext>Created attachment 116645
Patch Updated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509312</commentid>
    <comment_count>5</comment_count>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-11-25 19:48:27 -0800</bug_when>
    <thetext>Steve, thanks for your reviewing.

The updated patch has been attached again.

It is actually not a standard technique for solving such an issue, but it is the most reasonable and simplest solution, no need to change NPAPI interface.

Suppose the situation when invoking a native method implemented in NPAPI plugin, setexception may be called to throw an exception message to indicate there is something wrong happend in the process of method execution. However, there is no way to tell V8 engine that there is already an exception message thrown.

This solution is to reuse the NPVariant result that stores the result of method execution. If the method fails to execute, the NPVariant result serves as a inidcator to tell v8 engine some error occurs. It provides a chance to native method writter to throw their own exception message instead of generic message by setting NPVariant result as an boolean type and true value. Patch for http://codereview.chromium.org/8576001/ is a typical usage.

The same issue also exists in JavascriptCore engine. I will fire another bug to track it.

(In reply to comment #3)
&gt; (From update of attachment 115502 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=115502&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:2
&gt; &gt; +        Generic exception message thrown by npObjectInvokeImpl may overwrite
&gt; 
&gt; ChangeLog description should start with bug title and URL. See http://www.webkit.org/coding/contributing.html#changelogs
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        No new tests. (OOPS!)
&gt; 
&gt; Need to provide tests or explain why none are possible.
&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8NPObject.cpp:136
&gt; &gt; +        // the result has a boolean type and its value should be true, so the
&gt; 
&gt; Is this a standard technique? If so, can you point to some documentation? Or is it just a Chromium-specific work-around?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509705</commentid>
    <comment_count>6</comment_count>
      <attachid>116645</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-11-28 03:33:53 -0800</bug_when>
    <thetext>Comment on attachment 116645
Patch Updated

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

&gt; Source/WebCore/bindings/v8/V8NPObject.cpp:135
&gt; +        // If an exception is already thrown by invoke/invokeDefault/construct,

I think this could be worded more clearly - &apos;A return value of true is used to indicate that an exception has been thrown.&apos;

&gt; Source/WebCore/bindings/v8/V8NPObject.cpp:139
&gt; +        if (NPVARIANT_IS_BOOLEAN(result) &amp;&amp; NPVARIANT_TO_BOOLEAN(result))

Presumably we can&apos;t test directly for an exception having been thrown? If not, this approach seems reasonable to me, but you should get a formal review from whoever owns this code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509765</commentid>
    <comment_count>7</comment_count>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-11-28 05:27:45 -0800</bug_when>
    <thetext>Great thank to Steve.

Alert &amp; Dimitri,

Could you please take a time to review this patch? Thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509816</commentid>
    <comment_count>8</comment_count>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-11-28 07:13:17 -0800</bug_when>
    <thetext>Failed to upload the new patch.

The Patch Updated is still valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510499</commentid>
    <comment_count>9</comment_count>
      <attachid>116897</attachid>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-11-28 22:23:08 -0800</bug_when>
    <thetext>Created attachment 116897
Patch Updated 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510817</commentid>
    <comment_count>10</comment_count>
      <attachid>116897</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-11-29 09:01:55 -0800</bug_when>
    <thetext>Comment on attachment 116897
Patch Updated 2

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

&gt; Source/WebCore/ChangeLog:21
&gt; +        No new tests because it depends on NPN_SetException implementation and
&gt; +        JS engine used in browser. For v8 engine, it is covered by the test in
&gt; +        http://codereview.chromium.org/8576001/ 

This should be testable using TestNetscapePlugin (See http://trac.webkit.org/browser/trunk/Tools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp#L1008).

&gt; Source/WebCore/bindings/v8/V8NPObject.cpp:144
&gt; +    if (!retval) {
&gt; +        // If an exception is already thrown by invoke/invokeDefault/construct,
&gt; +        // native method writter is allowed to use the result as an indicator
&gt; +        // to tell v8 engine that there is already a pending exception by 
&gt; +        // setting it as boolean type with true value. Under this case, the
&gt; +        // general exception will not be thrown again.
&gt; +        if (NPVARIANT_IS_BOOLEAN(result) &amp;&amp; NPVARIANT_TO_BOOLEAN(result))
&gt; +          VOID_TO_NPVARIANT(result); // Restore back to VOID type
&gt; +        else
&gt; +          throwError(&quot;Error calling method on NPObject.&quot;, V8Proxy::GeneralError);
&gt; +    }

This seems dangerous, it&apos;s assigning a deep meaning to a boolean result of true, and I&apos;m betting it will cause regressions. There has got to be a better way catch this case (possibly using ExceptionCatcher? I don&apos;t know much about it, but it looks like it might be relevant)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511386</commentid>
    <comment_count>11</comment_count>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-11-29 22:05:12 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 116897 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116897&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:21
&gt; &gt; +        No new tests because it depends on NPN_SetException implementation and
&gt; &gt; +        JS engine used in browser. For v8 engine, it is covered by the test in
&gt; &gt; +        http://codereview.chromium.org/8576001/ 
&gt; 
&gt; This should be testable using TestNetscapePlugin (See http://trac.webkit.org/browser/trunk/Tools/DumpRenderTree/TestNetscapePlugIn/PluginObject.cpp#L1008).

Yes, I find the test case for this patch is LayoutTests/plugins/npruntime/throw-exception.html. It doesn&apos;t break all existing tests. 

&gt; 
&gt; &gt; Source/WebCore/bindings/v8/V8NPObject.cpp:144
&gt; &gt; +    if (!retval) {
&gt; &gt; +        // If an exception is already thrown by invoke/invokeDefault/construct,
&gt; &gt; +        // native method writter is allowed to use the result as an indicator
&gt; &gt; +        // to tell v8 engine that there is already a pending exception by 
&gt; &gt; +        // setting it as boolean type with true value. Under this case, the
&gt; &gt; +        // general exception will not be thrown again.
&gt; &gt; +        if (NPVARIANT_IS_BOOLEAN(result) &amp;&amp; NPVARIANT_TO_BOOLEAN(result))
&gt; &gt; +          VOID_TO_NPVARIANT(result); // Restore back to VOID type
&gt; &gt; +        else
&gt; &gt; +          throwError(&quot;Error calling method on NPObject.&quot;, V8Proxy::GeneralError);
&gt; &gt; +    }
&gt; 
&gt; This seems dangerous, it&apos;s assigning a deep meaning to a boolean result of true, and I&apos;m betting it will cause regressions. There has got to be a better way catch this case (possibly using ExceptionCatcher? I don&apos;t know much about it, but it looks like it might be relevant)

Actually, although a deep meaning assigned to the NPVariant result, it makes sense because:
1) In case of the invoke fails, the NPVariant result will not be used as the method executing result. You may think that the result may be modified by accident even if the invoke fails, but it is indeed a bug because the result should be UNDEFINED in case of failure.
2) No impact on the current logic if no true value is set on the boolean type result. It just avoids throwing a general error if the indicator is true.

The ExceptionCatcher is useful only when there is a valid V8 context. For the NPObject which is not npScriptObjectClass, may be other NPClass, the ExceptionCatcher doesn&apos;t has much help.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512757</commentid>
    <comment_count>12</comment_count>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-12-01 07:40:52 -0800</bug_when>
    <thetext>Any comment? Nate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>512851</commentid>
    <comment_count>13</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-12-01 09:41:11 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Any comment? Nate.

What do Safari, Firefox, and Opera do in this case? We should try to match them if at all possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513658</commentid>
    <comment_count>14</comment_count>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-12-02 03:51:52 -0800</bug_when>
    <thetext>For Safari, Firefox and Opera, they are both not using v8 as javascript engine. In this sense, this patch serves as a chromium-specific bug-fixing.  It just provides a chance to solve such an issue but depending on the implementation in browser-side. 

In order to make chromium throwing the correct message set by NPN_SetException, chromium itself needs to apply another patch as described at http://codereview.chromium.org/8576001/

I had a try on Safari/Firefox/Opera, they also can&apos;t throw the expected message set by NPN_SetException. 

As far as I concerned,  this patch is the simplest solution for solving this issue for chromium/v8. I have also tried other solution, but will involve more changes even if NPAPI interface spec.

(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; Any comment? Nate.
&gt; 
&gt; What do Safari, Firefox, and Opera do in this case? We should try to match them if at all possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>513811</commentid>
    <comment_count>15</comment_count>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2011-12-02 08:57:44 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; For Safari, Firefox and Opera, they are both not using v8 as javascript engine. In this sense, this patch serves as a chromium-specific bug-fixing.  It just provides a chance to solve such an issue but depending on the implementation in browser-side. 
&gt; 
&gt; In order to make chromium throwing the correct message set by NPN_SetException, chromium itself needs to apply another patch as described at http://codereview.chromium.org/8576001/
&gt; 
&gt; I had a try on Safari/Firefox/Opera, they also can&apos;t throw the expected message set by NPN_SetException. 
&gt; 
&gt; As far as I concerned,  this patch is the simplest solution for solving this issue for chromium/v8. I have also tried other solution, but will involve more changes even if NPAPI interface spec.

If the v8/chromium behavior is currently the same as Safari, Firefox, and Opera, then we shouldn&apos;t change our behavior. Plugin authors expect chromium&apos;s NPAPI implementation to match the other NPAPI implementors as much as possible.

If you feel there is a bug in the NPAPI specification, you&apos;re welcome to talk to plugin-futures (https://mail.mozilla.org/listinfo/plugin-futures) about it. Without plugin-futures support for changing the behavior, however, I don&apos;t think this patch is a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>514493</commentid>
    <comment_count>16</comment_count>
    <who name="Hongbo Min">hongbo.min</who>
    <bug_when>2011-12-03 06:17:06 -0800</bug_when>
    <thetext>
(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; For Safari, Firefox and Opera, they are both not using v8 as javascript engine. In this sense, this patch serves as a chromium-specific bug-fixing.  It just provides a chance to solve such an issue but depending on the implementation in browser-side. 
&gt; &gt; 
&gt; &gt; In order to make chromium throwing the correct message set by NPN_SetException, chromium itself needs to apply another patch as described at http://codereview.chromium.org/8576001/
&gt; &gt; 
&gt; &gt; I had a try on Safari/Firefox/Opera, they also can&apos;t throw the expected message set by NPN_SetException. 
&gt; &gt; 
&gt; &gt; As far as I concerned,  this patch is the simplest solution for solving this issue for chromium/v8. I have also tried other solution, but will involve more changes even if NPAPI interface spec.
&gt; 
&gt; If the v8/chromium behavior is currently the same as Safari, Firefox, and Opera, then we shouldn&apos;t change our behavior. Plugin authors expect chromium&apos;s NPAPI implementation to match the other NPAPI implementors as much as possible.

From this aspect, it makes sense that we need to match the same behavior between Safari, Firefox and chromium, etc, although it is indeed a bug. 

&gt; 
&gt; If you feel there is a bug in the NPAPI specification, you&apos;re welcome to talk to plugin-futures (https://mail.mozilla.org/listinfo/plugin-futures) about it. Without plugin-futures support for changing the behavior, however, I don&apos;t think this patch is a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883846</commentid>
    <comment_count>17</comment_count>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-05-02 11:23:50 -0700</bug_when>
    <thetext>V8 is gone from WebKit.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115502</attachid>
            <date>2011-11-16 18:14:35 -0800</date>
            <delta_ts>2011-11-25 19:05:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-72484-20111118101653.patch</filename>
            <type>text/plain</type>
            <size>2184</size>
            <attacher name="Hongbo Min">hongbo.min</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMDU0MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTExLTE3ICBIb25nYm8g
TWluICA8aG9uZ2JvLm1pbkBpbnRlbC5jb20+CisgICAgICAgIEdlbmVyaWMgZXhjZXB0aW9uIG1l
c3NhZ2UgdGhyb3duIGJ5IG5wT2JqZWN0SW52b2tlSW1wbCBtYXkgb3ZlcndyaXRlCisgICAgICAg
IHRoZSBwZW5kaW5nIGV4Y2VwdGlvbiB0aHJvd24gYnkgaW4gdGhlIHByb2Nlc3Mgb2YgZXhjdXRp
bmcgY29uc3RydWN0LworICAgICAgICBpbnZva2UvaW52b2tlRGVmYXVsdCBvbiBhbiBOUE9iamVj
dCBpbnN0YW5jZS4gCisKKyAgICAgICAgQ2hlY2sgdGhlIHJlc3VsdCB0byBkZXRlcm1pbmUgd2hl
dGhlciB0aGVyZSBpcyBhbHJlYWR5IGFuIGV4Y2VwdGlvbgorICAgICAgICB0aHJvd24gYW5kIGdp
dmUgYSBjaGFuY2UgdG8gbGV0IE5QT2JqZWN0IGltcGxlbWVudG9yIHRvIGRldGVybWluZSAKKyAg
ICAgICAgd2hpY2ggZXhjZXB0aW9uIChnZW5lcmljIHZzIHNwZWNpZmllZCkgc2hvdWxkIGdldCB0
aHJvd24gYnkgc2V0dGluZworICAgICAgICB0aGUgcmVzdWx0IE5QVmFyaWFudCB2YWx1ZSBpbiBj
YXNlIG9mIGNvbnN0cnVjdC9pbnZva2UvaW52b2tlRGVmYXVsdAorICAgICAgICBlbmNvdW50ZXIg
YW4gZXJyb3IuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03MjQ4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAgICAgICogYmluZGluZ3MvdjgvVjhOUE9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpucE9iamVjdEludm9rZUltcGwpOgorCiAyMDExLTEx
LTE2ICBNaWNoYWVsIE5vcmRtYW4gIDxtaWNoYWVsbkBnb29nbGUuY29tPgogCiAgICAgICAgIEFw
cGxpY2F0aW9uQ2FjaGUgbWFuaWZlc3Qgc2hvdWxkIHdvcmsgd2l0aCBhbnkgTUlNRSB0eXBlLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOUE9iamVjdC5jcHAJKHJldmlzaW9u
IDEwMDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzEsOCArMTMxLDE2IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gbnBPYmplY3RJbnYKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKCFyZXR2
YWwpCi0gICAgICAgIHRocm93RXJyb3IoIkVycm9yIGNhbGxpbmcgbWV0aG9kIG9uIE5QT2JqZWN0
LiIsIFY4UHJveHk6OkdlbmVyYWxFcnJvcik7CisgICAgaWYgKCFyZXR2YWwpIHsKKyAgICAgICAg
Ly8gSWYgYW4gZXhjZXB0aW9uIGlzIGFscmVhZHkgdGhyb3duIGJ5IGludm9rZS9pbnZva2VEZWZh
dWx0L2NvbnN0cnVjdCwKKyAgICAgICAgLy8gdGhlIHJlc3VsdCBoYXMgYSBib29sZWFuIHR5cGUg
YW5kIGl0cyB2YWx1ZSBzaG91bGQgYmUgdHJ1ZSwgc28gdGhlCisgICAgICAgIC8vIGdlbmVyaWMg
ZXhjZXB0aW9uIHdpbGwgYmUgaWdub3JlZCB0byBhdm9pZCBvdmVyd3JpdGluZyB0aGF0IHBlbmRp
bmcKKyAgICAgICAgLy8gZXhjZXB0aW9uLgorICAgICAgICBpZiAoTlBWQVJJQU5UX0lTX0JPT0xF
QU4ocmVzdWx0KSAmJiBOUFZBUklBTlRfVE9fQk9PTEVBTihyZXN1bHQpKQorICAgICAgICAgIFZP
SURfVE9fTlBWQVJJQU5UKHJlc3VsdCk7IC8vIFJlc3RvcmUgYmFjayB0byBWT0lEIHR5cGUKKyAg
ICAgICAgZWxzZQorICAgICAgICAgIHRocm93RXJyb3IoIkVycm9yIGNhbGxpbmcgbWV0aG9kIG9u
IE5QT2JqZWN0LiIsIFY4UHJveHk6OkdlbmVyYWxFcnJvcik7CisgICAgfQogCiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1BcmdzOyBpKyspCiAgICAgICAgIF9OUE5fUmVsZWFzZVZhcmlhbnRW
YWx1ZSgmbnBBcmdzW2ldKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116645</attachid>
            <date>2011-11-25 19:29:50 -0800</date>
            <delta_ts>2011-11-28 06:00:19 -0800</delta_ts>
            <desc>Patch Updated</desc>
            <filename>bug-72484-20111127113219.patch</filename>
            <type>text/plain</type>
            <size>2488</size>
            <attacher name="Hongbo Min">hongbo.min</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTE4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDExLTExLTI2ICBIb25nYm8g
TWluICA8aG9uZ2JvLm1pbkBpbnRlbC5jb20+CisKKyAgICAgICAgQnVnIDcyNDg0OiBbdjhdRXhj
ZXB0aW9uIHRocm93biBpbiBucE9iamVjdEludm9rZUltcGwgbWF5IG92ZXJ3cml0ZSAKKyAgICAg
ICAgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlIHRocm93biBieSBOUE5fU2V0RXhjZXB0aW9uIAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZW5lcmljIGV4Y2Vw
dGlvbiBtZXNzYWdlIHRocm93biBieSBucE9iamVjdEludm9rZUltcGwgbWF5IG92ZXJ3cml0ZQor
ICAgICAgICB0aGUgcGVuZGluZyBleGNlcHRpb24gdGhyb3duIGJ5IGluIHRoZSBwcm9jZXNzIG9m
IGV4Y3V0aW5nIGNvbnN0cnVjdC8KKyAgICAgICAgaW52b2tlL2ludm9rZURlZmF1bHQgb24gYW4g
TlBPYmplY3QgaW5zdGFuY2UuIAorCisgICAgICAgIENoZWNrIHRoZSByZXN1bHQgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhbiBleGNlcHRpb24KKyAgICAgICAgdGhyb3du
IGFuZCBnaXZlIGEgY2hhbmNlIHRvIGxldCBOUE9iamVjdCBpbXBsZW1lbnRvciB0byBkZXRlcm1p
bmUgCisgICAgICAgIHdoaWNoIGV4Y2VwdGlvbiAoZ2VuZXJpYyB2cyBzcGVjaWZpZWQpIHNob3Vs
ZCBnZXQgdGhyb3duIGJ5IHNldHRpbmcKKyAgICAgICAgdGhlIHJlc3VsdCBOUFZhcmlhbnQgdmFs
dWUgaW4gY2FzZSBvZiBjb25zdHJ1Y3QvaW52b2tlL2ludm9rZURlZmF1bHQKKyAgICAgICAgZW5j
b3VudGVyIGFuIGVycm9yLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIGl0IGRlcGVu
ZHMgb24gTlBOX1NldEV4Y2VwdGlvbiBpbXBsZW1lbnRhdGlvbiBhbmQKKyAgICAgICAgSlMgZW5n
aW5lIHVzZWQgaW4gYnJvd3Nlci4gRm9yIHY4IGVuZ2luZSwgaXQgaXMgY292ZXJlZCBieSB0aGUg
dGVzdCBpbgorICAgICAgICBodHRwOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvODU3NjAwMS8g
CisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om5wT2JqZWN0SW52b2tlSW1wbCk6CisKIDIwMTEtMTEtMjUgIEtlbnRhcm8gSGFyYSAgPGhh
cmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlZmFjdG9yaW5nIENvZGVHZW5lcmF0b3Iq
LnBtIGZvciBidWcgNzIxMzgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBP
YmplY3QuY3BwCShyZXZpc2lvbiAxMDExODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOE5QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDggKzEzMSwxNiBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0SW52CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGlmICghcmV0dmFsKQotICAgICAgICB0aHJvd0Vycm9yKCJFcnJvciBjYWxsaW5n
IG1ldGhvZCBvbiBOUE9iamVjdC4iLCBWOFByb3h5OjpHZW5lcmFsRXJyb3IpOworICAgIGlmICgh
cmV0dmFsKSB7CisgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyBhbHJlYWR5IHRocm93biBi
eSBpbnZva2UvaW52b2tlRGVmYXVsdC9jb25zdHJ1Y3QsCisgICAgICAgIC8vIHRoZSByZXN1bHQg
aGFzIGEgYm9vbGVhbiB0eXBlIGFuZCBpdHMgdmFsdWUgc2hvdWxkIGJlIHRydWUsIHNvIHRoZQor
ICAgICAgICAvLyBnZW5lcmljIGV4Y2VwdGlvbiB3aWxsIGJlIGlnbm9yZWQgdG8gYXZvaWQgb3Zl
cndyaXRpbmcgdGhhdCBwZW5kaW5nCisgICAgICAgIC8vIGV4Y2VwdGlvbi4KKyAgICAgICAgaWYg
KE5QVkFSSUFOVF9JU19CT09MRUFOKHJlc3VsdCkgJiYgTlBWQVJJQU5UX1RPX0JPT0xFQU4ocmVz
dWx0KSkKKyAgICAgICAgICBWT0lEX1RPX05QVkFSSUFOVChyZXN1bHQpOyAvLyBSZXN0b3JlIGJh
Y2sgdG8gVk9JRCB0eXBlCisgICAgICAgIGVsc2UKKyAgICAgICAgICB0aHJvd0Vycm9yKCJFcnJv
ciBjYWxsaW5nIG1ldGhvZCBvbiBOUE9iamVjdC4iLCBWOFByb3h5OjpHZW5lcmFsRXJyb3IpOwor
ICAgIH0KIAogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQXJnczsgaSsrKQogICAgICAgICBf
TlBOX1JlbGVhc2VWYXJpYW50VmFsdWUoJm5wQXJnc1tpXSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116897</attachid>
            <date>2011-11-28 22:23:08 -0800</date>
            <delta_ts>2011-11-29 09:01:55 -0800</delta_ts>
            <desc>Patch Updated 2</desc>
            <filename>bug-72484-20111130142537.patch</filename>
            <type>text/plain</type>
            <size>2594</size>
            <attacher name="Hongbo Min">hongbo.min</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTE4NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDExLTExLTI2ICBIb25nYm8g
TWluICA8aG9uZ2JvLm1pbkBpbnRlbC5jb20+CisKKyAgICAgICAgQnVnIDcyNDg0OiBbdjhdRXhj
ZXB0aW9uIHRocm93biBpbiBucE9iamVjdEludm9rZUltcGwgbWF5IG92ZXJ3cml0ZSAKKyAgICAg
ICAgdGhlIGV4Y2VwdGlvbiBtZXNzYWdlIHRocm93biBieSBOUE5fU2V0RXhjZXB0aW9uIAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzI0ODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBHZW5lcmljIGV4Y2Vw
dGlvbiBtZXNzYWdlIHRocm93biBieSBucE9iamVjdEludm9rZUltcGwgbWF5IG92ZXJ3cml0ZQor
ICAgICAgICB0aGUgcGVuZGluZyBleGNlcHRpb24gdGhyb3duIGJ5IGluIHRoZSBwcm9jZXNzIG9m
IGV4Y3V0aW5nIGNvbnN0cnVjdC8KKyAgICAgICAgaW52b2tlL2ludm9rZURlZmF1bHQgb24gYW4g
TlBPYmplY3QgaW5zdGFuY2UuIAorCisgICAgICAgIENoZWNrIHRoZSByZXN1bHQgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgdGhlcmUgaXMgYWxyZWFkeSBhbiBleGNlcHRpb24KKyAgICAgICAgdGhyb3du
IGFuZCBnaXZlIGEgY2hhbmNlIHRvIGxldCBOUE9iamVjdCBpbXBsZW1lbnRvciB0byBkZXRlcm1p
bmUgCisgICAgICAgIHdoaWNoIGV4Y2VwdGlvbiAoZ2VuZXJpYyB2cyBzcGVjaWZpZWQpIHNob3Vs
ZCBnZXQgdGhyb3duIGJ5IHNldHRpbmcKKyAgICAgICAgdGhlIHJlc3VsdCBOUFZhcmlhbnQgdmFs
dWUgaW4gY2FzZSBvZiBjb25zdHJ1Y3QvaW52b2tlL2ludm9rZURlZmF1bHQKKyAgICAgICAgZW5j
b3VudGVyIGFuIGVycm9yLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIGl0IGRlcGVu
ZHMgb24gTlBOX1NldEV4Y2VwdGlvbiBpbXBsZW1lbnRhdGlvbiBhbmQKKyAgICAgICAgSlMgZW5n
aW5lIHVzZWQgaW4gYnJvd3Nlci4gRm9yIHY4IGVuZ2luZSwgaXQgaXMgY292ZXJlZCBieSB0aGUg
dGVzdCBpbgorICAgICAgICBodHRwOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvODU3NjAwMS8g
CisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5QT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om5wT2JqZWN0SW52b2tlSW1wbCk6CisKIDIwMTEtMTEtMjUgIEtlbnRhcm8gSGFyYSAgPGhh
cmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlZmFjdG9yaW5nIENvZGVHZW5lcmF0b3Iq
LnBtIGZvciBidWcgNzIxMzgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4TlBP
YmplY3QuY3BwCShyZXZpc2lvbiAxMDExODQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOE5QT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDggKzEzMSwxNyBAQCBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5wT2JqZWN0SW52CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGlmICghcmV0dmFsKQotICAgICAgICB0aHJvd0Vycm9yKCJFcnJvciBjYWxsaW5n
IG1ldGhvZCBvbiBOUE9iamVjdC4iLCBWOFByb3h5OjpHZW5lcmFsRXJyb3IpOworICAgIGlmICgh
cmV0dmFsKSB7CisgICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiBpcyBhbHJlYWR5IHRocm93biBi
eSBpbnZva2UvaW52b2tlRGVmYXVsdC9jb25zdHJ1Y3QsCisgICAgICAgIC8vIG5hdGl2ZSBtZXRo
b2Qgd3JpdHRlciBpcyBhbGxvd2VkIHRvIHVzZSB0aGUgcmVzdWx0IGFzIGFuIGluZGljYXRvcgor
ICAgICAgICAvLyB0byB0ZWxsIHY4IGVuZ2luZSB0aGF0IHRoZXJlIGlzIGFscmVhZHkgYSBwZW5k
aW5nIGV4Y2VwdGlvbiBieSAKKyAgICAgICAgLy8gc2V0dGluZyBpdCBhcyBib29sZWFuIHR5cGUg
d2l0aCB0cnVlIHZhbHVlLiBVbmRlciB0aGlzIGNhc2UsIHRoZQorICAgICAgICAvLyBnZW5lcmFs
IGV4Y2VwdGlvbiB3aWxsIG5vdCBiZSB0aHJvd24gYWdhaW4uCisgICAgICAgIGlmIChOUFZBUklB
TlRfSVNfQk9PTEVBTihyZXN1bHQpICYmIE5QVkFSSUFOVF9UT19CT09MRUFOKHJlc3VsdCkpCisg
ICAgICAgICAgVk9JRF9UT19OUFZBUklBTlQocmVzdWx0KTsgLy8gUmVzdG9yZSBiYWNrIHRvIFZP
SUQgdHlwZQorICAgICAgICBlbHNlCisgICAgICAgICAgdGhyb3dFcnJvcigiRXJyb3IgY2FsbGlu
ZyBtZXRob2Qgb24gTlBPYmplY3QuIiwgVjhQcm94eTo6R2VuZXJhbEVycm9yKTsKKyAgICB9CiAK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFyZ3M7IGkrKykKICAgICAgICAgX05QTl9SZWxl
YXNlVmFyaWFudFZhbHVlKCZucEFyZ3NbaV0pOwo=
</data>
<flag name="review"
          id="116188"
          type_id="1"
          status="-"
          setter="japhet"
    />
          </attachment>
      

    </bug>

</bugzilla>