<?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>35362</bug_id>
          
          <creation_ts>2010-02-24 14:42:09 -0800</creation_ts>
          <short_desc>Parsing of CSS rgb() values is slow</short_desc>
          <delta_ts>2010-03-05 17:13:44 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>23110</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>darin</cc>
    
    <cc>emacemac7</cc>
    
    <cc>eric</cc>
    
    <cc>oliver</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>193518</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-24 14:42:09 -0800</bug_when>
    <thetext>Parsing of CSS rgb() values is slow</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193522</commentid>
    <comment_count>1</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-24 14:45:49 -0800</bug_when>
    <thetext>When running the &quot;Complex Graphics&quot; test from the Peacekeeper suite, upwards of 25% of CPU time is taken parsing CSS rgb() values.  Implementing a simple ad-hoc parser (as is done for hex color values) would go a long way to improving performance on this test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193539</commentid>
    <comment_count>2</comment_count>
      <attachid>49447</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-24 15:02:55 -0800</bug_when>
    <thetext>Created attachment 49447
First draft</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193567</commentid>
    <comment_count>3</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-24 17:18:44 -0800</bug_when>
    <thetext>Re: patch1:

This functionality could be moved up into the other flavor of parseColor() on line 278. The layout tests seem ok with it, but I wasn&apos;t sure if this is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193574</commentid>
    <comment_count>4</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-02-24 17:31:44 -0800</bug_when>
    <thetext>*** Bug 23110 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193575</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-02-24 17:32:12 -0800</bug_when>
    <thetext>You should just do rgba() as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193579</commentid>
    <comment_count>6</comment_count>
      <attachid>49447</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-24 17:45:02 -0800</bug_when>
    <thetext>Comment on attachment 49447
First draft

String doesn&apos;t guarantee null termination, you should instead pass in a length parameter, then you can do:
const UChar* end = *str + length;
and the *c pieces become
c != end</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194150</commentid>
    <comment_count>7</comment_count>
      <attachid>49597</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-26 10:11:49 -0800</bug_when>
    <thetext>Created attachment 49597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194153</commentid>
    <comment_count>8</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-26 10:15:04 -0800</bug_when>
    <thetext>Ok, fixed.  Also changed to use isCSSWhitespace(), since it doesn&apos;t include vertical tab, and isASCIISpace() does.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194154</commentid>
    <comment_count>9</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-26 10:15:56 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; You should just do rgba() as well.

Unfortunately, rgba() requires parsing of floats (for the alpha), which is a bit trickier than ints.  I&apos;ll give it a shot but I might end up doing another patch for it if that&apos;s ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194155</commentid>
    <comment_count>10</comment_count>
      <attachid>49597</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-26 10:20:20 -0800</bug_when>
    <thetext>Comment on attachment 49597
Patch

I would be interested in what you get for perf numbers if you replace isCSSWhitespace with a simplified &apos; &apos; and &apos;\t&apos; only check -- on the basis we are wanting to get the maximum perf out of the normal case.

Also my reading of this seems to indicate that this will accept
rgb(1,1,1)&lt;random text&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194159</commentid>
    <comment_count>11</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-02-26 10:22:14 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #5)
&gt; &gt; You should just do rgba() as well.
&gt; 
&gt; Unfortunately, rgba() requires parsing of floats (for the alpha), which is a
&gt; bit trickier than ints.  I&apos;ll give it a shot but I might end up doing another
&gt; patch for it if that&apos;s ok.

I think it&apos;s important to understand you don&apos;t need to parse all valid inputs, you only need the fast path to handle the common cases, eg. 0.[0-9]{1,5} say</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194171</commentid>
    <comment_count>12</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-26 10:58:22 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; I would be interested in what you get for perf numbers if you replace
&gt; isCSSWhitespace with a simplified &apos; &apos; and &apos;\t&apos; only check -- on the basis we
&gt; are wanting to get the maximum perf out of the normal case.

I would think space only. I expect that very few cases have tabs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194174</commentid>
    <comment_count>13</comment_count>
      <attachid>49602</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-26 11:03:33 -0800</bug_when>
    <thetext>Created attachment 49602
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194175</commentid>
    <comment_count>14</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-26 11:05:36 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 49597 [details])
&gt; I would be interested in what you get for perf numbers if you replace
&gt; isCSSWhitespace with a simplified &apos; &apos; and &apos;\t&apos; only check -- on the basis we
&gt; are wanting to get the maximum perf out of the normal case.

