<?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>109947</bug_id>
          
          <creation_ts>2013-02-15 08:23:23 -0800</creation_ts>
          <short_desc>Add CString operators for comparison with const char*</short_desc>
          <delta_ts>2013-02-16 00:53:20 -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>Web Template Framework</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="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>roger_fong</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>834048</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-15 08:23:23 -0800</bug_when>
    <thetext>CString currently has the following comparison operators:
bool operator==(const CString&amp; a, const CString&amp; b);
inline bool operator!=(const CString&amp; a, const CString&amp; b);

This means that if the caller does:
CString testString = &quot;a&quot;;
if (testString == &quot;a&quot;)
  // ...

It will construct a CString from the const char*, which involves a copy and a call to strlen(). I have seen such CString / const char* comparison done in WebKit.

We could add the following comparison operators to CString in order to make sure such comparison code is not expensive:
bool operator==(const CString&amp; a, const char* b);
inline bool operator!=(const CString&amp; a, const char* b);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834052</commentid>
    <comment_count>1</comment_count>
      <attachid>188579</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-15 08:31:24 -0800</bug_when>
    <thetext>Created attachment 188579
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834110</commentid>
    <comment_count>2</comment_count>
      <attachid>188579</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-02-15 09:42:27 -0800</bug_when>
    <thetext>Comment on attachment 188579
Patch

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

Seems OK. Please fix the memcmp issue too if you are touching this code.

&gt; Source/WTF/wtf/text/CString.cpp:113
&gt; +    return !strncmp(a.data(), b.data(), a.length());

This code should use memcmp. We don’t want the code to scan for null characters, so strncmp is the wrong function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834144</commentid>
    <comment_count>3</comment_count>
      <attachid>188579</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-15 10:26:02 -0800</bug_when>
    <thetext>Comment on attachment 188579
Patch

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

This is great. Some comment bellow:

&gt;&gt; Source/WTF/wtf/text/CString.cpp:113
&gt;&gt; +    return !strncmp(a.data(), b.data(), a.length());
&gt; 
&gt; This code should use memcmp. We don’t want the code to scan for null characters, so strncmp is the wrong function.

Or StringImpl&apos;s equal(LChar, LChar, size_t).

&gt; Source/WTF/wtf/text/CString.cpp:116
&gt; +bool operator==(const CString&amp; a, const char* b)

Would it be useful to have a version for literal?:
template&lt;size_t bLength&gt;
bool operator==(const CString&amp; a, const char (&amp;b)[bLength])

You could have compile assertions for bLength &gt; 0, remove both branches, and go straight to memcmp/equal.

&gt; Tools/TestWebKitAPI/Tests/WTF/CString.cpp:135
&gt; +    CString c;
&gt; +    const char* d = 0;
&gt; +    ASSERT_TRUE(c == d);
&gt; +    ASSERT_FALSE(c != d);

Another interesting boundary is empty string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834160</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-15 10:35:15 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 188579 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=188579&amp;action=review
&gt; 
&gt; This is great. Some comment bellow:
&gt; 
&gt; &gt;&gt; Source/WTF/wtf/text/CString.cpp:113
&gt; &gt;&gt; +    return !strncmp(a.data(), b.data(), a.length());
&gt; &gt; 
&gt; &gt; This code should use memcmp. We don’t want the code to scan for null characters, so strncmp is the wrong function.
&gt; 
&gt; Or StringImpl&apos;s equal(LChar, LChar, size_t).
&gt; 
&gt; &gt; Source/WTF/wtf/text/CString.cpp:116
&gt; &gt; +bool operator==(const CString&amp; a, const char* b)
&gt; 
&gt; Would it be useful to have a version for literal?:
&gt; template&lt;size_t bLength&gt;
&gt; bool operator==(const CString&amp; a, const char (&amp;b)[bLength])
&gt; 
&gt; You could have compile assertions for bLength &gt; 0, remove both branches, and go straight to memcmp/equal.

Would you like me to add it in the same patch?

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WTF/CString.cpp:135
&gt; &gt; +    CString c;
&gt; &gt; +    const char* d = 0;
&gt; &gt; +    ASSERT_TRUE(c == d);
&gt; &gt; +    ASSERT_FALSE(c != d);
&gt; 
&gt; Another interesting boundary is empty string.

