<?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>11815</bug_id>
          
          <creation_ts>2006-12-12 14:43:45 -0800</creation_ts>
          <short_desc>XPathEvaluator behavior does not match Firefox - substring() and empty element</short_desc>
          <delta_ts>2007-01-29 10:17:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>XML</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>10489</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jesse Costello-Good">jesse</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>darin</cc>
    
    <cc>ddkilzer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>42337</commentid>
    <comment_count>0</comment_count>
    <who name="Jesse Costello-Good">jesse</who>
    <bug_when>2006-12-12 14:43:45 -0800</bug_when>
    <thetext>The following test cases do not behave the same in Safari as in Firefox.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42338</commentid>
    <comment_count>1</comment_count>
    <who name="Jesse Costello-Good">jesse</who>
    <bug_when>2006-12-12 14:45:55 -0800</bug_when>
    <thetext>// #1:
// An empty node value causes the substring() function to return true when it should return false.

var strXML = &apos;&lt;data&gt;&lt;record id=&quot;-a-&quot;&gt;&lt;/record&gt;&lt;record id=&quot;a-a&quot;&gt;-hi-&lt;/record&gt;&lt;/data&gt;&apos;;
var doc = (new DOMParser()).parseFromString(strXML, &quot;text/xml&quot;);
var xpe = new XPathEvaluator();
var objResult = xpe.evaluate(&quot;//record[substring(.,1,1)=&apos;-&apos;]&quot;, doc, null, 0, null);
var itm = null;
var objNodes = [];
while (itm = objResult.iterateNext()) objNodes.push(itm);

assertEquals(1, objNodes.length); // Safari yields 2
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42333</commentid>
    <comment_count>2</comment_count>
    <who name="Jesse Costello-Good">jesse</who>
    <bug_when>2006-12-12 14:47:04 -0800</bug_when>
    <thetext>// #2
// function name() does not work with attribute nodes

var strXML = &apos;&lt;data&gt;&lt;record id=&quot;-a-&quot; a=&quot;v&quot;&gt;???&lt;/record&gt;&lt;record id=&quot;a-a&quot;&gt;{abc}&lt;/record&gt;&lt;/data&gt;&apos;;
var doc = (new DOMParser()).parseFromString(strXML, &quot;text/xml&quot;);
var xpe = new XPathEvaluator();
var objResult = xpe.evaluate(&quot;//@*[name()=&apos;id&apos;]&quot;, doc, null, 0, null);
var itm = null;
var objNodes = [];
while (itm = objResult.iterateNext()) objNodes.push(itm);

assertEquals(2, objNodes.length); // Safari yields 0

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>34165</commentid>
    <comment_count>3</comment_count>
    <who name="Jesse Costello-Good">jesse</who>
    <bug_when>2007-01-19 22:32:29 -0800</bug_when>
    <thetext>I split this out in to two different issues. #2 is moved to bug 12340.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31629</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-27 13:03:23 -0800</bug_when>
    <thetext>This appears to be a general problem in our XPath code - all C++ string literals are treated as boolean values.

Easy to fix by adding another constructor to XPath::Value, but I cannot understand how this occurs; suspecting a gcc bug. Please tell me I&apos;m wrong :-). Test case:

-----------------------
#include &lt;stdio.h&gt;

class String {
public:
  String(const char*) {}
};

class Value {
public:
  Value(bool) { printf(&quot;bool\n&quot;); }
  Value(const String&amp;) { printf(&quot;String\n&quot;); }
};

int main()
{
  Value val(&quot;&quot;);
}
-----------------------
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31577</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2007-01-27 15:06:40 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; This appears to be a general problem in our XPath code - all C++ string
&gt; literals are treated as boolean values.
&gt; 
&gt; Easy to fix by adding another constructor to XPath::Value, but I cannot
&gt; understand how this occurs; suspecting a gcc bug. Please tell me I&apos;m wrong :-).

I believe this Google Groups thread answers it:

http://groups.google.com/group/comp.lang.c++/browse_thread/thread/73ab483d2ef241c/487423eb73ee10d6%23487423eb73ee10d6

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31512</commentid>
    <comment_count>6</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-28 01:38:29 -0800</bug_when>
    <thetext>The replies in this thread point out that pointers can be converted to bool - but a string literal is not a pointer, it&apos;s &quot;const char[n]&quot; (with a deprecated conversion allowing it to be converted to char*).