Ok, I gave it a try.  The difference was negligible:  +1.75% one run, -1.8% the
next, so within the variance of this particular test, which is about +/-2%. 
(Note that this test is +52.7% faster overall with my fix).

&gt; Also my reading of this seems to indicate that this will accept
&gt; rgb(1,1,1)&lt;random text&gt;

Fixed.  Note that I&apos;m not accepting trailing whitespace either, which I figure is the
common case (no whitespace after the paren).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194185</commentid>
    <comment_count>15</comment_count>
      <attachid>49602</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-26 11:38:51 -0800</bug_when>
    <thetext>Comment on attachment 49602
Patch

&gt; +static inline bool parseInt(const UChar** str, const UChar* end, UChar terminator, int* value)

For in/out arguments we normally use references rather than pointers. Thus &quot;str&quot; and &quot;value&quot; would typically be references.

&gt; +    const UChar *c = *str;
&gt; +    int v = 0;

The &quot;*&quot; here is in the wrong place, should be next to the UChar.

We normally use words to name local variables, not letters.

&gt; +        const UChar* c = name.characters() + 4;

We normally use words to name local variables, not letters.

&gt; +        int r = 0, g = 0, b = 0;

We normally define variables on separate lines rather than all on one line.

There&apos;s no need to initialize these variables. I suggest not doing so.

I&apos;m going to say r=me, despite these concerns since they are all stylistic issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194197</commentid>
    <comment_count>16</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-26 12:06:48 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 49602 [details])
&gt; &gt; +static inline bool parseInt(const UChar** str, const UChar* end, UChar terminator, int* value)
&gt; 
&gt; For in/out arguments we normally use references rather than pointers. Thus
&gt; &quot;str&quot; and &quot;value&quot; would typically be references.
&gt; 
&gt; &gt; +    const UChar *c = *str;
&gt; &gt; +    int v = 0;
&gt; 
&gt; The &quot;*&quot; here is in the wrong place, should be next to the UChar.
&gt; 
&gt; We normally use words to name local variables, not letters.
&gt; 
&gt; &gt; +        const UChar* c = name.characters() + 4;
&gt; 
&gt; We normally use words to name local variables, not letters.
&gt; 
&gt; &gt; +        int r = 0, g = 0, b = 0;
&gt; 
&gt; We normally define variables on separate lines rather than all on one line.
&gt; 
&gt; There&apos;s no need to initialize these variables. I suggest not doing so.
&gt; 
&gt; I&apos;m going to say r=me, despite these concerns since they are all stylistic
&gt; issues.

Fixed.

(I wasn&apos;t sure if you meant &quot;this is ok, but fix these before landing&quot;, &quot;fix and re-upload&quot; or &quot;can land as is&quot;, so I fixed and re-uploaded just to be safe).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194210</commentid>
    <comment_count>17</comment_count>
      <attachid>49612</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-26 12:23:51 -0800</bug_when>
    <thetext>Created attachment 49612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194267</commentid>
    <comment_count>18</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-02-26 13:44:59 -0800</bug_when>
    <thetext>Committed r55308: &lt;http://trac.webkit.org/changeset/55308&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49447</attachid>
            <date>2010-02-24 15:02:55 -0800</date>
            <delta_ts>2010-02-26 10:11:44 -0800</delta_ts>
            <desc>First draft</desc>
            <filename>bug-35362-20100224180252.patch</filename>
            <type>text/plain</type>
            <size>2204</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTIwMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDItMjQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBDTCBpbXBsZW1lbnRzIGEgdmVyeSBzaW1wbGUgYWQtaG9jIHBhcnNlciBmb3Ig