Right, I forgot about this case. I&apos;ll improve the test case, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834163</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-15 10:38:18 -0800</bug_when>
    <thetext>What code needs to compare CString to a literal?

I think of CString as a temporary object for platform interfaces, not something that should be used in places that have logic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834166</commentid>
    <comment_count>6</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-15 10:48:50 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; What code needs to compare CString to a literal?

EFL uses CString quite a bit, which is why I ask.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834171</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-15 10:52:48 -0800</bug_when>
    <thetext>I don&apos;t know that the literal version would be useful yet. However, I have seen code in the soup backend comparing CString to const char* values returned by libsoup.

Can I keep the patch as it is then and simply improve the test case as suggested by Benjamin?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834176</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-15 10:56:33 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Can I keep the patch as it is then and simply improve the test case as suggested by Benjamin?

Yep + the comments of Darin. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834177</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-15 10:57:06 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Can I keep the patch as it is then and simply improve the test case as suggested by Benjamin?
&gt; 
&gt; Yep + the comments of Darin. :)

Of course :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834215</commentid>
    <comment_count>10</comment_count>
      <attachid>188608</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-15 11:33:56 -0800</bug_when>
    <thetext>Created attachment 188608
Patch for landing

Could someone please take a quick look before landing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834315</commentid>
    <comment_count>11</comment_count>
      <attachid>188608</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-15 13:17:53 -0800</bug_when>
    <thetext>Comment on attachment 188608
Patch for landing

Thank you for updating the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834358</commentid>
    <comment_count>12</comment_count>
      <attachid>188608</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 13:54:46 -0800</bug_when>
    <thetext>Comment on attachment 188608
Patch for landing

Clearing flags on attachment: 188608

Committed r143049: &lt;http://trac.webkit.org/changeset/143049&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834359</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-15 13:54:51 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834588</commentid>
    <comment_count>14</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2013-02-15 18:47:17 -0800</bug_when>
    <thetext>This broke the Windows build.
Here&apos;s the output:
http://build-safari.apple.com/builders/Windows%20Release%20Archive/builds/19153/steps/build%20archive/logs/build%20log

