<?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>54816</bug_id>
          
          <creation_ts>2011-02-19 19:49:36 -0800</creation_ts>
          <short_desc>style.borderSpacing always returns empty string</short_desc>
          <delta_ts>2011-03-06 16:23:04 -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>Tables</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Daniel Bates">dbates</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>354234</commentid>
    <comment_count>0</comment_count>
      <attachid>83087</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-02-19 19:49:36 -0800</bug_when>
    <thetext>Created attachment 83087
Example

Consider the following HTML snippet:

&lt;table id=&quot;table&quot; style=&quot;border-spacing: 4px 5px&quot;&gt;
    &lt;tr&gt;&lt;td&gt;Cell 1&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

Then document.getElementById(&quot;table&quot;).borderSpacing should be equal to the string &quot;4px 5px&quot;. But document.getElementById(&quot;table&quot;).borderSpacing == &quot;&quot; (as of r79140).

Notice that both Mac Firefox 3.6.13 and IE 8 return the string &quot;4px 5px&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360560</commentid>
    <comment_count>1</comment_count>
      <attachid>84366</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-03-01 21:52:08 -0800</bug_when>
    <thetext>Created attachment 84366
Patch and layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360563</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-01 21:54:39 -0800</bug_when>
    <thetext>Attachment 84366 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/WebCore/css/CSSMutableStyleDeclaration.cpp:124:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360564</commentid>
    <comment_count>3</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-03-01 21:57:29 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; [...]
&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:124:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]

We should fix the style for the whole switch block. I suggest we do this in a separate bug so as to demarcate the actual changes for this bug from the style correction for the switch block.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>360884</commentid>
    <comment_count>4</comment_count>
      <attachid>84366</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-02 10:18:26 -0800</bug_when>
    <thetext>Comment on attachment 84366
Patch and layout test

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

I’d also suggest having the test case cover computed style too, even though that code probably already handles this correctly.

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:267
&gt; +    RefPtr&lt;CSSValue&gt; horizontalValue = getPropertyCSSValue(properties[0]);
&gt; +    RefPtr&lt;CSSValue&gt; verticalValue = getPropertyCSSValue(properties[1]);

It’s probably better to just call getPropertyValue instead of calling getPropertyCSSValue and then separately calling cssText.

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:270
&gt; +    if (!horizontalValue || !verticalValue)
&gt; +        return String();

Is this correct? The test case doesn&apos;t cover this.

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:274
&gt; +    if (result != verticalValue-&gt;cssText())
&gt; +        result += &quot; &quot; + verticalValue-&gt;cssText();

Appending to strings is inefficient. The code in this file is consistently less efficient than it can be. The efficient way to combine two strings into a new string with a character between them is to use the makeString function from the StringConcatenate.h header. So assuming that horizontalValue and verticalValue are strings, not CSSValue objects, the code would be:

    if (horizontalValue == verticalValue)
        return horizontalValue;
    return makeString(horizontalValue, &apos; &apos;, verticalValue);

The rest of the file could also be fixed so it does less of the extremely-inefficient string concatenation. For building up a string a piece at a time, the best approach is to probably use either StringBuilder or Vector&lt;UChar&gt;.

&gt; Source/WebCore/css/CSSMutableStyleDeclaration.h:157
&gt; +    String borderSpacingValue(const int* properties) const;

I think const int properties[2] would be better and clearer here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363150</commentid>
    <comment_count>5</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-03-06 16:15:47 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 84366 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=84366&amp;action=review
&gt; 
&gt; I’d also suggest having the test case cover computed style too, even though that code probably already handles this correctly.

Will add test cases for this.

&gt; 
&gt; &gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:267
&gt; &gt; +    RefPtr&lt;CSSValue&gt; horizontalValue = getPropertyCSSValue(properties[0]);
&gt; &gt; +    RefPtr&lt;CSSValue&gt; verticalValue = getPropertyCSSValue(properties[1]);
&gt; 
&gt; It’s probably better to just call getPropertyValue instead of calling getPropertyCSSValue and then separately calling cssText.

I didn&apos;t make this change since it would add an additional function call compared to the logic proposed in the patch. Notice CSSMutableStyleDeclaration::getPropertyValue() calls CSSMutableStyleDeclaration::getPropertyCSSValue() and then CSSValue::cssText(). And the patch proposes calling CSSMutableStyleDeclaration::getPropertyCSSValue() directly.

