getAttribute does not behave correctly for mixed-case attributes on HTML elements
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Mar 2013 06:57:55 +0000 (06:57 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 5 Mar 2013 06:57:55 +0000 (06:57 +0000)
https://bugs.webkit.org/show_bug.cgi?id=105713

Patch by Arpita Bahuguna <a.bah@samsung.com> on 2013-03-04
Reviewed by Andreas Kling.

Source/WebCore:

getAttribute() and getAttributeNode() APIs do not convert the
passed attribute name to lowercase before comparing against the
existing attributes.
The specification however states that the passed name should
be converted to ASCII lowercase before checking for the existence
of the given attribute. [www.w3.org/TR/domcore/#dom-element-getattribute]

Test: fast/dom/Element/getAttribute-case-insensitivity.html

* dom/Element.h:
(WebCore::ElementData::getAttributeItemIndex):
getAttributeItemIndex() accepts a bool param 'shouldIgnoreAttributeCase'
which specifies whether the attribute's case should be ignored
before comparison. But inspite of this param's value we still carry
out a case sensitive search.
Have modified the same to convert the passed attribute's name to
lowercase if 'shouldIgnoreAttributeCase' is true.

LayoutTests:

* fast/dom/Element/getAttribute-case-insensitivity-expected.txt: Added.
* fast/dom/Element/getAttribute-case-insensitivity.html: Added.
Layout test added for verifying that getAttribute() and getAttributeNode()
APIs convert the passed attribute name to lowercase before comparing
against the existing attributes.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@144726 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/dom/Element/getAttribute-case-insensitivity-expected.txt [new file with mode: 0644]
LayoutTests/fast/dom/Element/getAttribute-case-insensitivity.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/dom/Element.h

index cfccdee..25411a6 100644 (file)
@@ -1,3 +1,16 @@
+2013-03-04  Arpita Bahuguna  <a.bah@samsung.com>
+
+        getAttribute does not behave correctly for mixed-case attributes on HTML elements
+        https://bugs.webkit.org/show_bug.cgi?id=105713
+
+        Reviewed by Andreas Kling.
+
+        * fast/dom/Element/getAttribute-case-insensitivity-expected.txt: Added.
+        * fast/dom/Element/getAttribute-case-insensitivity.html: Added.
+        Layout test added for verifying that getAttribute() and getAttributeNode()
+        APIs convert the passed attribute name to lowercase before comparing
+        against the existing attributes.
+
 2013-03-04  Joshua Bell  <jsbell@chromium.org>
 
         [V8] Add LayoutTests for SerializedScriptValue Int32/Uint32 cases
diff --git a/LayoutTests/fast/dom/Element/getAttribute-case-insensitivity-expected.txt b/LayoutTests/fast/dom/Element/getAttribute-case-insensitivity-expected.txt
new file mode 100644 (file)
index 0000000..dccbb4e
--- /dev/null
@@ -0,0 +1,15 @@
+Test for Bugzilla bug: 105713: getAttribute does not behave correctly for mixed-case attributes on HTML testements.
+This test verifies that the getAttribute() and the getAttributeNode() APIs convert the passed attribute name to lowercase before comparing against existing attributes.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+PASS test.getAttribute('NEWATTR') is 'PASS'
+PASS test.getAttributeNode('NEWATTR').value is 'PASS'
+PASS test.getAttributeNS(null, 'NEWATTR') is 'FAIL'
+PASS test.getAttribute('newattr') is 'PASS'
+PASS test.getAttributeNode('newattr').value is 'PASS'
+PASS test.getAttributeNS(null, 'newattr') is 'PASS'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/dom/Element/getAttribute-case-insensitivity.html b/LayoutTests/fast/dom/Element/getAttribute-case-insensitivity.html
new file mode 100644 (file)
index 0000000..728b3d4
--- /dev/null
@@ -0,0 +1,32 @@
+<html>
+<head>
+<script src="../../js/resources/js-test-pre.js"></script>
+<script>
+function runTest()
+{
+    description("This test verifies that the getAttribute() and the getAttributeNode() APIs convert the passed attribute name to lowercase before comparing against existing attributes.");
+    
+    var test = document.getElementById("test");
+    test.setAttributeNS(null, "NEWATTR", "FAIL");
+    test.setAttributeNS(null, "newattr", "PASS");
+    
+    if (window.testRunner) {
+        shouldBe("test.getAttribute('NEWATTR')", "'PASS'");
+        shouldBe("test.getAttributeNode('NEWATTR').value", "'PASS'");
+        shouldBe("test.getAttributeNS(null, 'NEWATTR')", "'FAIL'");
+        shouldBe("test.getAttribute('newattr')", "'PASS'");
+        shouldBe("test.getAttributeNode('newattr').value", "'PASS'");
+        shouldBe("test.getAttributeNS(null, 'newattr')", "'PASS'");
+    
+        isSuccessfullyParsed();
+    }
+}
+</script>
+</head>
+<body onload="runTest()">
+<div>Test for Bugzilla bug:<a href="https://bugs.webkit.org/show_bug.cgi?id=105713"> 105713:</a>  getAttribute does not behave correctly for mixed-case attributes on HTML testements.</div>
+<div id="test"></div>
+<div id="description"></div>
+<div id="console"></div>
+</body>
+</html>
\ No newline at end of file
index dede0e3..8d1b9d5 100644 (file)
@@ -1,3 +1,28 @@
+2013-03-04  Arpita Bahuguna  <a.bah@samsung.com>
+
+        getAttribute does not behave correctly for mixed-case attributes on HTML elements
+        https://bugs.webkit.org/show_bug.cgi?id=105713
+
+        Reviewed by Andreas Kling.
+
+        getAttribute() and getAttributeNode() APIs do not convert the
+        passed attribute name to lowercase before comparing against the
+        existing attributes.
+        The specification however states that the passed name should
+        be converted to ASCII lowercase before checking for the existence
+        of the given attribute. [www.w3.org/TR/domcore/#dom-element-getattribute]
+
+        Test: fast/dom/Element/getAttribute-case-insensitivity.html
+
+        * dom/Element.h:
+        (WebCore::ElementData::getAttributeItemIndex):
+        getAttributeItemIndex() accepts a bool param 'shouldIgnoreAttributeCase'
+        which specifies whether the attribute's case should be ignored
+        before comparison. But inspite of this param's value we still carry
+        out a case sensitive search.
+        Have modified the same to convert the passed attribute's name to
+        lowercase if 'shouldIgnoreAttributeCase' is true.
+
 2013-03-04  Kunihiko Sakamoto  <ksakamoto@chromium.org>
 
         [Chromium] Add runtime flag for font load events
index 4988b1d..c3046fb 100644 (file)
@@ -941,7 +941,7 @@ inline size_t ElementData::getAttributeItemIndex(const AtomicString& name, bool
     for (unsigned i = 0; i < len; ++i) {
         const Attribute* attribute = attributeItem(i);
         if (!attribute->name().hasPrefix()) {
-            if (name == attribute->localName())
+            if ((shouldIgnoreAttributeCase ? name.lower() : name) == attribute->localName())
                 return i;
         } else
             doSlowCheck = true;