OTOH, the two transformations needed to get from a string literal to a bool fall into different categories (lvalue transformation and conversion), and are thus allowed in a standard conversion sequence, see section 13.3.3.1 of the standard. Not that I can claim complete understanding now, but I&apos;m convinced.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31510</commentid>
    <comment_count>7</comment_count>
      <attachid>12721</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-28 02:11:17 -0800</bug_when>
    <thetext>Created attachment 12721
proposed fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31290</commentid>
    <comment_count>8</comment_count>
      <attachid>12721</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-01-28 18:06:15 -0800</bug_when>
    <thetext>Comment on attachment 12721
proposed fix

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>31022</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2007-01-29 10:01:16 -0800</bug_when>
    <thetext>Committed revision 19225.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12721</attachid>
            <date>2007-01-28 02:11:17 -0800</date>
            <delta_ts>2007-01-28 18:06:15 -0800</delta_ts>
            <desc>proposed fix</desc>
            <filename>11815r1_patch.txt</filename>
            <type>text/plain</type>
            <size>4158</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE5MTk3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDctMDEtMjggIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExODE1
CisgICAgICAgIFhQYXRoRXZhbHVhdG9yIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIEZpcmVmb3gg
LSBzdWJzdHJpbmcoKSBhbmQgZW1wdHkgZWxlbWVudAorCisgICAgICAgICogZmFzdC94cGF0aC9l
bXB0eS1zdHJpbmctc3Vic3RyaW5nLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFz
dC94cGF0aC9lbXB0eS1zdHJpbmctc3Vic3RyaW5nLmh0bWw6IEFkZGVkLgorCiAyMDA3LTAxLTI3
ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAobWlzc2luZyBwaXhlbCB0ZXN0IHJlc3VsdHMpLgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC94cGF0aC9lbXB0eS1zdHJpbmctc3Vic3RyaW5nLWV4cGVjdGVkLnR4dAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hwYXRoL2VtcHR5LXN0cmluZy1zdWJzdHJpbmctZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC94cGF0aC9lbXB0eS1z
dHJpbmctc3Vic3RyaW5nLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzIEBA
CitUZXN0IGZvciBidWcgMTE4MTU6IFhQYXRoRXZhbHVhdG9yIGJlaGF2aW9yIGRvZXMgbm90IG1h
dGNoIEZpcmVmb3ggLSBzdWJzdHJpbmcoKSBhbmQgZW1wdHkgZWxlbWVudC4KKworU1VDQ0VTUwoK
UHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC94cGF0aC9lbXB0eS1zdHJpbmct
c3Vic3RyaW5nLWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAg
KyB0ZXh0L3BsYWluCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3hwYXRoL2VtcHR5LXN0cmluZy1zdWJzdHJpbmcuaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3hwYXRoL2VtcHR5LXN0cmluZy1zdWJzdHJpbmcuaHRtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QveHBhdGgvZW1wdHktc3RyaW5nLXN1YnN0
cmluZy5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBACis8cD5UZXN0IGZvciA8YSBo
cmVmPSJodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTgxNSI+YnVnIDEx
ODE1PC9hPjoKK1hQYXRoRXZhbHVhdG9yIGJlaGF2aW9yIGRvZXMgbm90IG1hdGNoIEZpcmVmb3gg
LSBzdWJzdHJpbmcoKSBhbmQgZW1wdHkgZWxlbWVudC48L3A+Cis8c2NyaXB0PgoraWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4
dCgpOworCit2YXIgc3RyWE1MID0gJzxkYXRhPjxyZWNvcmQ+PC9yZWNvcmQ+PHJlY29yZD4taGkt
PC9yZWNvcmQ+PC9kYXRhPic7Cit2YXIgZG9jID0gKG5ldyBET01QYXJzZXIoKSkucGFyc2VGcm9t
U3RyaW5nKHN0clhNTCwgInRleHQveG1sIik7Cit2YXIgeHBlID0gbmV3IFhQYXRoRXZhbHVhdG9y
KCk7Cit2YXIgb2JqUmVzdWx0ID0geHBlLmV2YWx1YXRlKCIvL3JlY29yZFtzdWJzdHJpbmcoLiwx
LDEpPSctJ10iLCBkb2MsIG51bGwsIDAsIG51bGwpOwordmFyIGl0bSA9IG51bGw7Cit2YXIgb2Jq
Tm9kZXMgPSBbXTsKK3doaWxlIChpdG0gPSBvYmpSZXN1bHQuaXRlcmF0ZU5leHQoKSkgb2JqTm9k
ZXMucHVzaChpdG0pOworCitpZiAob2JqTm9kZXMubGVuZ3RoID09IDEpCisgIGRvY3VtZW50Lndy
aXRlKCJTVUNDRVNTIik7CitlbHNlCisgIGRvY3VtZW50LndyaXRlKCJGQUlMVVJFOiBtYXRjaGVk
ICIgKyBvYmpOb2Rlcy5sZW5ndGggKyAiIG5vZGVzLiIpOworPC9zY3JpcHQ+CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L3hwYXRoL2VtcHR5LXN0cmluZy1zdWJzdHJpbmcu
aHRtbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUKICAgKyB0ZXh0L2h0bWwKCkluZGV4
OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMTkxOTcpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDE4IEBACisyMDA3LTAxLTI4ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTgxNQorICAgICAgICBYUGF0aEV2
YWx1YXRvciBiZWhhdmlvciBkb2VzIG5vdCBtYXRjaCBGaXJlZm94IC0gc3Vic3RyaW5nKCkgYW5k
IGVtcHR5IGVsZW1lbnQKKworICAgICAgICBUZXN0OiBmYXN0L3hwYXRoL2VtcHR5LXN0cmluZy1z
dWJzdHJpbmcuaHRtbAorCisgICAgICAgICogeG1sL1hQYXRoVmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6WFBhdGg6OlZhbHVlOjpWYWx1ZSk6CisgICAgICAgICogeG1sL1hQYXRoVmFsdWUu
aDoKKyAgICAgICAgQWRkZWQgYSBjb25zdHJ1Y3RvciB0YWtpbmcgY29uc3QgY2hhciosIHNvIHRo
YXQgc3RyaW5nIGxpdGVyYWxzIGFuZCBhcnJheXMgZG9uJ3QgCisgICAgICAgIGdldCBjb252ZXJ0
ZWQgdG8gYm9vbGVhbiB2YWx1ZXMuCisKIDIwMDctMDEtMjcgIEFkYW0gUm9iZW4gIDxhcm9iZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYS4KSW5kZXg6IFdlYkNvcmUveG1s
L1hQYXRoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUveG1sL1hQYXRoVmFsdWUuY3Bw
CShyZXZpc2lvbiAxOTE4NCkKKysrIFdlYkNvcmUveG1sL1hQYXRoVmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw2ICs3MiwxMSBAQCBWYWx1ZTo6VmFsdWUoZG91YmxlIHZhbHVlKQogewog
fQogCitWYWx1ZTo6VmFsdWUoY29uc3QgY2hhciogdmFsdWUpCisgICAgOiBtX3R5cGUoU3RyaW5n
VmFsdWUpLCBtX3N0cmluZyh2YWx1ZSkKK3sKK30KKwogVmFsdWU6OlZhbHVlKGNvbnN0IFN0cmlu
ZyYgdmFsdWUpCiAgICAgOiBtX3R5cGUoU3RyaW5nVmFsdWUpLCBtX3N0cmluZyh2YWx1ZSkKIHsK
SW5kZXg6IFdlYkNvcmUveG1sL1hQYXRoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC9YUGF0aFZhbHVlLmgJKHJldmlzaW9uIDE5MTg0KQorKysgV2ViQ29yZS94bWwvWFBhdGhWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgICAgIFZhbHVlKHVuc2lnbmVkKTsKICAgICAgICAgICAgIFZhbHVlKHVuc2lnbmVk
IGxvbmcpOwogICAgICAgICAgICAgVmFsdWUoZG91YmxlKTsKKyAgICAgICAgICAgIFZhbHVlKGNv
bnN0IGNoYXIqKTsKICAgICAgICAgICAgIFZhbHVlKGNvbnN0IFN0cmluZyYpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
</data>
<flag name="review"
          id="4848"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>