Q1NTIHJnYigpIHZhbHVlcy4KKyAgICAgICAgSWYgaXQgZmFpbHMsIGl0IHJldHVybnMgbm8gbWF0
Y2ggYW5kIHRoZSBub3JtYWwgbGV4L3lhY2MgcGFyc2VyIHdpbGwKKyAgICAgICAgYmUgaW52b2tl
ZC4KKyAgICAgICAgCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0zNTM2MgorCisgICAgICAgIENvdmVyZWQgYnkgZmFzdC9jYW52YXMvY2FudmFzLWJnLmh0
bWwsIGZhc3QvY2FudmFzL2NhbnZhcy1iZy16b29tLmh0bWwsCisgICAgICAgIGFuZCBtYW55IG1v
cmUuCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlSW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2xvcik6CisKIDIw
MTAtMDItMjQgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZp
ZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDU1MTky
KQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5MSw2
ICszNDkxLDI1IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVW5pY29kZVJhbmcKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAoraW5saW5lIGJvb2wgcGFyc2VJbnQoY29uc3QgVUNoYXIqKiBz
dHIsIFVDaGFyIHRlcm1pbmF0b3IsIGludCogdmFsdWUpCit7CisgICAgY29uc3QgVUNoYXIgKmMg
PSAqc3RyOworICAgIGludCB2ID0gMDsKKyAgICB3aGlsZSAoKmMgJiYgaXNBU0NJSVNwYWNlKCpj
KSkgCisgICAgICAgIGMrKzsKKyAgICBpZiAoISpjIHx8ICFpc0FTQ0lJRGlnaXQoKmMpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgd2hpbGUgKCpjICYmIGlzQVNDSUlEaWdpdCgqYykpCisg
ICAgICAgIHYgPSB2ICogMTAgKyAqYysrIC0gJzAnOworICAgIHdoaWxlICgqYyAmJiBpc0FTQ0lJ
U3BhY2UoKmMpKQorICAgICAgICBjKys7CisgICAgaWYgKCpjKysgIT0gdGVybWluYXRvcikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICp2YWx1ZSA9IHY7CisgICAgKnN0ciA9IGM7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmlu
ZyAmbmFtZSwgUkdCQTMyJiByZ2IsIGJvb2wgc3RyaWN0KQogewogICAgIGlmICghc3RyaWN0ICYm
IENvbG9yOjpwYXJzZUhleENvbG9yKG5hbWUsIHJnYikpCkBAIC0zNTAzLDcgKzM1MjIsMTggQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nIAogICAgICAgICByZ2IgPSB0
Yy5yZ2IoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCisgICAgaWYgKG5hbWUuc3Rh
cnRzV2l0aCgicmdiKCIpKSB7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjID0gbmFtZS5jaGFyYWN0
ZXJzKCkgKyA0OworICAgICAgICBpbnQgciA9IDAsIGcgPSAwLCBiID0gMDsKKyAgICAgICAgaWYg
KCFwYXJzZUludCgmYywgJywnLCAmcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmICghcGFyc2VJbnQoJmMsICcsJywgJmcpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBpZiAoIXBhcnNlSW50KCZjLCAnKScsICZiKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmdiID0gbWFrZVJHQihyLCBnLCBiKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49597</attachid>
            <date>2010-02-26 10:11:49 -0800</date>
            <delta_ts>2010-02-26 11:03:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35362-20100226131147.patch</filename>
            <type>text/plain</type>
            <size>2773</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTI4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDItMjQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBDTCBpbXBsZW1lbnRzIGEgc2ltcGxlIGFkLWhvYyBwYXJzZXIgZm9yIENTUyBy
