<?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>115848</bug_id>
          
          <creation_ts>2013-05-08 22:11:05 -0700</creation_ts>
          <short_desc>Make TextCodecICU not depend on TextEncoding</short_desc>
          <delta_ts>2013-05-11 16:18:20 -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 Misc.</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>886596</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-08 22:11:05 -0700</bug_when>
    <thetext>TextEncoding is a WebCore concept that builds on TextCodec, which is a platform API wrapper, so using the former in TextCodecICU is confusing. It&apos;s used for two reasons:

1. Passing an encoding as TextEncoding guarantees that the encoding name has been already canonicalized.

2. We use TextEncoding::displayString() to tweak Asian encoders, so that they have desired behavior with backslash. I think that even though the string transformation is the same in both cases, using displayString for this is conceptually unsound.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886597</commentid>
    <comment_count>1</comment_count>
      <attachid>201135</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-08 22:14:16 -0700</bug_when>
    <thetext>Created attachment 201135
proposed patch

I&apos;m looking into this because I plan to add an ICU codec name pointer to TextCodecICU for &lt;rdar://problem/13823864&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886599</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-05-08 22:15:36 -0700</bug_when>
    <thetext>Attachment 201135 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCore/platform/text/TextCodecICU.cpp&apos;, u&apos;Source/WebCore/platform/text/TextCodecICU.h&apos;]&quot; exit_code: 1
Source/WebCore/platform/text/TextCodecICU.cpp:339:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 3 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>886703</commentid>
    <comment_count>3</comment_count>
      <attachid>201135</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-05-09 01:46:11 -0700</bug_when>
    <thetext>Comment on attachment 201135
proposed patch

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

&gt; Source/WebCore/platform/text/TextCodecICU.cpp:62
&gt; +    // TextEncoding name is always atomic, so the string is never deleted.

I am a little confused by &quot;atomic&quot; here. What do you mean?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>886887</commentid>
    <comment_count>4</comment_count>
      <attachid>201135</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-09 08:45:22 -0700</bug_when>
    <thetext>Comment on attachment 201135
proposed patch

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

&gt;&gt; Source/WebCore/platform/text/TextCodecICU.cpp:62
&gt;&gt; +    // TextEncoding name is always atomic, so the string is never deleted.
&gt; 
&gt; I am a little confused by &quot;atomic&quot; here. What do you mean?

TextEncodingRegistry has a map for encodings, see atomicCanonicalTextEncodingName().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887684</commentid>
    <comment_count>5</comment_count>
      <attachid>201135</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-10 17:22:57 -0700</bug_when>
    <thetext>Comment on attachment 201135
proposed patch

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

&gt; Source/WebCore/platform/text/TextCodecICU.cpp:32
&gt; +#include &quot;TextEncodingRegistry.h&quot;

Why is this include needed?

&gt;&gt;&gt; Source/WebCore/platform/text/TextCodecICU.cpp:62
&gt;&gt;&gt; +    // TextEncoding name is always atomic, so the string is never deleted.
&gt;&gt; 
&gt;&gt; I am a little confused by &quot;atomic&quot; here. What do you mean?
&gt; 
&gt; TextEncodingRegistry has a map for encodings, see atomicCanonicalTextEncodingName().

Maybe word more like this?

    // TextEncoding name is always one from atomicCanonicalTextEncodingName, guaranteed to never be deleted.

&gt; Source/WebCore/platform/text/TextCodecICU.cpp:230
&gt; -    const char* name = m_encoding.name();
&gt; -    m_needsGBKFallbacks = name[0] == &apos;G&apos; &amp;&amp; name[1] == &apos;B&apos; &amp;&amp; name[2] == &apos;K&apos; &amp;&amp; !name[3];
&gt; +    m_needsGBKFallbacks = m_encodingName[0] == &apos;G&apos; &amp;&amp; m_encodingName[1] == &apos;B&apos; &amp;&amp; m_encodingName[2] == &apos;K&apos; &amp;&amp; !m_encodingName[3];

Seems to be a slight decrease in readability. The original author (me) thought that using a local made it more readable. It wasn’t performance optimization, but expression readability optimization.

