<?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>136184</bug_id>
          
          <creation_ts>2014-08-22 16:48:12 -0700</creation_ts>
          <short_desc>Remove unnecessary WTFString creation in Dictionary getter</short_desc>
          <delta_ts>2014-08-25 15:36:38 -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="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>joepeck</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1030840</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-22 16:48:12 -0700</bug_when>
    <thetext>Dictionary::getWithUndefinedOrNullCheck was taking a WTFString but could just take a string literal. Its only caller uses a literal, and the rest of the code expects literals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030842</commentid>
    <comment_count>1</comment_count>
      <attachid>237012</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-22 16:49:22 -0700</bug_when>
    <thetext>Created attachment 237012
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030843</commentid>
    <comment_count>2</comment_count>
      <attachid>237013</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-22 16:50:11 -0700</bug_when>
    <thetext>Created attachment 237013
[PATCH] Proposed Fix - should apply</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030849</commentid>
    <comment_count>3</comment_count>
      <attachid>237013</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-22 17:12:45 -0700</bug_when>
    <thetext>Comment on attachment 237013
[PATCH] Proposed Fix - should apply

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

&gt; Source/WebCore/bindings/js/JSDictionary.cpp:272
&gt; +    if (tryGetProperty(propertyName, value) != PropertyFound || value.isUndefinedOrNull())

lol!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030854</commentid>
    <comment_count>4</comment_count>
      <attachid>237013</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-22 17:43:39 -0700</bug_when>
    <thetext>Comment on attachment 237013
[PATCH] Proposed Fix - should apply

Clearing flags on attachment: 237013

Committed r172876: &lt;http://trac.webkit.org/changeset/172876&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030855</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-22 17:43:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1030982</commentid>
    <comment_count>6</comment_count>
      <attachid>237013</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-08-24 11:57:41 -0700</bug_when>
    <thetext>Comment on attachment 237013
[PATCH] Proposed Fix - should apply

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

&gt;&gt; Source/WebCore/bindings/js/JSDictionary.cpp:272
&gt;&gt; +    if (tryGetProperty(propertyName, value) != PropertyFound || value.isUndefinedOrNull())
&gt; 
&gt; lol!

Great change. But are any callers passing in Latin-1 strings rather than UTF-8 strings? Nothing in const char* makes it clear whether the strings must be ASCII, or can be Latin-1 or UTF-8.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031193</commentid>
    <comment_count>7</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-25 11:41:16 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 237013 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=237013&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/bindings/js/JSDictionary.cpp:272
&gt; &gt;&gt; +    if (tryGetProperty(propertyName, value) != PropertyFound || value.isUndefinedOrNull())
&gt; &gt; 
&gt; &gt; lol!
&gt; 
&gt; Great change. But are any callers passing in Latin-1 strings rather than UTF-8 strings? Nothing in const char* makes it clear whether the strings must be ASCII, or can be Latin-1 or UTF-8.

There is only one caller passing an ASCII string:

    options.getWithUndefinedOrNullCheck(&quot;keyPath&quot;, keyPathString)

The choice of &quot;const char*&quot; was to match the rest of the APIs in JSDictionary. Namely:

&gt;    bool tryGetProperty(const char* propertyName, Result&amp;) const;
&gt;    bool get(const char* propertyName, Result&amp;) const;

You&apos;ve given a similar comment in a few patches and I think I&apos;m missing the point you&apos;re making. Are you suggesting we should clarify the API by having it take an LChar*/UChar*? I still think in cases where a string literal is given (like the above) we will need a &quot;const char*&quot; method casting and forwarding to LChar*/UChar*. I&apos;m not sure if any compile time checking is gained.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031201</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-08-25 12:17:20 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Are you suggesting we should clarify the API by having it take an LChar*/UChar*?

No.

I’ll come talk to you in person about this some time. My problem with functions that take const char* is that any function we have that takes a const char* without a length:

1) Has to do a strlen at runtime, can’t fold it away at compile time. But I realized that ASCIILiteral has the same issue, so not sure what I was all worked up about.