Z2IoKSB2YWx1ZXMuCisgICAgICAgIElmIGl0IGZhaWxzLCBpdCByZXR1cm5zIGZhbHNlIGFuZCB0
aGUgbm9ybWFsIGxleC95YWNjIHBhcnNlciB3aWxsCisgICAgICAgIGJlIGludm9rZWQuCisgICAg
ICAgIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUz
NjIKKworICAgICAgICBDb3ZlcmVkIGJ5IGZhc3QvY2FudmFzL2NhbnZhcy1iZy5odG1sLCBmYXN0
L2NhbnZhcy9jYW52YXMtYmctem9vbS5odG1sLAorICAgICAgICBhbmQgbWFueSBtb3JlLgorCisg
ICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUludCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IpOgorCiAyMDEwLTAyLTI2
ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2
aWQgTGV2aW4uCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDU1MjgyKQorKysgV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5MSw2ICszNDkxLDMwIEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVW5pY29kZVJhbmcKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorc3RhdGljIGlubGluZSBib29sIGlzQ1NTV2hpdGVzcGFjZShVQ2hhciBjKQoreworICAg
IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1xuJyB8
fCBjID09ICdcZic7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUludChjb25zdCBVQ2hh
cioqIHN0ciwgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgdGVybWluYXRvciwgaW50KiB2YWx1ZSkK
K3sKKyAgICBjb25zdCBVQ2hhciAqYyA9ICpzdHI7CisgICAgaW50IHYgPSAwOworICAgIHdoaWxl
IChjICE9IGVuZCAmJiBpc0NTU1doaXRlc3BhY2UoKmMpKSAKKyAgICAgICAgYysrOworICAgIGlm
IChjID09IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpjKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHdoaWxlIChjICE9IGVuZCAmJiBpc0FTQ0lJRGlnaXQoKmMpKQorICAgICAgICB2ID0gdiAq
IDEwICsgKmMrKyAtICcwJzsKKyAgICB3aGlsZSAoYyAhPSBlbmQgJiYgaXNDU1NXaGl0ZXNwYWNl
KCpjKSkKKyAgICAgICAgYysrOworICAgIGlmIChjID09IGVuZCB8fCAqYysrICE9IHRlcm1pbmF0
b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqdmFsdWUgPSB2OworICAgICpzdHIgPSBj
OworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25z
dCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKIHsKICAgICBpZiAoIXN0
cmljdCAmJiBDb2xvcjo6cGFyc2VIZXhDb2xvcihuYW1lLCByZ2IpKQpAQCAtMzUwMyw3ICszNTI3
LDE5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyAKICAgICAgICAg
cmdiID0gdGMucmdiKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQorICAgIGlmIChu
YW1lLnN0YXJ0c1dpdGgoInJnYigiKSkgeworICAgICAgICBjb25zdCBVQ2hhciogYyA9IG5hbWUu
Y2hhcmFjdGVycygpICsgNDsKKyAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IG5hbWUuY2hhcmFj
dGVycygpICsgbmFtZS5sZW5ndGgoKTsKKyAgICAgICAgaW50IHIgPSAwLCBnID0gMCwgYiA9IDA7
CisgICAgICAgIGlmICghcGFyc2VJbnQoJmMsIGVuZCwgJywnLCAmcikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghcGFyc2VJbnQoJmMsIGVuZCwgJywnLCAmZykpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghcGFyc2VJbnQoJmMsIGVuZCwg
JyknLCAmYikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJnYiA9IG1ha2VS
R0IociwgZywgYik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKQEAgLTQ3MDIsMTEgKzQ3MzgsNiBAQCBpbnQgQ1NTUGFyc2VyOjpsZXgodm9pZCog
eXlsdmFsV2l0aG91dFR5CiAgICAgcmV0dXJuIHRva2VuKCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBpc0NTU1doaXRlc3BhY2UoVUNoYXIgYykKLXsKLSAgICByZXR1cm4gYyA9PSAnICcgfHwg
YyA9PSAnXHQnIHx8IGMgPT0gJ1xyJyB8fCBjID09ICdcbicgfHwgYyA9PSAnXGYnOwotfQotCiB2
b2lkIENTU1BhcnNlcjo6cmVjaGVja0F0S2V5d29yZChjb25zdCBVQ2hhciogc3RyLCBpbnQgbGVu
KQogewogICAgIFN0cmluZyBydWxlTmFtZShzdHIsIGxlbik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49602</attachid>
            <date>2010-02-26 11:03:33 -0800</date>
            <delta_ts>2010-02-26 12:23:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35362-20100226140331.patch</filename>
            <type>text/plain</type>
            <size>2823</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTI4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDItMjQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgVGhpcyBDTCBpbXBsZW1lbnRzIGEgc2ltcGxlIGFkLWhvYyBwYXJzZXIgZm9yIENTUyBy