&gt; Source/WebCore/platform/text/TextCodecICU.cpp:437
&gt; +    if (shouldShowBackslashAsCurrencySymbolIn(m_encodingName)) {

Why not optimize further by searching for &apos;\\&apos; and not making a copy if there is no &apos;\\&apos; character?

&gt; Source/WebCore/platform/text/TextCodecICU.cpp:439
&gt; +        copy.append(characters, length);
&gt; +        copy.replace(&apos;\\&apos;, 0xA5);

This copies the characters twice. Instead, we could just use Vector&lt;UChar&gt; and modify the copy in place.

&gt; Source/WebCore/platform/text/TextCodecICU.h:45
&gt; +        TextCodecICU(const char* encoding);

Maybe mark this explicit?

&gt; Source/WebCore/platform/text/TextCodecICU.h:59
&gt; +        const char* m_encodingName;

Maybe even const char* const?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887745</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-05-10 22:45:20 -0700</bug_when>
    <thetext>&gt;&gt; +#include &quot;TextEncodingRegistry.h&quot;
&gt;
&gt; Why is this include needed?

We use shouldShowBackslashAsCurrencySymbolIn() that&apos;s declared in this header.

&gt; Seems to be a slight decrease in readability. The original author (me) thought that using a local made it 
&gt; more readable. It wasn’t performance optimization, but expression readability optimization.

For reference, this change was &lt;http://trac.webkit.org/changeset/21227/trunk/WebCore/platform/TextCodecICU.cpp&gt;. Before the change, the code would implicitly enumerate non-base codecs just to construct TextEncoding(&quot;GBK&quot;). Interestingly, that&apos;s a historic example of why it&apos;s undesirable to use TextEncoding in TextCodecICU.cpp.

I&apos;m unsure why we can&apos;t just use strcmp, and in fact, I have a local patch that moves this code, and changes it to use strcmp.

Made the other suggested changes, except for optimization ideas - this is just encode(), which is probably not worth any added risk.

Committed &lt;http://trac.webkit.org/changeset/149924&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>887854</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-11 16:18:20 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; Seems to be a slight decrease in readability. The original author (me) thought that using a local made it 
&gt; &gt; more readable. It wasn’t performance optimization, but expression readability optimization.
&gt; 
&gt; For reference, this change was &lt;http://trac.webkit.org/changeset/21227/trunk/WebCore/platform/TextCodecICU.cpp&gt;. Before the change, the code would implicitly enumerate non-base codecs just to construct TextEncoding(&quot;GBK&quot;). Interestingly, that&apos;s a historic example of why it&apos;s undesirable to use TextEncoding in TextCodecICU.cpp.
&gt; 
&gt; I&apos;m unsure why we can&apos;t just use strcmp

I think that when I wrote this I thought that the four explicit comparisons would be faster than a strcmp. Depends how aggressive compilers are at optimizing strcmp, particularly when a string constant is involved. And also whether code size or speed is more important.

For readability, I think strcmp and memcmp are some of the worst functions. Remembering that &quot;0 means equal&quot; is confusing enough that we made an exception to our &quot;== 0&quot; rule for it, an exception that most people probably don’t realize it exists.

But a comparison with &quot;GBK&quot; is obviously better, if only there was a clearer way than strcmp ;-)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>201135</attachid>
            <date>2013-05-08 22:14:16 -0700</date>
            <delta_ts>2013-05-10 17:22:57 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>EncodingString.txt</filename>
            <type>text/plain</type>
            <size>5993</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0OTc5MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEzLTA1LTA4ICBBbGV4ZXkg
UHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgVGV4dENvZGVjSUNV
IG5vdCBkZXBlbmQgb24gVGV4dEVuY29kaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTU4NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL3RleHQvVGV4dENvZGVjSUNVLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRDb2RlY0lDVTo6VGV4dENvZGVjSUNVKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2Rl
Y0lDVTo6Y3JlYXRlSUNVQ29udmVydGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lD
VTo6ZGVjb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDb2RlY0lDVTo6ZW5jb2RlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oOgorICAgICAgICBVc2UgYSBwbGFp
biBlbmNvZGluZyBzdHJpbmcgaW4gcGxhdGZvcm0gZW5jb2RlciB3cmFwcGVyLCBub3QgYSBoaWdo
ZXIgbGV2ZWwgY29uY2VwdC4KKwogMjAxMy0wNS0wOCAgRGF2aWQgS2lsemVyICA8ZGRraWx6ZXJA
YXBwbGUuY29tPgogCiAgICAgICAgIEJVSUxEIEZJWDogRG9uJ3QgdXNlIGFkb3B0Q0YoKSB3aXRo
IE5TRGljdGlvbmFyeSAqIG9iamVjdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4
dC9UZXh0Q29kZWNJQ1UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3RleHQvVGV4dENvZGVjSUNVLmNwcAkocmV2aXNpb24gMTQ5NTMxKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAjaWYgVVNFKElDVV9VTklDT0RFKQogI2luY2x1ZGUgIlRleHRDb2RlY0lDVS5o
IgogCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nLmgiCisjaW5jbHVkZSAiVGV4dEVuY29kaW5nUmVn
aXN0cnkuaCIKICNpbmNsdWRlICJUaHJlYWRHbG9iYWxEYXRhLmgiCiAjaW5jbHVkZSA8dW5pY29k
ZS91Y252Lmg+CiAjaW5jbHVkZSA8dW5pY29kZS91Y252X2NiLmg+CkBAIC01Nyw3ICs1OSw4IEBA
IHN0YXRpYyBVQ29udmVydGVyKiYgY2FjaGVkQ29udmVydGVySUNVKCkKIAogUGFzc093blB0cjxU
ZXh0Q29kZWM+IFRleHRDb2RlY0lDVTo6Y3JlYXRlKGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rp
bmcsIGNvbnN0IHZvaWQqKQogewotICAgIHJldHVybiBhZG9wdFB0cihuZXcgVGV4dENvZGVjSUNV
KGVuY29kaW5nKSk7CisgICAgLy8gVGV4dEVuY29kaW5nIG5hbWUgaXMgYWx3YXlzIGF0b21pYywg
c28gdGhlIHN0cmluZyBpcyBuZXZlciBkZWxldGVkLgorICAgIHJldHVybiBhZG9wdFB0cihuZXcg
VGV4dENvZGVjSUNVKGVuY29kaW5nLm5hbWUoKSkpOwogfQogCiB2b2lkIFRleHRDb2RlY0lDVTo6
cmVnaXN0ZXJFbmNvZGluZ05hbWVzKEVuY29kaW5nTmFtZVJlZ2lzdHJhciByZWdpc3RyYXIpCkBA
IC0xOTcsOCArMjAwLDggQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OnJlZ2lzdGVyQ29kZWNzKFRleHRD
bwogICAgIH0KIH0KIAotVGV4dENvZGVjSUNVOjpUZXh0Q29kZWNJQ1UoY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZykKLSAgICA6IG1fZW5jb2RpbmcoZW5jb2RpbmcpCitUZXh0Q29kZWNJQ1U6
OlRleHRDb2RlY0lDVShjb25zdCBjaGFyKiBlbmNvZGluZykKKyAgICA6IG1fZW5jb2RpbmdOYW1l
KGVuY29kaW5nKQogICAgICwgbV9jb252ZXJ0ZXJJQ1UoMCkKICAgICAsIG1fbmVlZHNHQktGYWxs
YmFja3MoZmFsc2UpCiB7CkBAIC0yMjQsOCArMjI3LDcgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6OmNy
ZWF0ZUlDVUNvbnZlcnRlcigpIAogewogICAgIEFTU0VSVCghbV9jb252ZXJ0ZXJJQ1UpOwogCi0g
ICAgY29uc3QgY2hhciogbmFtZSA9IG1fZW5jb2RpbmcubmFtZSgpOwotICAgIG1fbmVlZHNHQktG
YWxsYmFja3MgPSBuYW1lWzBdID09ICdHJyAmJiBuYW1lWzFdID09ICdCJyAmJiBuYW1lWzJdID09
ICdLJyAmJiAhbmFtZVszXTsKKyAgICBtX25lZWRzR0JLRmFsbGJhY2tzID0gbV9lbmNvZGluZ05h
bWVbMF0gPT0gJ0cnICYmIG1fZW5jb2RpbmdOYW1lWzFdID09ICdCJyAmJiBtX2VuY29kaW5nTmFt
ZVsyXSA9PSAnSycgJiYgIW1fZW5jb2RpbmdOYW1lWzNdOwogCiAgICAgVUVycm9yQ29kZSBlcnI7
CiAKQEAgLTIzMyw3ICsyMzUsNyBAQCB2b2lkIFRleHRDb2RlY0lDVTo6Y3JlYXRlSUNVQ29udmVy
dGVyKCkgCiAgICAgaWYgKGNhY2hlZENvbnZlcnRlcikgewogICAgICAgICBlcnIgPSBVX1pFUk9f
RVJST1I7CiAgICAgICAgIGNvbnN0IGNoYXIqIGNhY2hlZE5hbWUgPSB1Y252X2dldE5hbWUoY2Fj
aGVkQ29udmVydGVyLCAmZXJyKTsKLSAgICAgICAgaWYgKFVfU1VDQ0VTUyhlcnIpICYmIG1fZW5j
b2RpbmcgPT0gY2FjaGVkTmFtZSkgeworICAgICAgICBpZiAoVV9TVUNDRVNTKGVycikgJiYgbV9l
bmNvZGluZ05hbWUgPT0gY2FjaGVkTmFtZSkgewogICAgICAgICAgICAgbV9jb252ZXJ0ZXJJQ1Ug
PSBjYWNoZWRDb252ZXJ0ZXI7CiAgICAgICAgICAgICBjYWNoZWRDb252ZXJ0ZXIgPSAwOwogICAg
ICAgICAgICAgcmV0dXJuOwpAQCAtMjQxLDEwICsyNDMsMTAgQEAgdm9pZCBUZXh0Q29kZWNJQ1U6
OmNyZWF0ZUlDVUNvbnZlcnRlcigpIAogICAgIH0KIAogICAgIGVyciA9IFVfWkVST19FUlJPUjsK
LSAgICBtX2NvbnZlcnRlcklDVSA9IHVjbnZfb3BlbihtX2VuY29kaW5nLm5hbWUoKSwgJmVycik7
CisgICAgbV9jb252ZXJ0ZXJJQ1UgPSB1Y252X29wZW4obV9lbmNvZGluZ05hbWUsICZlcnIpOwog
I2lmICFMT0dfRElTQUJMRUQKICAgICBpZiAoZXJyID09IFVfQU1CSUdVT1VTX0FMSUFTX1dBUk5J
TkcpCi0gICAgICAgIExPR19FUlJPUigiSUNVIGFtYmlndW91cyBhbGlhcyB3YXJuaW5nIGZvciBl
bmNvZGluZzogJXMiLCBtX2VuY29kaW5nLm5hbWUoKSk7CisgICAgICAgIExPR19FUlJPUigiSUNV
IGFtYmlndW91cyBhbGlhcyB3YXJuaW5nIGZvciBlbmNvZGluZzogJXMiLCBtX2VuY29kaW5nTmFt
ZSk7CiAjZW5kaWYKICAgICBpZiAobV9jb252ZXJ0ZXJJQ1UpCiAgICAgICAgIHVjbnZfc2V0RmFs
bGJhY2sobV9jb252ZXJ0ZXJJQ1UsIFRSVUUpOwpAQCAtMzM0LDcgKzMzNiw3IEBAIFN0cmluZyBU
ZXh0Q29kZWNJQ1U6OmRlY29kZShjb25zdCBjaGFyKiAKIAogICAgIC8vIDxodHRwOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzAxND4KICAgICAvLyBTaW1wbGlmaWVkIENoaW5l
c2UgcGFnZXMgdXNlIHRoZSBjb2RlIEEzQTAgdG8gbWVhbiAiZnVsbC13aWR0aCBzcGFjZSIsIGJ1
dCBJQ1UgZGVjb2RlcyBpdCBhcyBVK0U1RTUuCi0gICAgaWYgKHN0cmNtcChtX2VuY29kaW5nLm5h
bWUoKSwgIkdCSyIpID09IDAgfHwgc3RyY2FzZWNtcChtX2VuY29kaW5nLm5hbWUoKSwgImdiMTgw
MzAiKSA9PSAwKQorICAgIGlmIChzdHJjbXAobV9lbmNvZGluZ05hbWUsICJHQksiKSA9PSAwIHx8
IHN0cmNhc2VjbXAobV9lbmNvZGluZ05hbWUsICJnYjE4MDMwIikgPT0gMCkKICAgICAgICAgcmVz
dWx0U3RyaW5nLnJlcGxhY2UoMHhFNUU1LCBpZGVvZ3JhcGhpY1NwYWNlKTsKIAogICAgIHJldHVy
biByZXN1bHRTdHJpbmc7CkBAIC00MjksMTEgKzQzMSwxOCBAQCBDU3RyaW5nIFRleHRDb2RlY0lD
VTo6ZW5jb2RlKGNvbnN0IFVDaGFyCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBzZWUgaWYgdGhl
cmUgaXMgImZvcmNlIEFTQ0lJIHJhbmdlIiBtb2RlIGluIElDVTsKICAgICAvLyB1bnRpbCB0aGVu
LCB3ZSBjaGFuZ2UgdGhlIGJhY2tzbGFzaCBpbnRvIGEgeWVuIHNpZ24uCiAgICAgLy8gRW5jb2Rp
bmcgd2lsbCBjaGFuZ2UgdGhlIHllbiBzaWduIGJhY2sgaW50byBhIGJhY2tzbGFzaC4KLSAgICBT
dHJpbmcgY29weShjaGFyYWN0ZXJzLCBsZW5ndGgpOwotICAgIGNvcHkgPSBtX2VuY29kaW5nLmRp
c3BsYXlTdHJpbmcoY29weS5pbXBsKCkpOwotCi0gICAgY29uc3QgVUNoYXIqIHNvdXJjZSA9IGNv
cHkuY2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBzb3VyY2VMaW1pdCA9IHNvdXJjZSAr
IGNvcHkubGVuZ3RoKCk7CisgICAgU3RyaW5nIGNvcHk7CisgICAgY29uc3QgVUNoYXIqIHNvdXJj
ZTsKKyAgICBjb25zdCBVQ2hhciogc291cmNlTGltaXQ7CisgICAgaWYgKHNob3VsZFNob3dCYWNr
c2xhc2hBc0N1cnJlbmN5U3ltYm9sSW4obV9lbmNvZGluZ05hbWUpKSB7CisgICAgICAgIGNvcHku
YXBwZW5kKGNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgICAgIGNvcHkucmVwbGFjZSgnXFwnLCAw
eEE1KTsKKyAgICAgICAgc291cmNlID0gY29weS5jaGFyYWN0ZXJzKCk7CisgICAgICAgIHNvdXJj
ZUxpbWl0ID0gc291cmNlICsgY29weS5sZW5ndGgoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBz
b3VyY2UgPSBjaGFyYWN0ZXJzOworICAgICAgICBzb3VyY2VMaW1pdCA9IHNvdXJjZSArIGxlbmd0
aDsKKyAgICB9CiAKICAgICBVRXJyb3JDb2RlIGVyciA9IFVfWkVST19FUlJPUjsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCShyZXZpc2lvbiAx
NDk1MzEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRDb2RlY0lDVS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjZGVmaW5lIFRleHRDb2RlY0lDVV9oCiAK
ICNpbmNsdWRlICJUZXh0Q29kZWMuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKICNpbmNs
dWRlIDx1bmljb2RlL3V0eXBlcy5oPgogCiB0eXBlZGVmIHN0cnVjdCBVQ29udmVydGVyIFVDb252
ZXJ0ZXI7CkBAIC00Myw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmly
dHVhbCB+VGV4dENvZGVjSUNVKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBUZXh0Q29kZWNJ
Q1UoY29uc3QgVGV4dEVuY29kaW5nJik7CisgICAgICAgIFRleHRDb2RlY0lDVShjb25zdCBjaGFy
KiBlbmNvZGluZyk7CiAgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleHRDb2RlYz4gY3JlYXRl
KGNvbnN0IFRleHRFbmNvZGluZyYsIGNvbnN0IHZvaWQqKTsKIAogICAgICAgICB2aXJ0dWFsIFN0
cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgZmx1c2gsIGJvb2wg
c3RvcE9uRXJyb3IsIGJvb2wmIHNhd0Vycm9yKTsKQEAgLTU3LDcgKzU2LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBpbnQgZGVjb2RlVG9CdWZmZXIoVUNoYXIqIGJ1ZmZlciwgVUNo
YXIqIGJ1ZmZlckxpbWl0LCBjb25zdCBjaGFyKiYgc291cmNlLAogICAgICAgICAgICAgY29uc3Qg
Y2hhciogc291cmNlTGltaXQsIGludDMyX3QqIG9mZnNldHMsIGJvb2wgZmx1c2gsIFVFcnJvckNv
ZGUmIGVycik7CiAKLSAgICAgICAgVGV4dEVuY29kaW5nIG1fZW5jb2Rpbmc7CisgICAgICAgIGNv
bnN0IGNoYXIqIG1fZW5jb2RpbmdOYW1lOwogICAgICAgICBtdXRhYmxlIFVDb252ZXJ0ZXIqIG1f
Y29udmVydGVySUNVOwogICAgICAgICBtdXRhYmxlIGJvb2wgbV9uZWVkc0dCS0ZhbGxiYWNrczsK
ICAgICB9Owo=
</data>
<flag name="review"
          id="222486"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>