&gt; 
&gt; &gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:270
&gt; &gt; +    if (!horizontalValue || !verticalValue)
&gt; &gt; +        return String();
&gt; 
&gt; Is this correct? The test case doesn&apos;t cover this.

This is correct and I will include test cases for this. Moreover, we can strengthen this to be:

    if (!horizontalValue)
        return String();
    ASSERT(verticalValue); // By &lt;http://www.w3.org/TR/CSS21/tables.html#separated-borders&gt;.

&gt; 
&gt; &gt; Source/WebCore/css/CSSMutableStyleDeclaration.cpp:274
&gt; &gt; +    if (result != verticalValue-&gt;cssText())
&gt; &gt; +        result += &quot; &quot; + verticalValue-&gt;cssText();
&gt; 
&gt; Appending to strings is inefficient. The code in this file is consistently less efficient than it can be. The efficient way to combine two strings into a new string with a character between them is to use the makeString function from the StringConcatenate.h header. So assuming that horizontalValue and verticalValue are strings, not CSSValue objects, the code would be:
&gt; 
&gt;     if (horizontalValue == verticalValue)
&gt;         return horizontalValue;
&gt;     return makeString(horizontalValue, &apos; &apos;, verticalValue);
&gt; 

Will change before landing.

&gt; The rest of the file could also be fixed so it does less of the extremely-inefficient string concatenation. For building up a string a piece at a time, the best approach is to probably use either StringBuilder or Vector&lt;UChar&gt;.

I suggest we look into this as part of a separate bug. I filed bug #55851 for this issue.

&gt; 
&gt; &gt; Source/WebCore/css/CSSMutableStyleDeclaration.h:157
&gt; &gt; +    String borderSpacingValue(const int* properties) const;
&gt; 
&gt; I think const int properties[2] would be better and clearer here.

Will change before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363151</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2011-03-06 16:23:04 -0800</bug_when>
    <thetext>Committed r80439: &lt;http://trac.webkit.org/changeset/80439&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>83087</attachid>
            <date>2011-02-19 19:49:36 -0800</date>
            <delta_ts>2011-02-19 19:49:36 -0800</delta_ts>
            <desc>Example</desc>
            <filename>example.html</filename>
            <type>text/html</type>
            <size>480</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">PHRhYmxlIGlkPSJ0YWJsZSIgc3R5bGU9ImJvcmRlci1zcGFjaW5nOiA0cHggNXB4OyBib3JkZXI6
IDFweCBzb2xpZCBibHVlIC8qIGZvciB2aXNpYmxlIGluc3BlY3Rpb24gKi8iPgogICAgPHRyPjx0
ZD5DZWxsIDE8L3RkPjwvdHI+CjwvdGFibGU+CjxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgo8c2Ny
aXB0PgogICAgbG9nKCJkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRhYmxlXCIpLnN0eWxlLmJv
cmRlclNwYWNpbmcgPSBcIiIgKyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFibGUiKS5zdHls
ZS5ib3JkZXJTcGFjaW5nICsgIlwiIChzaG91bGQgYmUgXCI0cHggNXB4XCIpLiIpOwoKICAgIGZ1
bmN0aW9uIGxvZyhtZXNzYWdlKQogICAgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSAr
ICJcbiIpKTsKICAgIH0KPC9zY3JpcHQ+
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>84366</attachid>
            <date>2011-03-01 21:52:08 -0800</date>
            <delta_ts>2011-03-02 10:18:26 -0800</delta_ts>
            <desc>Patch and layout test</desc>
            <filename>bug-54816-20110301215206.patch</filename>
            <type>text/plain</type>
            <size>9348</size>
            <attacher name="Daniel Bates">dbates</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwMDkwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDMtMDEgIERhbmllbCBC
YXRlcyAgPGRiYXRlc0ByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIHN0eWxlLmJvcmRlclNwYWNpbmcgYWx3YXlzIHJldHVybnMgZW1wdHkg
c3RyaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01
NDgxNgorCisgICAgICAgIFRlYWNoIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXRQcm9w
ZXJ0eVZhbHVlKCkgaG93IHRvIHJlY29uc3RpdHV0ZQorICAgICAgICB0aGUgdmFsdWUgZm9yIGJv
cmRlci1zcGFjaW5nIGZyb20gdGhlIHZhbHVlIG9mIHRoZSBXZWJLaXQgaW50ZXJuYWwgQ1NTCisg
ICAgICAgIHByb3BlcnR5IC13ZWJraXQtYm9yZGVyLWhvcml6b250YWwtc3BhY2luZyBhbmQgLXdl
YmtpdC1ib3JkZXItdmVydGljYWwtc3BhY2luZy4KKworICAgICAgICBUaGUgQ1NTIHByb3BlcnR5
IGJvcmRlci1zcGFjaW5nIGRlc2NyaWJlcyB0aGUgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYm9y
ZGVyCisgICAgICAgIHNwYWNpbmcgZm9yIGFuIEhUTUwgVGFibGUgZWxlbWVudC4gTm90aWNlLCBX
ZWJLaXQgaW50ZXJuYWxseSByZXByZXNlbnRzIHRoZSB2YWx1ZQorICAgICAgICBvZiB0aGlzIHBy
b3BlcnR5IGFzIHR3byBwcm9wZXJ0aWVzOiAtd2Via2l0LWJvcmRlci1ob3Jpem9udGFsLXNwYWNp
bmcgYW5kCisgICAgICAgIC13ZWJraXQtYm9yZGVyLXZlcnRpY2FsLXNwYWNpbmcsIGZvciB0aGUg
aG9yaXpvbnRhbCBhbmQgdmVydGljYWwgYm9yZGVyIHNwYWNpbmcsCisgICAgICAgIHJlc3BlY3Rp
dmVseS4gQW5kIFdlYktpdCBkb2Vzbid0IGtub3cgdG8gcmVjb25zdGl0dXRlIHRoZXNlIGludGVy
bmFsIHByb3BlcnRpZXMuCisgICAgICAgIFRoZXJlZm9yZSBzdHlsZS5ib3JkZXJTcGFjaW5nIGFs
d2F5cyByZXR1cm5zIHRoZSBlbXB0eSBzdHJpbmcuCisKKyAgICAgICAgVGVzdDogZmFzdC9jc3Mv
dGFibGUtYm9yZGVyLXNwYWNpbmcuaHRtbAorCisgICAgICAgICogY3NzL0NTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uOjpnZXRQcm9wZXJ0eVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uOjpib3JkZXJTcGFjaW5nVmFsdWUpOiBBZGRlZC4KKyAgICAgICAgKiBj
c3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaDoKKwogMjAxMS0wMy0wMSAgU2hlcmlmZiBC
b3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjgwMDc5LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiA3OTgzNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNiArMSw3IEBACiAvKgogICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTA4LDYgKzEwOSwxMCBAQCBTdHJpbmcgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OmdldFByCiAKICAgICAvLyBTaG9ydGhhbmQgYW5kIDQtdmFsdWVz
IHByb3BlcnRpZXMKICAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJvcmRlclNwYWNpbmc6IHsKKyAgICAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVz
WzJdID0geyBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCBDU1NQcm9w
ZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZyB9OworICAgICAgICAgICAgcmV0dXJuIGJv
cmRlclNwYWNpbmdWYWx1ZShwcm9wZXJ0aWVzKTsKKyAgICAgICAgfQogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uOiB7CiAgICAgICAgICAgICAvLyBGSVhNRTogSXMg
dGhpcyBjb3JyZWN0PyBUaGUgY29kZSBpbiBjc3NwYXJzZXIuY3BwIGlzIGNvbmZ1c2luZwogICAg
ICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5QmFja2dyb3Vu
ZFBvc2l0aW9uWCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZIH07CkBAIC0yNTYsNiAr
MjYxLDIwIEBAIFN0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Z2V0UHIKICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiB9CiAKK1N0cmluZyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6
Ym9yZGVyU3BhY2luZ1ZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcykgY29uc3QKK3sKKyAgICBS
ZWZQdHI8Q1NTVmFsdWU+IGhvcml6b250YWxWYWx1ZSA9IGdldFByb3BlcnR5Q1NTVmFsdWUocHJv
cGVydGllc1swXSk7CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2ZXJ0aWNhbFZhbHVlID0gZ2V0UHJv
cGVydHlDU1NWYWx1ZShwcm9wZXJ0aWVzWzFdKTsKKworICAgIGlmICghaG9yaXpvbnRhbFZhbHVl
IHx8ICF2ZXJ0aWNhbFZhbHVlKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICBTdHJp
bmcgcmVzdWx0ID0gaG9yaXpvbnRhbFZhbHVlLT5jc3NUZXh0KCk7CisgICAgaWYgKHJlc3VsdCAh
PSB2ZXJ0aWNhbFZhbHVlLT5jc3NUZXh0KCkpCisgICAgICAgIHJlc3VsdCArPSAiICIgKyB2ZXJ0
aWNhbFZhbHVlLT5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogU3RyaW5nIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjpnZXQ0VmFsdWVzKGNvbnN0IGludCogcHJvcGVydGll
cykgY29uc3QKIHsKICAgICAvLyBBc3N1bWUgdGhlIHByb3BlcnRpZXMgYXJlIGluIHRoZSB1c3Vh
bCBvcmRlciB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gNzk4MzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCw3IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIGdldENvbW1v
blZhbHVlKGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bWJlcikgY29uc3Q7CiAgICAgU3Ry
aW5nIGdldExheWVyZWRTaG9ydGhhbmRWYWx1ZShjb25zdCBpbnQqIHByb3BlcnRpZXMsIHVuc2ln
bmVkIG51bWJlcikgY29uc3Q7CiAgICAgU3RyaW5nIGdldDRWYWx1ZXMoY29uc3QgaW50KiBwcm9w
ZXJ0aWVzKSBjb25zdDsKKyAgICBTdHJpbmcgYm9yZGVyU3BhY2luZ1ZhbHVlKGNvbnN0IGludCog
cHJvcGVydGllcykgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBzZXRQcm9wZXJ0eUludGVybmFsKGNv
bnN0IENTU1Byb3BlcnR5JiwgQ1NTUHJvcGVydHkqIHNsb3QgPSAwKTsKICAgICBib29sIHJlbW92
ZVNob3J0aGFuZFByb3BlcnR5KGludCBwcm9wZXJ0eUlELCBib29sIG5vdGlmeUNoYW5nZWQpOwpJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gODAwOTApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMS0wMy0wMSAgRGFuaWVsIEJhdGVzICA8ZGJh
dGVzQHJpbS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgc3R5bGUuYm9yZGVyU3BhY2luZyBhbHdheXMgcmV0dXJucyBlbXB0eSBzdHJpbmcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU0ODE2CisKKyAg
ICAgICAgVGVzdHMgdGhhdCBzdHlsZS5ib3JkZXJTcGFjaW5nIHJldHVybnMgdGhlIHZhbHVlIHNw
ZWNpZmllZCBpbiB0aGUgc3R5bGUgYXR0cmlidXRlLgorCisgICAgICAgICogZmFzdC9jc3MvdGFi
bGUtYm9yZGVyLXNwYWNpbmctZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nz
cy90YWJsZS1ib3JkZXItc3BhY2luZy5odG1sOiBBZGRlZC4KKwogMjAxMS0wMy0wMSAgSm9zZXBo
IFBlY29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgZXhw
ZWN0YXRpb25zIHVwZGF0ZS4gVGhpcyBpcyBhIGZvbGxvdy11cCB0byByODAwNjEuCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2Nzcy90YWJsZS1ib3JkZXItc3BhY2luZy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jc3MvdGFibGUtYm9yZGVyLXNwYWNpbmctZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jc3MvdGFibGUtYm9y
ZGVyLXNwYWNpbmctZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitU
aGlzIHRlc3QgY2hlY2tzIHRoYXQgc3R5bGUuYm9yZGVyU3BhY2luZyByZXR1cm5zIHRoZSB2YWx1
ZSBzcGVjaWZpZWQgaW4gdGhlIHN0eWxlIGF0dHJpYnV0ZS4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImluZmVyLXZlcnRpY2Fs
LWJvcmRlci1zcGFjaW5nIikuc3R5bGUuYm9yZGVyU3BhY2luZyBpcyAiNHB4IgorUEFTUyBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiZXhwbGljaXQtYm9yZGVyLXNwYWNpbmciKS5zdHlsZS5ib3Jk
ZXJTcGFjaW5nIGlzICI0cHggNXB4IgorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY3NzL3RhYmxlLWJvcmRlci1zcGFjaW5nLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jc3MvdGFibGUtYm9yZGVyLXNwYWNpbmcuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvY3NzL3RhYmxlLWJvcmRlci1zcGFjaW5nLmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsOTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5
bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSIuLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KKword2luZG93Lm9ubG9hZCA9IHJ1blRlc3RzOworCitpZiAoIVN0
cmluZy5wcm90b3R5cGUudHJpbSkgeworICAgIC8vIEFzc3VtZSB0aGlzIHNjcmlwdCBpcyBiZWlu
ZyBleGVjdXRlZCBpbiBJbnRlcm5ldCBFeHBsb3Jlci4KKyAgICBTdHJpbmcucHJvdG90eXBlLnRy
aW0gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMucmVwbGFjZSgvXlxzKy8sICcn
KS5yZXBsYWNlKC9ccyskLywgJycpOworICAgIH0KK30KKworZnVuY3Rpb24gcnVuVGVzdHMoKQor
eworICAgIHRlc3RJbmZlcnJlZFZlcnRpY2FsQm9yZGVyU3BhY2luZygpOworICAgIHRlc3RFeHBs
aWNpdEJvcmRlclNwYWNpbmcoKTsKKworICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRlc3QtY29udGFpbmVyIikpOworICAgIGRlYnVnKCc8YnIg
Lz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01QTEVURTwvc3Bhbj4nKTsKK30KKworZnVuY3Rp
b24gdGVzdEluZmVycmVkVmVydGljYWxCb3JkZXJTcGFjaW5nKCkKK3sKKyAgICB2YXIgc3R5bGVB
dHRyID0gc3R5bGVBdHRyaWJ1dGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImluZmVyLXZlcnRp
Y2FsLWJvcmRlci1zcGFjaW5nIikpOworICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygnZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImluZmVyLXZlcnRpY2FsLWJvcmRlci1zcGFjaW5nIikuc3R5bGUu
Ym9yZGVyU3BhY2luZycsIHBhcnNlQ1NTVGV4dEZvclByb3BlcnR5VmFsdWUoc3R5bGVBdHRyLCAi
Ym9yZGVyLXNwYWNpbmciKSk7Cit9CisKK2Z1bmN0aW9uIHRlc3RFeHBsaWNpdEJvcmRlclNwYWNp
bmcoKQoreworICAgIHZhciBzdHlsZUF0dHIgPSBzdHlsZUF0dHJpYnV0ZShkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiZXhwbGljaXQtYm9yZGVyLXNwYWNpbmciKSk7CisgICAgc2hvdWxkQmVFcXVh
bFRvU3RyaW5nKCdkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXhwbGljaXQtYm9yZGVyLXNwYWNp
bmciKS5zdHlsZS5ib3JkZXJTcGFjaW5nJywgcGFyc2VDU1NUZXh0Rm9yUHJvcGVydHlWYWx1ZShz
dHlsZUF0dHIsICJib3JkZXItc3BhY2luZyIpKTsKK30KKworZnVuY3Rpb24gc3R5bGVBdHRyaWJ1
dGUoZWxlbWVudCkKK3sKKyAgICB2YXIgcmVzdWx0ID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoInN0
eWxlIik7CisgICAgaWYgKHR5cGVvZihyZXN1bHQpID09PSAib2JqZWN0IikgeworICAgICAgICAv
LyBBc3N1bWUgdGhpcyBzY3JpcHQgaXMgYmVpbmcgZXhlY3V0ZWQgaW4gSW50ZXJuZXQgRXhwbG9y
ZXIuCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5jc3NUZXh0OworICAgIH0KKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitmdW5jdGlvbiBwYXJzZUNTU1RleHRGb3JQcm9wZXJ0eVZhbHVlKGNzc1Rl
eHQsIHByb3BlcnR5TmFtZSkKK3sKKyAgICAvLyBTb21lIGNvbnN0YW50cy4gV2UgY2FuJ3QgdXNl
ICJjb25zdCIgc2luY2UgSUUgKGFzIG9mIDguMCkgZG9lc24ndCBzdXBwb3J0IGl0LgorICAgIHZh
ciBDb2xvbiA9ICc6JzsKKyAgICB2YXIgU2VtaWNvbG9uID0gJzsnOworICAgIHZhciBOb3RGb3Vu
ZCA9IC0xOworCisgICAgLy8gTm90ZSwgQ1NTIHByb3BlcnR5IG5hbWVzIGFyZSBjYXNlLWluc2Vu
c2l0aXZlLCBidXQgaXRzIGNvcnJlc3BvbmRpbmcgdmFsdWUgY2FuIGJlIGNhc2UtCisgICAgLy8g
c2Vuc2l0aXZlIChlLmcuIGZvbnQtZmFtaWx5KSBieSBzZWN0aW9uIDQuMS4zIG9mIHRoZSBDU1Mg
Mi4xIHNwZWMgPGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNjaGFyYWN0
ZXJzPi4KKyAgICB2YXIgY3NzVGV4dExvd2VyQ2FzZSA9IGNzc1RleHQudG9Mb3dlckNhc2UoKTsK
KyAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnRvTG93ZXJDYXNlKCk7CisKKyAg
ICB2YXIgc3RhcnRPZlByb3BlcnR5TmFtZSA9IGNzc1RleHRMb3dlckNhc2UuaW5kZXhPZihwcm9w
ZXJ0eU5hbWUpOworICAgIGlmIChzdGFydE9mUHJvcGVydHlOYW1lID09PSBOb3RGb3VuZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIHZhciBkZWxpbWl0ZXIgPSBjc3NUZXh0TG93ZXJDYXNlLmluZGV4
T2YoQ29sb24sIHN0YXJ0T2ZQcm9wZXJ0eU5hbWUpOworICAgIGlmIChkZWxpbWl0ZXIgPT09IE5v
dEZvdW5kKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNzc1RleHRMb3dlckNhc2Uuc3Vic3Ry
KHN0YXJ0T2ZQcm9wZXJ0eU5hbWUsIGRlbGltaXRlciAtIHN0YXJ0T2ZQcm9wZXJ0eU5hbWUpLnRy
aW0oKSAhPT0gcHJvcGVydHlOYW1lKQorICAgICAgICByZXR1cm47CisgICAgdmFyIHN0YXJ0T2ZQ
cm9wZXJ0eVZhbHVlID0gZGVsaW1pdGVyICsgMTsKKyAgICB2YXIgZW5kT2ZSdWxlID0gY3NzVGV4
dExvd2VyQ2FzZS5pbmRleE9mKFNlbWljb2xvbiwgc3RhcnRPZlByb3BlcnR5VmFsdWUpOworICAg
IHJldHVybiBjc3NUZXh0LnN1YnN0cihzdGFydE9mUHJvcGVydHlWYWx1ZSwgZW5kT2ZSdWxlID09
PSBOb3RGb3VuZCA/IGNzc1RleHQubGVuZ3RoIDogZW5kT2ZSdWxlIC0gc3RhcnRPZlByb3BlcnR5
VmFsdWUpLnRyaW0oKTsgLy8gUHJlc2VydmUgY2FzZS1zZW5zaXRpdml0eSBvZiB0aGUgcHJvcGVy
dHkgdmFsdWUuCit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxwIGlkPSJkZXNj
cmlwdGlvbiI+PC9wPgorICAgIDxkaXYgaWQ9InRlc3QtY29udGFpbmVyIj4KKyAgICAgICAgPHRh
YmxlIGlkPSJpbmZlci12ZXJ0aWNhbC1ib3JkZXItc3BhY2luZyIgc3R5bGU9ImJvcmRlci1zcGFj
aW5nOiA0cHgiPgorICAgICAgICAgICAgPHRyPjx0ZD5JbmZlciB2ZXJ0aWNhbCBib3JkZXIgc3Bh
Y2luZzwvdGQ+PC90cj4KKyAgICAgICAgPC90YWJsZT4KKyAgICAgICAgPHRhYmxlIGlkPSJleHBs
aWNpdC1ib3JkZXItc3BhY2luZyIgc3R5bGU9ImJvcmRlci1zcGFjaW5nOiA0cHggNXB4Ij4KKyAg
ICAgICAgICAgIDx0cj48dGQ+RXhwbGljaXQgdmVydGljYWwgYW5kIGhvcml6b250YWwgYm9yZGVy
IHNwYWNpbmc8L3RkPjwvdHI+CisgICAgICAgIDwvdGFibGU+CisgICAgPC9kaXY+CisgICAgPGRp
diBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPHNjcmlwdD4KKyAgICAgICAgZGVzY3JpcHRpb24o
IlRoaXMgdGVzdCBjaGVja3MgdGhhdCBzdHlsZS5ib3JkZXJTcGFjaW5nIHJldHVybnMgdGhlIHZh
bHVlIHNwZWNpZmllZCBpbiB0aGUgc3R5bGUgYXR0cmlidXRlLiIpOworICAgICAgICB2YXIgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgICA8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="76342"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>