Z2IoKSB2YWx1ZXMuCisgICAgICAgIElmIGl0IGZhaWxzLCBpdCByZXR1cm5zIGZhbHNlIGFuZCB0
aGUgbm9ybWFsIGxleC95YWNjIHBhcnNlciB3aWxsCisgICAgICAgIGJlIGludm9rZWQuCisgICAg
ICAgIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUz
NjIKKworICAgICAgICBDb3ZlcmVkIGJ5IGZhc3QvY2FudmFzL2NhbnZhcy1iZy5odG1sLCBmYXN0
L2NhbnZhcy9jYW52YXMtYmctem9vbS5odG1sLAorICAgICAgICBhbmQgbWFueSBtb3JlLgorCisg
ICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUludCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IpOgorCiAyMDEwLTAyLTI2
ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2
aWQgTGV2aW4uCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDU1MjgyKQorKysgV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5MSw2ICszNDkxLDMwIEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVW5pY29kZVJhbmcKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAorc3RhdGljIGlubGluZSBib29sIGlzQ1NTV2hpdGVzcGFjZShVQ2hhciBjKQoreworICAg
IHJldHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1xuJyB8
fCBjID09ICdcZic7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUludChjb25zdCBVQ2hh
cioqIHN0ciwgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgdGVybWluYXRvciwgaW50KiB2YWx1ZSkK
K3sKKyAgICBjb25zdCBVQ2hhciAqYyA9ICpzdHI7CisgICAgaW50IHYgPSAwOworICAgIHdoaWxl
IChjICE9IGVuZCAmJiBpc0NTU1doaXRlc3BhY2UoKmMpKSAKKyAgICAgICAgYysrOworICAgIGlm
IChjID09IGVuZCB8fCAhaXNBU0NJSURpZ2l0KCpjKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHdoaWxlIChjICE9IGVuZCAmJiBpc0FTQ0lJRGlnaXQoKmMpKQorICAgICAgICB2ID0gdiAq
IDEwICsgKmMrKyAtICcwJzsKKyAgICB3aGlsZSAoYyAhPSBlbmQgJiYgaXNDU1NXaGl0ZXNwYWNl
KCpjKSkKKyAgICAgICAgYysrOworICAgIGlmIChjID09IGVuZCB8fCAqYysrICE9IHRlcm1pbmF0
b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAqdmFsdWUgPSB2OworICAgICpzdHIgPSBj
OworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25z
dCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKIHsKICAgICBpZiAoIXN0
cmljdCAmJiBDb2xvcjo6cGFyc2VIZXhDb2xvcihuYW1lLCByZ2IpKQpAQCAtMzUwMyw3ICszNTI3
LDIxIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyAKICAgICAgICAg
cmdiID0gdGMucmdiKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQorICAgIGlmIChu
YW1lLnN0YXJ0c1dpdGgoInJnYigiKSkgeworICAgICAgICBjb25zdCBVQ2hhciogYyA9IG5hbWUu
Y2hhcmFjdGVycygpICsgNDsKKyAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IG5hbWUuY2hhcmFj
dGVycygpICsgbmFtZS5sZW5ndGgoKTsKKyAgICAgICAgaW50IHIgPSAwLCBnID0gMCwgYiA9IDA7
CisgICAgICAgIGlmICghcGFyc2VJbnQoJmMsIGVuZCwgJywnLCAmcikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghcGFyc2VJbnQoJmMsIGVuZCwgJywnLCAmZykpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghcGFyc2VJbnQoJmMsIGVuZCwg
JyknLCAmYikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChjICE9IGVu
ZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmdiID0gbWFrZVJHQihyLCBn
LCBiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogICAgIHJldHVybiBmYWxzZTsKIH0K
IApAQCAtNDcwMiwxMSArNDc0MCw2IEBAIGludCBDU1NQYXJzZXI6OmxleCh2b2lkKiB5eWx2YWxX
aXRob3V0VHkKICAgICByZXR1cm4gdG9rZW4oKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGlz
Q1NTV2hpdGVzcGFjZShVQ2hhciBjKQotewotICAgIHJldHVybiBjID09ICcgJyB8fCBjID09ICdc
dCcgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1xuJyB8fCBjID09ICdcZic7Ci19Ci0KIHZvaWQgQ1NT
UGFyc2VyOjpyZWNoZWNrQXRLZXl3b3JkKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4pCiB7CiAg
ICAgU3RyaW5nIHJ1bGVOYW1lKHN0ciwgbGVuKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49612</attachid>
            <date>2010-02-26 12:23:51 -0800</date>
            <delta_ts>2010-02-26 12:26:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35362-20100226152349.patch</filename>
            <type>text/plain</type>
            <size>3017</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTI4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDItMjQgIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0Bj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCisKKyAgICAg
ICAgVGhpcyBDTCBpbXBsZW1lbnRzIGEgc2ltcGxlIGFkLWhvYyBwYXJzZXIgZm9yIENTUyByZ2Io
KSB2YWx1ZXMuCisgICAgICAgIElmIGl0IGZhaWxzLCBpdCByZXR1cm5zIGZhbHNlIGFuZCB0aGUg
bm9ybWFsIGxleC95YWNjIHBhcnNlciB3aWxsCisgICAgICAgIGJlIGludm9rZWQuCisgICAgICAg
IAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzUzNjIK
KworICAgICAgICBDb3ZlcmVkIGJ5IGZhc3QvY2FudmFzL2NhbnZhcy1iZy5odG1sLCBmYXN0L2Nh
bnZhcy9jYW52YXMtYmctem9vbS5odG1sLAorICAgICAgICBhbmQgbWFueSBtb3JlLgorCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29sb3IpOgorCiAyMDEwLTAyLTI2ICBa
aGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQg
TGV2aW4uCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDU1MjgyKQorKysgV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ5MSw2ICszNDkxLDMwIEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlVW5pY29kZVJhbmcKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorc3RhdGljIGlubGluZSBib29sIGlzQ1NTV2hpdGVzcGFjZShVQ2hhciBjKQoreworICAgIHJl
dHVybiBjID09ICcgJyB8fCBjID09ICdcdCcgfHwgYyA9PSAnXHInIHx8IGMgPT0gJ1xuJyB8fCBj
ID09ICdcZic7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUludChjb25zdCBVQ2hhciom
IHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgVUNoYXIgdGVybWluYXRvciwgaW50JiB2YWx1ZSkK
K3sKKyAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IHN0cmluZzsKKyAgICBpbnQgbG9jYWxWYWx1
ZSA9IDA7CisgICAgd2hpbGUgKGN1cnJlbnQgIT0gZW5kICYmIGlzQ1NTV2hpdGVzcGFjZSgqY3Vy
cmVudCkpIAorICAgICAgICBjdXJyZW50Kys7CisgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICFp
c0FTQ0lJRGlnaXQoKmN1cnJlbnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgd2hpbGUg
KGN1cnJlbnQgIT0gZW5kICYmIGlzQVNDSUlEaWdpdCgqY3VycmVudCkpCisgICAgICAgIGxvY2Fs
VmFsdWUgPSBsb2NhbFZhbHVlICogMTAgKyAqY3VycmVudCsrIC0gJzAnOworICAgIHdoaWxlIChj
dXJyZW50ICE9IGVuZCAmJiBpc0NTU1doaXRlc3BhY2UoKmN1cnJlbnQpKQorICAgICAgICBjdXJy
ZW50Kys7CisgICAgaWYgKGN1cnJlbnQgPT0gZW5kIHx8ICpjdXJyZW50KysgIT0gdGVybWluYXRv
cikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHZhbHVlID0gbG9jYWxWYWx1ZTsKKyAgICBz
dHJpbmcgPSBjdXJyZW50OworICAgIHJldHVybiB0cnVlOworfQorCiBib29sIENTU1BhcnNlcjo6
cGFyc2VDb2xvcihjb25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkK
IHsKICAgICBpZiAoIXN0cmljdCAmJiBDb2xvcjo6cGFyc2VIZXhDb2xvcihuYW1lLCByZ2IpKQpA
QCAtMzUwMyw3ICszNTI3LDIzIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0
cmluZyAKICAgICAgICAgcmdiID0gdGMucmdiKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLQorICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoInJnYigiKSkgeworICAgICAgICBjb25zdCBV
Q2hhciogY3VycmVudCA9IG5hbWUuY2hhcmFjdGVycygpICsgNDsKKyAgICAgICAgY29uc3QgVUNo
YXIqIGVuZCA9IG5hbWUuY2hhcmFjdGVycygpICsgbmFtZS5sZW5ndGgoKTsKKyAgICAgICAgaW50
IHJlZDsKKyAgICAgICAgaW50IGdyZWVuOworICAgICAgICBpbnQgYmx1ZTsKKyAgICAgICAgaWYg
KCFwYXJzZUludChjdXJyZW50LCBlbmQsICcsJywgcmVkKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgaWYgKCFwYXJzZUludChjdXJyZW50LCBlbmQsICcsJywgZ3JlZW4pKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIXBhcnNlSW50KGN1cnJlbnQs
IGVuZCwgJyknLCBibHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KGN1cnJlbnQgIT0gZW5kKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZ2Ig
PSBtYWtlUkdCKHJlZCwgZ3JlZW4sIGJsdWUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC00NzAyLDExICs0NzQyLDYgQEAgaW50IENTU1Bh
cnNlcjo6bGV4KHZvaWQqIHl5bHZhbFdpdGhvdXRUeQogICAgIHJldHVybiB0b2tlbigpOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgaXNDU1NXaGl0ZXNwYWNlKFVDaGFyIGMpCi17Ci0gICAgcmV0
dXJuIGMgPT0gJyAnIHx8IGMgPT0gJ1x0JyB8fCBjID09ICdccicgfHwgYyA9PSAnXG4nIHx8IGMg
PT0gJ1xmJzsKLX0KLQogdm9pZCBDU1NQYXJzZXI6OnJlY2hlY2tBdEtleXdvcmQoY29uc3QgVUNo
YXIqIHN0ciwgaW50IGxlbikKIHsKICAgICBTdHJpbmcgcnVsZU5hbWUoc3RyLCBsZW4pOwo=
</data>
<flag name="review"
          id="32541"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>