And even if it has a length:

2) It is ambiguous about how it handles non-ASCII characters. char* might mean Latin-1 or UTF-8 or it might be an ASCII-only function. It’s not great to have functions where that is ambiguous, and it’s not great to add more. It’s true that LChar* always means Latin-1, but it’s not suitable for use with literals because you have to cast every time you use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1031238</commentid>
    <comment_count>9</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2014-08-25 15:36:38 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; Are you suggesting we should clarify the API by having it take an LChar*/UChar*?
&gt; 
&gt; No.
&gt; 
&gt; I’ll come talk to you in person about this some time. My problem with functions that take const char* is that any function we have that takes a const char* without a length:
&gt; 
&gt; 1) Has to do a strlen at runtime, can’t fold it away at compile time. But I realized that ASCIILiteral has the same issue, so not sure what I was all worked up about.

Well, we may still be able to eliminate that using ASCIILiteral.

That was going to be my next step. Give ASCIILiteral the constructor that knows the length at compile time, then check if there is a performance improvement. After talking with Ben, this might be worth doing on most architectures. I think the reason we originally avoided it with ASCIILiteral was on older ARM architectures the two argument constructor was hurting more then helping.

The change may look something like this (completely untested):

&gt;  class ASCIILiteral {
&gt;  public:
&gt; -    explicit ASCIILiteral(const char* characters) : m_characters(characters) { }
&gt; +    template&lt;unsigned charactersCount&gt;
&gt; +    explicit ASCIILiteral(const char (&amp;characters)[charactersCount])
&gt; +        : m_characters(characters)
&gt; +        , m_length(charactersCount) { }
&gt;
&gt;      operator const char*() { return m_characters; }
&gt; +    unsigned length() const { return m_length; }
&gt;  
&gt;  private:
&gt;      const char* m_characters;
&gt; +    unsigned m_length;     
&gt;  };

Then modifying WTF::String(ASCIILiteral) constructor to avoid strlen():

&gt; -String::String(ASCIILiteral characters)
&gt; -    : m_impl(StringImpl::createFromLiteral(characters))
&gt; -{
&gt; -}
&gt;
&gt; +String::String(ASCIILiteral literal)
&gt; +    : m_impl(StringImpl::createFromLiteral(literal, literal.length()))
&gt; +{
&gt; +}

Or just removing ASCIILiteral in favor of the String(const char (&amp;characters)[charactersCount]) constructor. Each of these approaches could be #ifdef&apos;d based on the port if this really is still an issue on a particular architecture.

I believe Ben wanted to take this even further and somehow have an optimized constructor passing the string and length in a single pointer. So we still get the one argument constructor but get all the data we need without strlen().


&gt; And even if it has a length:
&gt; 
&gt; 2) It is ambiguous about how it handles non-ASCII characters. char* might mean Latin-1 or UTF-8 or it might be an ASCII-only function. It’s not great to have functions where that is ambiguous, and it’s not great to add more. It’s true that LChar* always means Latin-1, but it’s not suitable for use with literals because you have to cast every time you use it.

I see. Any ideas on how to solve this? One thing I like about &quot;ASCIILiteral(...)&quot; is that we pretty much know the contents are ASCII. We could have a LATIN1(&quot;...&quot;) macro that does the cast for us and is slightly more pleasing to the eye then a large static_cast, but I tend to prefer being explicit where possible.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237012</attachid>
            <date>2014-08-22 16:49:22 -0700</date>
            <delta_ts>2014-08-22 16:50:11 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>getWithUndefinedOrNullCheck.patch</filename>
            <type>text/plain</type>
            <size>4596</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjN2I4NDFiLi4xODVjMTQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjEg
QEAKIDIwMTQtMDgtMjIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAor
ICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgV1RGU3RyaW5nIGNyZWF0aW9uIGluIERpY3Rpb25h
cnkgZ2V0dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzYxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgICogYmluZGluZ3MvanMv
RGljdGlvbmFyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaWN0aW9uYXJ5OjpnZXRXaXRoVW5k
ZWZpbmVkT3JOdWxsQ2hlY2spOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0RpY3Rpb25hcnkuaDoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNEaWN0aW9uYXJ5OjpnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2spOgorICAgICAgICAq
IGJpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oOgorCisyMDE0LTA4LTIyICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKICAgICAgICAgV2ViQ29yZTogVXNlIEFTQ0lJTGl0
ZXJhbCB3aGVyZSBwb3NzaWJsZQogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM2MTgxCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCA1ZGVmZTIxLi42MTAwOTEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xNDcsNyAr
MTQ3LDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY28KICAgICAgICAgVmVjdG9yPFN0cmluZz4g
a2V5UGF0aEFycmF5OwogICAgICAgICBpZiAob3B0aW9ucy5nZXQoImtleVBhdGgiLCBrZXlQYXRo
QXJyYXkpKQogICAgICAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0aEFycmF5KTsK
LSAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5nZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soQVND
SUlMaXRlcmFsKCJrZXlQYXRoIiksIGtleVBhdGhTdHJpbmcpKQorICAgICAgICBlbHNlIGlmIChv
cHRpb25zLmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjaygia2V5UGF0aCIsIGtleVBhdGhTdHJp
bmcpKQogICAgICAgICAgICAga2V5UGF0aCA9IElEQktleVBhdGgoa2V5UGF0aFN0cmluZyk7CiAK
ICAgICAgICAgb3B0aW9ucy5nZXQoImF1dG9JbmNyZW1lbnQiLCBhdXRvSW5jcmVtZW50KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKaW5kZXggNGQwNThlMi4uZGY0
ZGM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5jcHAKQEAgLTk4
LDcgKzk4LDcgQEAgYm9vbCBEaWN0aW9uYXJ5OjpnZXRPd25Qcm9wZXJ0eU5hbWVzKFZlY3RvcjxT
dHJpbmc+JiBuYW1lcykgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBEaWN0aW9u
YXJ5OjpnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUsIFN0cmluZyYgdmFsdWUpIGNvbnN0Citib29sIERpY3Rpb25hcnk6OmdldFdpdGhVbmRlZmlu
ZWRPck51bGxDaGVjayhjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIFN0cmluZyYgdmFsdWUpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fZGljdGlvbmFyeS5nZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hl
Y2socHJvcGVydHlOYW1lLCB2YWx1ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9EaWN0aW9uYXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9EaWN0
aW9uYXJ5LmgKaW5kZXggNGMzODJmNi4uYjFmMWI3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0RpY3Rpb25hcnkuaApAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1Vu
ZGVmaW5lZE9yTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX2RpY3Rpb25hcnkuaXNWYWxpZCgpOyB9
CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0aWVzQXNTdHJpbmdIYXNoTWFwKEhhc2hNYXA8U3RyaW5n
LCBTdHJpbmc+JikgY29uc3Q7CiAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eU5hbWVzKFZlY3RvcjxT
dHJpbmc+JikgY29uc3Q7Ci0gICAgYm9vbCBnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29u
c3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIFN0cmluZyYgdmFsdWUpIGNvbnN0OworICAgIGJvb2wg
Z2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgU3Ry
aW5nJiB2YWx1ZSkgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAppbmRleCA1NTEz
NGM5Li4xYWYwMjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0Rp
Y3Rpb25hcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFy
eS5jcHAKQEAgLTI2NSwxMSArMjY1LDExIEBAIHZvaWQgSlNEaWN0aW9uYXJ5Ojpjb252ZXJ0VmFs
dWUoSlNDOjpFeGVjU3RhdGUqLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFJlZlB0cjxHYW1lCiB9CiAj
ZW5kaWYKIAotYm9vbCBKU0RpY3Rpb25hcnk6OmdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgU3RyaW5nJiByZXN1bHQpIGNvbnN0Citib29sIEpT
RGljdGlvbmFyeTo6Z2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IGNoYXIqIHByb3Bl
cnR5TmFtZSwgU3RyaW5nJiByZXN1bHQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzVmFsaWQoKSk7
CiAgICAgSlNWYWx1ZSB2YWx1ZTsKLSAgICBpZiAodHJ5R2V0UHJvcGVydHkocHJvcGVydHlOYW1l
LnV0ZjgoKS5kYXRhKCksIHZhbHVlKSAhPSBQcm9wZXJ0eUZvdW5kIHx8IHZhbHVlLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCisgICAgaWYgKHRyeUdldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFsdWUp
ICE9IFByb3BlcnR5Rm91bmQgfHwgdmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmVzdWx0ID0gdmFsdWUudG9XVEZTdHJpbmcobV9leGVjKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKaW5kZXggYTRlODEyNi4u
ZTkwMmY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9u
YXJ5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmgKQEAg
LTc0LDcgKzc0LDcgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvcGVy
dHkgd2FzIGZvdW5kIGluIHRoZSBkaWN0aW9uYXJ5LCBhbmQgdGhlIHZhbHVlIGNvdWxkIGJlIGNv
bnZlcnRlZCB0byB0aGUgZGVzaXJlZCB0eXBlLgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBSZXN1
bHQ+CiAgICAgYm9vbCBnZXQoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBSZXN1bHQmKSBjb25z
dDsKLSAgICBib29sIGdldFdpdGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSwgU3RyaW5nJiB2YWx1ZSkgY29uc3Q7CisgICAgYm9vbCBnZXRXaXRoVW5kZWZp
bmVkT3JOdWxsQ2hlY2soY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBTdHJpbmcmIHZhbHVlKSBj
b25zdDsKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X2V4ZWM7IH0KICAgICBKU0M6OkpTT2JqZWN0KiBpbml0aWFsaXplck9iamVjdCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5pdGlhbGl6ZXJPYmplY3QuZ2V0KCk7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237013</attachid>
            <date>2014-08-22 16:50:11 -0700</date>
            <delta_ts>2014-08-24 11:57:41 -0700</delta_ts>
            <desc>[PATCH] Proposed Fix - should apply</desc>
            <filename>patch-that-should-apply.patch</filename>
            <type>text/plain</type>
            <size>3724</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjN2I4NDFiLi5kMDIyMTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTkg
QEAKIDIwMTQtMDgtMjIgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAor
ICAgICAgICBSZW1vdmUgdW5uZWNlc3NhcnkgV1RGU3RyaW5nIGNyZWF0aW9uIGluIERpY3Rpb25h
cnkgZ2V0dGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzYxODQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGljdGlv
bmFyeTo6Z2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9q
cy9EaWN0aW9uYXJ5Lmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkpTRGljdGlvbmFyeTo6Z2V0V2l0aFVuZGVmaW5lZE9yTnVsbENo
ZWNrKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaDoKKworMjAxNC0wOC0y
MiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCiAgICAgICAgIFdlYkNv
cmU6IFVzZSBBU0NJSUxpdGVyYWwgd2hlcmUgcG9zc2libGUKICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjE4MQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9EaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0RpY3Rpb25hcnkuY3BwCmluZGV4IDRkMDU4ZTIuLmRmNGRjNzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0RpY3Rpb25hcnkuY3BwCkBAIC05OCw3ICs5OCw3IEBAIGJvb2wg
RGljdGlvbmFyeTo6Z2V0T3duUHJvcGVydHlOYW1lcyhWZWN0b3I8U3RyaW5nPiYgbmFtZXMpIGNv
bnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRGljdGlvbmFyeTo6Z2V0V2l0aFVuZGVm
aW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBTdHJpbmcmIHZhbHVl
KSBjb25zdAorYm9vbCBEaWN0aW9uYXJ5OjpnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29u
c3QgY2hhciogcHJvcGVydHlOYW1lLCBTdHJpbmcmIHZhbHVlKSBjb25zdAogewogICAgIHJldHVy
biBtX2RpY3Rpb25hcnkuZ2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKHByb3BlcnR5TmFtZSwg
dmFsdWUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlv
bmFyeS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvRGljdGlvbmFyeS5oCmluZGV4IDRj
MzgyZjYuLmIxZjFiNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0Rp
Y3Rpb25hcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9EaWN0aW9uYXJ5LmgK
QEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNVbmRlZmluZWRPck51bGwoKSBj
b25zdCB7IHJldHVybiAhbV9kaWN0aW9uYXJ5LmlzVmFsaWQoKTsgfQogICAgIGJvb2wgZ2V0T3du
UHJvcGVydGllc0FzU3RyaW5nSGFzaE1hcChIYXNoTWFwPFN0cmluZywgU3RyaW5nPiYpIGNvbnN0
OwogICAgIGJvb2wgZ2V0T3duUHJvcGVydHlOYW1lcyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0Owot
ICAgIGJvb2wgZ2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lLCBTdHJpbmcmIHZhbHVlKSBjb25zdDsKKyAgICBib29sIGdldFdpdGhVbmRlZmluZWRP
ck51bGxDaGVjayhjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIFN0cmluZyYgdmFsdWUpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5jcHAKaW5kZXggNTUxMzRjOS4uMWFmMDI2ZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEaWN0aW9uYXJ5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuY3BwCkBAIC0yNjUsMTEg
KzI2NSwxMSBAQCB2b2lkIEpTRGljdGlvbmFyeTo6Y29udmVydFZhbHVlKEpTQzo6RXhlY1N0YXRl
KiwgSlNDOjpKU1ZhbHVlIHZhbHVlLCBSZWZQdHI8R2FtZQogfQogI2VuZGlmCiAKLWJvb2wgSlNE
aWN0aW9uYXJ5OjpnZXRXaXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUsIFN0cmluZyYgcmVzdWx0KSBjb25zdAorYm9vbCBKU0RpY3Rpb25hcnk6OmdldFdp
dGhVbmRlZmluZWRPck51bGxDaGVjayhjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIFN0cmluZyYg
cmVzdWx0KSBjb25zdAogewogICAgIEFTU0VSVChpc1ZhbGlkKCkpOwogICAgIEpTVmFsdWUgdmFs
dWU7Ci0gICAgaWYgKHRyeUdldFByb3BlcnR5KHByb3BlcnR5TmFtZS51dGY4KCkuZGF0YSgpLCB2
YWx1ZSkgIT0gUHJvcGVydHlGb3VuZCB8fCB2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAg
IGlmICh0cnlHZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVlKSAhPSBQcm9wZXJ0eUZvdW5k
IHx8IHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHJlc3VsdCA9IHZhbHVlLnRvV1RGU3RyaW5nKG1fZXhlYyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RpY3Rpb25hcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCmluZGV4IGE0ZTgxMjYuLmU5MDJmOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRGljdGlvbmFyeS5oCkBAIC03NCw3ICs3NCw3IEBAIHB1
YmxpYzoKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3BlcnR5IHdhcyBmb3VuZCBpbiB0
aGUgZGljdGlvbmFyeSwgYW5kIHRoZSB2YWx1ZSBjb3VsZCBiZSBjb252ZXJ0ZWQgdG8gdGhlIGRl
c2lyZWQgdHlwZS4KICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUmVzdWx0PgogICAgIGJvb2wgZ2V0
KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgUmVzdWx0JikgY29uc3Q7Ci0gICAgYm9vbCBnZXRX
aXRoVW5kZWZpbmVkT3JOdWxsQ2hlY2soY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIFN0cmlu
ZyYgdmFsdWUpIGNvbnN0OworICAgIGJvb2wgZ2V0V2l0aFVuZGVmaW5lZE9yTnVsbENoZWNrKGNv
bnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgU3RyaW5nJiB2YWx1ZSkgY29uc3Q7CiAKICAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlY1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjOyB9CiAgICAgSlND
OjpKU09iamVjdCogaW5pdGlhbGl6ZXJPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX2luaXRpYWxp
emVyT2JqZWN0LmdldCgpOyB9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>