Win EWS bots are really far behind :( ... might be why they bubble doesn&apos;t show up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834607</commentid>
    <comment_count>15</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2013-02-15 19:16:53 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; This broke the Windows build.
&gt; Here&apos;s the output:
&gt; http://build-safari.apple.com/builders/Windows%20Release%20Archive/builds/19153/steps/build%20archive/logs/build%20log
&gt; 
&gt; Win EWS bots are really far behind :( ... might be why they bubble doesn&apos;t show up.

It cannot find the symbol for the new operator==. Is it because of WTF_EXPORT_PRIVATE?
I forgot the difference between WTF_EXPORT_STRING_API, WTF_EXPORT_PRIVATE and WTF_EXPORT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834660</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-15 23:56:52 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; This broke the Windows build.
&gt; &gt; Here&apos;s the output:
&gt; &gt; http://build-safari.apple.com/builders/Windows%20Release%20Archive/builds/19153/steps/build%20archive/logs/build%20log
&gt; &gt; 
&gt; &gt; Win EWS bots are really far behind :( ... might be why they bubble doesn&apos;t show up.
&gt; 
&gt; It cannot find the symbol for the new operator==. Is it because of WTF_EXPORT_PRIVATE?
&gt; I forgot the difference between WTF_EXPORT_STRING_API, WTF_EXPORT_PRIVATE and WTF_EXPORT

Sorry about that. According to http://trac.webkit.org/wiki/ExportingSymbols, we need to add the new symbol to JavaScriptCoreExports.def in addition to using WTF_EXPORT_PRIVATE.

However, it seems build.webkit.org and your link are both inaccessible at the moment :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>834671</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2013-02-16 00:53:20 -0800</bug_when>
    <thetext>Windows build fix landed in http://trac.webkit.org/changeset/143099.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188579</attachid>
            <date>2013-02-15 08:31:24 -0800</date>
            <delta_ts>2013-02-15 11:33:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>109947_cstring_comparison.patch</filename>
            <type>text/plain</type>
            <size>4098</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNzlmNjQwNi4uYjhlNjBkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMy0wMi0xNSAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNoLmR1bWV6QHNpc2Euc2Ftc3VuZy5jb20+CisKKyAgICAgICAg
QWRkIENTdHJpbmcgb3BlcmF0b3JzIGZvciBjb21wYXJpc29uIHdpdGggY29uc3QgY2hhcioKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTk0NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBvcGVyYXRv
cnMgdG8gV1RGOjpDU3RyaW5nIGZvciBlcXVhbGl0eS9pbmVxdWFsaXR5IGNvbXBhcmlzb24KKyAg
ICAgICAgd2l0aCBjb25zdCBjaGFyKiBzdHJpbmdzLiBUaGlzIGF2b2lkcyBjb25zdHJ1Y3Rpbmcg
YSBDU3RyaW5nCisgICAgICAgIGZyb20gYSBjb25zdCBjaGFyKiBpbiBzdWNoIGNhc2VzLCB3aGlj
aCBpcyBjYW4gYmUgZXhwZW5zaXZlIGFzCisgICAgICAgIGl0IHdvdWxkIGNvcHkgaXQgYW5kIGNh
bGwgc3RybGVuKCkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmNwcDoKKyAgICAgICAg
KFdURjo6b3BlcmF0b3I9PSk6IFJlbW92ZSB1c2VsZXNzIGNhbGwgdG8gbWluKCkgZm9yIHRoZSBs
ZW5ndGhzCisgICAgICAgIHdoZW4gY2FsbGluZyBzdHJuY21wKCkgYXMgdGhlIGxlbmd0aHMgd2Vy
ZSBjaGVja2VkIHRvIGJlIGVxdWFsCisgICAgICAgIGJlZm9yZS4KKyAgICAgICAgKFdURik6Cisg
ICAgICAgICogd3RmL3RleHQvQ1N0cmluZy5oOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdU
Rjo6b3BlcmF0b3IhPSk6CisKIDIwMTMtMDItMTQgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxl
LmNvbT4KIAogICAgICAgICBObyBlYXN5IHdheSB0byB1c2UgYSBSZXRhaW5QdHIgYXMgYSBrZXkg
aW4gYSBIYXNoTWFwIHVzaW5nIG9iamVjdCAocmF0aGVyIHRoYW4gcG9pbnRlcikgZXF1YWxpdHkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAgYi9Tb3VyY2UvV1RG
L3d0Zi90ZXh0L0NTdHJpbmcuY3BwCmluZGV4IDg2MTkzY2UuLjYwNDYxYmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvdGV4
dC9DU3RyaW5nLmNwcApAQCAtMTEwLDcgKzExMCwxNyBAQCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q1N0cmluZyYgYSwgY29uc3QgQ1N0cmluZyYgYikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IGlmIChhLmxlbmd0aCgpICE9IGIubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICByZXR1cm4gIXN0cm5jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBtaW4oYS5sZW5ndGgoKSwgYi5s
ZW5ndGgoKSkpOworICAgIHJldHVybiAhc3RybmNtcChhLmRhdGEoKSwgYi5kYXRhKCksIGEubGVu
Z3RoKCkpOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ1N0cmluZyYgYSwgY29uc3QgY2hh
ciogYikKK3sKKyAgICBpZiAoYS5pc051bGwoKSAhPSAhYikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghYikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gIXN0cmNt
cChhLmRhdGEoKSwgYik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvdGV4dC9DU3RyaW5nLmggYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcu
aAppbmRleCAxZGY5ZjZiLi45NGYwYTExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0
L0NTdHJpbmcuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaApAQCAtODQsNiAr
ODQsOCBAQCBwcml2YXRlOgogCiBXVEZfRVhQT1JUX1BSSVZBVEUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENTdHJpbmcmIGEsIGNvbnN0IENTdHJpbmcmIGIpOwogaW5saW5lIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBDU3RyaW5nJiBhLCBjb25zdCBDU3RyaW5nJiBiKSB7IHJldHVybiAhKGEgPT0gYik7
IH0KK1dURl9FWFBPUlRfUFJJVkFURSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1N0cmluZyYgYSwg
Y29uc3QgY2hhciogYik7CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENTdHJpbmcmIGEs
IGNvbnN0IGNoYXIqIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQogCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IDI4Mzk4ZGUuLjlmZmM2NWEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0wMi0xNSAgQ2hyaXN0b3BoZSBEdW1l
eiAgPGNoLmR1bWV6QHNpc2Euc2Ftc3VuZy5jb20+CisKKyAgICAgICAgQWRkIENTdHJpbmcgb3Bl
cmF0b3JzIGZvciBjb21wYXJpc29uIHdpdGggY29uc3QgY2hhcioKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTk0NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgV1RGOjpDU3RyaW5n
J3MgY29tcGFyaXNvbiBvcGVyYXRvcnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dURi9DU3RyaW5nLmNwcDoKKyAgICAgICAgKFRFU1QpOgorCiAyMDEzLTAyLTE1ICBBbmRyZXkg
THVzaG5pa292ICA8bHVzaG5pa292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVj
dG9yOiBpbXBsZW1lbnQgc21hcnQgYnJhY2VzIGZ1bmN0aW9uYWxpdHkKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NTdHJpbmcuY3BwIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKaW5kZXggMWY0N2NiMi4uYWVhZTUwNSAxMDA2NDQK
LS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ1N0cmluZy5jcHAKQEAgLTEwNywzICsxMDcsNDIg
QEAgVEVTVChXVEYsIENTdHJpbmdDb3B5T25Xcml0ZSkKICAgICBBU1NFUlRfU1RSRVEoc3RyaW5n
LmRhdGEoKSwgIldlYktpdCIpOwogICAgIEFTU0VSVF9TVFJFUShjb3B5LmRhdGEoKSwgaW5pdGlh
bFN0cmluZyk7CiB9CisKK1RFU1QoV1RGLCBDU3RyaW5nQ29tcGFyaXNvbikKK3sKKyAgICAvLyBD
b21wYXJpc29uIHdpdGggYW5vdGhlciBDU3RyaW5nLgorICAgIENTdHJpbmcgYTsKKyAgICBDU3Ry
aW5nIGI7CisgICAgQVNTRVJUX1RSVUUoYSA9PSBiKTsKKyAgICBBU1NFUlRfRkFMU0UoYSAhPSBi
KTsKKyAgICBhID0gImEiOworICAgIEFTU0VSVF9GQUxTRShhID09IGIpOworICAgIEFTU0VSVF9U
UlVFKGEgIT0gYik7CisgICAgYiA9ICJiIjsKKyAgICBBU1NFUlRfRkFMU0UoYSA9PSBiKTsKKyAg
ICBBU1NFUlRfVFJVRShhICE9IGIpOworICAgIGIgPSAiYSI7CisgICAgQVNTRVJUX1RSVUUoYSA9
PSBiKTsKKyAgICBBU1NFUlRfRkFMU0UoYSAhPSBiKTsKKyAgICBiID0gImFhIjsKKyAgICBBU1NF
UlRfRkFMU0UoYSA9PSBiKTsKKyAgICBBU1NFUlRfVFJVRShhICE9IGIpOworCisgICAgLy8gQ29t
cGFyaXNvbiB3aXRoIGEgY29uc3QgY2hhciouCisgICAgQ1N0cmluZyBjOworICAgIGNvbnN0IGNo
YXIqIGQgPSAwOworICAgIEFTU0VSVF9UUlVFKGMgPT0gZCk7CisgICAgQVNTRVJUX0ZBTFNFKGMg
IT0gZCk7CisgICAgYyA9ICJjIjsKKyAgICBBU1NFUlRfRkFMU0UoYyA9PSBkKTsKKyAgICBBU1NF
UlRfVFJVRShjICE9IGQpOworICAgIGQgPSAiZCI7CisgICAgQVNTRVJUX0ZBTFNFKGMgPT0gZCk7
CisgICAgQVNTRVJUX1RSVUUoYyAhPSBkKTsKKyAgICBkID0gImMiOworICAgIEFTU0VSVF9UUlVF
KGMgPT0gZCk7CisgICAgQVNTRVJUX0ZBTFNFKGMgIT0gZCk7CisgICAgZCA9ICJjYyI7CisgICAg
QVNTRVJUX0ZBTFNFKGMgPT0gZCk7CisgICAgQVNTRVJUX1RSVUUoYyAhPSBkKTsKK30K
</data>
<flag name="review"
          id="208732"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="208733"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188608</attachid>
            <date>2013-02-15 11:33:56 -0800</date>
            <delta_ts>2013-02-15 13:54:46 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>109947_cstring_comparison.patch</filename>
            <type>text/plain</type>
            <size>5054</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nIGIvU291cmNlL1dURi9DaGFuZ2VMb2cK
aW5kZXggNzlmNjQwNi4uM2ZjMTk2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dURi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMy0wMi0xNSAg
Q2hyaXN0b3BoZSBEdW1leiAgPGNoLmR1bWV6QHNpc2Euc2Ftc3VuZy5jb20+CisKKyAgICAgICAg
QWRkIENTdHJpbmcgb3BlcmF0b3JzIGZvciBjb21wYXJpc29uIHdpdGggY29uc3QgY2hhcioKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTk0NworCisg
ICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIEFkZCBvcGVyYXRvcnMg
dG8gV1RGOjpDU3RyaW5nIGZvciBlcXVhbGl0eS9pbmVxdWFsaXR5IGNvbXBhcmlzb24KKyAgICAg
ICAgd2l0aCBjb25zdCBjaGFyKiBzdHJpbmdzLiBUaGlzIGF2b2lkcyBjb25zdHJ1Y3RpbmcgYSBD
U3RyaW5nCisgICAgICAgIGZyb20gYSBjb25zdCBjaGFyKiBpbiBzdWNoIGNhc2VzLCB3aGljaCBp
cyBjYW4gYmUgZXhwZW5zaXZlIGFzCisgICAgICAgIGl0IHdvdWxkIGNvcHkgaXQgYW5kIGNhbGwg
c3RybGVuKCkuCisKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmNwcDoKKyAgICAgICAgKFdU
Rjo6b3BlcmF0b3I9PSk6IFVzZSBtZW1jbXAgaW5zdGVhZCBvZiBzdHJuY21wIHRvIGNvbXBhcmUg
dGhlCisgICAgICAgIENTdHJpbmcgYnVmZmVycyBhcyB3ZSBrbm93IHRoZXkgYXJlIHRoZSBzYW1l
IHNpemUgYW5kIHdlIGRvbid0CisgICAgICAgIHdhbnQgdG8gc2NhbiBmb3IgdGVybWluYXRpbmcg
bnVsbCBieXRlLgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiB3dGYvdGV4dC9DU3RyaW5nLmg6
CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpvcGVyYXRvciE9KToKKwogMjAxMy0wMi0x
NCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIE5vIGVhc3kgd2F5
IHRvIHVzZSBhIFJldGFpblB0ciBhcyBhIGtleSBpbiBhIEhhc2hNYXAgdXNpbmcgb2JqZWN0IChy
YXRoZXIgdGhhbiBwb2ludGVyKSBlcXVhbGl0eQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYv
dGV4dC9DU3RyaW5nLmNwcCBiL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5jcHAKaW5kZXgg
ODYxOTNjZS4uZmZkZGNhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvdGV4dC9DU3RyaW5n
LmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuY3BwCkBAIC0xMTAsNyArMTEw
LDE2IEBAIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDU3RyaW5nJiBhLCBjb25zdCBDU3RyaW5nJiBi
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgaWYgKGEubGVuZ3RoKCkgIT0gYi5sZW5ndGgo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAhc3RybmNtcChhLmRhdGEoKSwg
Yi5kYXRhKCksIG1pbihhLmxlbmd0aCgpLCBiLmxlbmd0aCgpKSk7CisgICAgcmV0dXJuICFtZW1j
bXAoYS5kYXRhKCksIGIuZGF0YSgpLCBhLmxlbmd0aCgpKTsKK30KKworYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENTdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpCit7CisgICAgaWYgKGEuaXNOdWxsKCkg
IT0gIWIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWIpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiAhc3RyY21wKGEuZGF0YSgpLCBiKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV1RGCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi90ZXh0L0NTdHJpbmcuaCBiL1Nv
dXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCmluZGV4IDFkZjlmNmIuLjk0ZjBhMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL3RleHQvQ1N0cmluZy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3RleHQvQ1N0cmluZy5oCkBAIC04NCw2ICs4NCw4IEBAIHByaXZhdGU6CiAKIFdURl9FWFBPUlRf
UFJJVkFURSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ1N0cmluZyYgYSwgY29uc3QgQ1N0cmluZyYg
Yik7CiBpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENTdHJpbmcmIGEsIGNvbnN0IENTdHJp
bmcmIGIpIHsgcmV0dXJuICEoYSA9PSBiKTsgfQorV1RGX0VYUE9SVF9QUklWQVRFIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKTsKK2lubGluZSBib29sIG9w
ZXJhdG9yIT0oY29uc3QgQ1N0cmluZyYgYSwgY29uc3QgY2hhciogYikgeyByZXR1cm4gIShhID09
IGIpOyB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VM
b2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjgzOThkZS4uMTZjNjVlZSAxMDA2NDQKLS0tIGEv
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDEzLTAyLTE1ICBDaHJpc3RvcGhlIER1bWV6ICA8Y2guZHVtZXpAc2lzYS5zYW1zdW5nLmNvbT4K
KworICAgICAgICBBZGQgQ1N0cmluZyBvcGVyYXRvcnMgZm9yIGNvbXBhcmlzb24gd2l0aCBjb25z
dCBjaGFyKgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA5OTQ3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAgICAgQWRk
IHRlc3RzIGZvciBXVEY6OkNTdHJpbmcncyBjb21wYXJpc29uIG9wZXJhdG9ycy4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0NTdHJpbmcuY3BwOgorICAgICAgICAoVEVTVCk6
CisKIDIwMTMtMDItMTUgIEFuZHJleSBMdXNobmlrb3YgIDxsdXNobmlrb3ZAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGltcGxlbWVudCBzbWFydCBicmFjZXMgZnVuY3Rp
b25hbGl0eQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvQ1N0cmlu
Zy5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DU3RyaW5nLmNwcAppbmRleCAx
ZjQ3Y2IyLi43MzVkN2RkIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9DU3RyaW5nLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9DU3RyaW5n
LmNwcApAQCAtMTA3LDMgKzEwNyw5MCBAQCBURVNUKFdURiwgQ1N0cmluZ0NvcHlPbldyaXRlKQog
ICAgIEFTU0VSVF9TVFJFUShzdHJpbmcuZGF0YSgpLCAiV2ViS2l0Iik7CiAgICAgQVNTRVJUX1NU
UkVRKGNvcHkuZGF0YSgpLCBpbml0aWFsU3RyaW5nKTsKIH0KKworVEVTVChXVEYsIENTdHJpbmdD
b21wYXJpc29uKQoreworICAgIC8vIENvbXBhcmlzb24gd2l0aCBhbm90aGVyIENTdHJpbmcuCisg
ICAgQ1N0cmluZyBhOworICAgIENTdHJpbmcgYjsKKyAgICBBU1NFUlRfVFJVRShhID09IGIpOwor
ICAgIEFTU0VSVF9GQUxTRShhICE9IGIpOworICAgIGEgPSAiYSI7CisgICAgYiA9IENTdHJpbmco
KTsKKyAgICBBU1NFUlRfRkFMU0UoYSA9PSBiKTsKKyAgICBBU1NFUlRfVFJVRShhICE9IGIpOwor
ICAgIGEgPSAiYSI7CisgICAgYiA9ICJiIjsKKyAgICBBU1NFUlRfRkFMU0UoYSA9PSBiKTsKKyAg
ICBBU1NFUlRfVFJVRShhICE9IGIpOworICAgIGEgPSAiYSI7CisgICAgYiA9ICJhIjsKKyAgICBB
U1NFUlRfVFJVRShhID09IGIpOworICAgIEFTU0VSVF9GQUxTRShhICE9IGIpOworICAgIGEgPSAi
YSI7CisgICAgYiA9ICJhYSI7CisgICAgQVNTRVJUX0ZBTFNFKGEgPT0gYik7CisgICAgQVNTRVJU
X1RSVUUoYSAhPSBiKTsKKyAgICBhID0gIiI7CisgICAgYiA9ICIiOworICAgIEFTU0VSVF9UUlVF
KGEgPT0gYik7CisgICAgQVNTRVJUX0ZBTFNFKGEgIT0gYik7CisgICAgYSA9ICIiOworICAgIGIg
PSBDU3RyaW5nKCk7CisgICAgQVNTRVJUX0ZBTFNFKGEgPT0gYik7CisgICAgQVNTRVJUX1RSVUUo
YSAhPSBiKTsKKyAgICBhID0gImEiOworICAgIGIgPSAiIjsKKyAgICBBU1NFUlRfRkFMU0UoYSA9
PSBiKTsKKyAgICBBU1NFUlRfVFJVRShhICE9IGIpOworCisgICAgLy8gQ29tcGFyaXNvbiB3aXRo
IGEgY29uc3QgY2hhciouCisgICAgQ1N0cmluZyBjOworICAgIGNvbnN0IGNoYXIqIGQgPSAwOwor
ICAgIEFTU0VSVF9UUlVFKGMgPT0gZCk7CisgICAgQVNTRVJUX0ZBTFNFKGMgIT0gZCk7CisgICAg
YyA9ICJjIjsKKyAgICBkID0gMDsKKyAgICBBU1NFUlRfRkFMU0UoYyA9PSBkKTsKKyAgICBBU1NF
UlRfVFJVRShjICE9IGQpOworICAgIGMgPSBDU3RyaW5nKCk7CisgICAgZCA9ICJkIjsKKyAgICBB
U1NFUlRfRkFMU0UoYyA9PSBkKTsKKyAgICBBU1NFUlRfVFJVRShjICE9IGQpOworICAgIGMgPSAi
YyI7CisgICAgZCA9ICJkIjsKKyAgICBBU1NFUlRfRkFMU0UoYyA9PSBkKTsKKyAgICBBU1NFUlRf
VFJVRShjICE9IGQpOworICAgIGMgPSAiYyI7CisgICAgZCA9ICJjIjsKKyAgICBBU1NFUlRfVFJV
RShjID09IGQpOworICAgIEFTU0VSVF9GQUxTRShjICE9IGQpOworICAgIGMgPSAiYyI7CisgICAg
ZCA9ICJjYyI7CisgICAgQVNTRVJUX0ZBTFNFKGMgPT0gZCk7CisgICAgQVNTRVJUX1RSVUUoYyAh
PSBkKTsKKyAgICBjID0gImNjIjsKKyAgICBkID0gImMiOworICAgIEFTU0VSVF9GQUxTRShjID09
IGQpOworICAgIEFTU0VSVF9UUlVFKGMgIT0gZCk7CisgICAgYyA9ICIiOworICAgIGQgPSAiIjsK
KyAgICBBU1NFUlRfVFJVRShjID09IGQpOworICAgIEFTU0VSVF9GQUxTRShjICE9IGQpOworICAg
IGMgPSAiIjsKKyAgICBkID0gMDsKKyAgICBBU1NFUlRfRkFMU0UoYyA9PSBkKTsKKyAgICBBU1NF
UlRfVFJVRShjICE9IGQpOworICAgIGMgPSBDU3RyaW5nKCk7CisgICAgZCA9ICIiOworICAgIEFT
U0VSVF9GQUxTRShjID09IGQpOworICAgIEFTU0VSVF9UUlVFKGMgIT0gZCk7CisgICAgYyA9ICJh
IjsKKyAgICBkID0gIiI7CisgICAgQVNTRVJUX0ZBTFNFKGMgPT0gZCk7CisgICAgQVNTRVJUX1RS
VUUoYyAhPSBkKTsKKyAgICBjID0gIiI7CisgICAgZCA9ICJiIjsKKyAgICBBU1NFUlRfRkFMU0Uo
YyA9PSBkKTsKKyAgICBBU1NFUlRfVFJVRShjICE9IGQpOworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>